2013年4月23日火曜日

Dropbox を GoogleDrive に放り込んでみた

Dropbox に保存したファイルの全文検索したくて、いいとこ取りして検索機能だけ GoogleDrive 使っちゃおうというお話です。

数年前から Dropbox 愛用してるのですが、全文検索がサクッとできたらいいなぁと思うこと多いんですよね。昔の作業メモでサラッと書いたやつって「どこやったっけ…。なんか書いたんだけどなぁ (´・ω・`)」になるので。

後発の GoogleDrive は Google によるものだけあって検索には優れてるのですが、個人的にはテキスト形式で書きたい技術メモを編集する際に不便[ 1 ]でメインのクラウドストレージにする気にはならず。Evernote も悪くないのでしょうが、テキストを Emacs で編集したくて、Office 系ソフトも必要に応じて使いたい私には上手くフィットせず。

そんな際、友人から 「GoogleDrive の中に Dropbox 入れたらいんじゃね?」 とのアドバイスがありまして。

誰かしらやってないのかと "Dropbox GoogleDrive" で検索してもこの手のネタはあまり出てこないので、手探りながらちょっと試してみました。こちらの記事で

  • やってみてどうだったか
  • 具体的にどう導入してみたか

を紹介してみます。

目次

システムの概要

具体的には以下のように Dropbox を GoogleDrive に放り込んでみました。

ひねりも何もなく、GoogleDrive フォルダに Dropbox フォルダを突っ込んでみたわけです。

Macbook Air 上でファイルを編集する場合はダイレクトに GoogleDrive に (および Dropbox にも) ファイルがアップロードされます。Android で編集する場合は Dropbox を介して一度 Mac にファイルがダウンロードされ、そこから GoogleDrive にファイルがアップロードされます。結果として Mac および Android の両方で GoogleDrive を介して Dropbox 内のファイルを全文検索可能です。

結論 (やってみてどうだったか)

強引なやり方でしたが、とても良い感じです \(^o^)/。特に実現したかった

  • むかし書いたメモや作業ログを Dropbox 内全体から横断的にテキスト検索

についてはバッチリ実現できるので個人的には大満足です。やはり検索は Google 様々ですね。以下検索画面のスクリーンショットですが、GoogleDrive の検索オプションでファイルの種別を選択することもできますし、Google での検索でよく使う、フレーズ検索 ("" で括る)、OR 演算子、除外検索 (キーワードにハイフンを付与) といったものもそのまま使えます (検索オプションは Google ドライブを検索する で紹介されてます)。

なお、日常使う上で多少気にする点もあるはありますがそれは最後に書きます。

Dropbox を GoogleDrive に突っ込む作業も、いろいろ懸念してた割には大した問題もなくさっくりできちゃいました。

Dropbox を GoogleDrive に放り込んだ際の作業ログ

作業前の環境

私が作業した際の作業ログを貼り付けますが、その前に作業時の私の環境を記しておきます。

  • ハードと OS
    • MacBook Air
    • OS X 10.8.3 (Mountain Lion)
  • Dropbox アプリ
    • インストール済み
    • バージョン: 1.6.18 (この記事を書いてる最中に 2.0.6 に更新しましたが特に問題なし)
    • 同期対象フォルダ: /Users/ユーザ名/Dropbox/
    • 使用/全体容量 (概算): 2.4GB/5.0GB
      • デフォルトの容量 2.0GB からカメラアップロードなどで 5.0GB まで拡張してます。
  • GoogleDrive アプリ
    • インストール済み
    • バージョン: 1.8
    • 同期対象フォルダ: /Users/ユーザ名/GoogleDrive/
    • 使用/全体容量 (概算): 0.4GB/5.0GB

GoogleDrive はスプレッドシートなどを少し使っている程度で Dropbox をまるごと入れる空き容量は十分ありましたんで、特にデータ整理はせずに入れちゃってます。今後増えてきたら中身の整理するか有料プランに移行すればいいかと考えました。

作業後のディレクトリ構成

作業後はこんなディレクトリ構成になります。

/Users/ユーザ名/
|
|-- GoogleDrive/
|   |
|   |-- Dropbox/                        # Dropbox の実体をこちらに移動
|   |                                   #   ※ GoogleDrive 以下に入れはしますが、
|   |                                   #      操作は全て Dropbox から行う前提です
|   |
|   `-- GoogleDrive/                    # 元々 GoogleDrive 内にあったオブジェクトは
|                                       # このサブフォルダに移動
|
`-- Dropbox -> GoogleDrive/Dropbox/     # シンボリックリンクに置き換え

特徴としては以下でしょうか。

  • Dropbox フォルダを GoogleDrive フォルダ以下に移動
    • 放り込むという言葉そのまんまですが、これで Dropbox で管理するファイルが常に GoogleDrive にもアップロードされます。このフォルダ以下は Dropbox アプリと GoogleDrive アプリの両者の管理下に置かれますが、とりあえず問題なしです。
  • ホームフォルダ以下に ~/GoogleDrive/Dropbox のシンボリックリンクを作成
    • これは Dropbox の再リンク (全データのダウンロードやり直し) をしたくないためにとった対策です。まあ使い勝手としても、Dropbox 以下のパスがこれまでと変わらなくなりますし。
  • 元々 GoogleDrive 内にあったオブジェクトをサブフォルダの GoogleDrive に移動
    • 必須ではないのですが、GoogleDrive のトップを見た時に Dropbox が埋もれるのが嫌だったのでこういう形に整理しました。

作業時に気をつけた事

  • Dropbox に保管しているデータが消えちゃうと悲しいので、コピーをとっておく

    • 特に Dropbox と GoogleDrive の双方のアプリが競合動作起こしたりする事を恐れたので (結果的には何の問題もありませんでしたが)
  • Dropbox フォルダの移動時にアプリが動いてややこしいことが起こる事態を回避するため、Dropbox アプリは一度削除 → 移動 → 元の場所にシンボリックリンク作成 → Dropbox アプリ再インストール、という多少念のいる手順をとった

    • アプリは削除しましたが、Dropbox のリンクの解除はしてません (※ リンク解除すると Dropbox のサーバからデータを全部再ダウンロードする必要がありそうなため)

実際の導入作業

  • 事前準備

  • GoogleDrive 内の既存のデータを GoogleDrive 内に もう一つ GoogleDrive フォルダを作成 してそこへ移動

    • https://drive.google.com/ にアクセスし、Google アカウントでログイン
    • [マイ ドライブ] を選択し、GoogleDrive フォルダを新規に作成
    • [マイ ドライブ] (トップフォルダ) ですべてのオブジェクトを選択し、GoogleDrive だけチェックを外す
    • [その他]→[移動先...] を選択し、GoogleDrive を移動先に選択して [移動] をクリック
    • 手元の Mac の ~/GoogleDrive 以下も追随してファイル・フォルダが移動されるはずなので完了まで待ち
      • 上手く追随しないようなら GoogleDrive を停止→起動してみること
  • Dropbox フォルダごと GoogleDrive 内にコピー

    $ cd ~/Dropbox
    $ mkdir ~/GoogleDrive/Dropbox/
    $ rsync --delete -avP ./ ~/GoogleDrive/Dropbox/ | tee /tmp/rsync.log
    

    GoogleDrive 以下に Dropbox フォルダがコピーされると、GoogleDrive アプリの方でアップロードが開始されます。アップロード速度は必ずしも速くないですぐには終わりませんが、しばらくはバックグラウンドで動かしておきます。また、対象ファイル数が多い場合に一部アップロードエラーが生じたりしますがとりあえずこのタイミングではスルーで。

  • Dropbox フォルダ内のファイルのチェックサムを取得しておく

    今後の作業時にファイルの欠損や意図しない変更が行われた際にそれを検知できるよう、チェックサムを取得しておく (結果杞憂でしたが)。

    $ cd ~/GoogleDrive/Dropbox
    $ find ./ -type f -print0 | xargs -0 -J % md5 % | tee /tmp/MD5-Dropbox-01.txt
    
  • Dropbox アプリを削除

    • 以降の作業中に Dropbox アプリが動かないようにするのが目的なので、停止しておけば一応 OK。私が作業した際は念のため削除しました。
    • Dropbox のリンクを解除する必要はありません。というかリンク解除するとあとで面倒なのでしないのが吉です。
  • Dropbox アプリ削除後に Dropboxフォルダ内のデータに変化がないことを確認 (これもあくまで念のため)

    $ cd ~/GoogleDrive/Dropbox
    $ find ./ -type f -print0 | xargs -0 -J % md5 % | tee /tmp/MD5-Dropbox-02.txt
    $ diff /tmp/MD5-Dropbox-0{1,2}.txt ; echo $?
    0
    
  • コピー元の Dropbox フォルダを Dropbox_bk にリネーム。最悪の場合のデータ復帰用です。

    $ cd ~/
    $ mv Dropbox Dropbox_bk
    
  • ホームディレクトリに ~/GoogleDrive/Dropbox へのシンボリックリンク作成

    $ cd ~/
    $ ln -s GoogleDrive/Dropbox
    $ ls -l Dropbox
    lrwxr-xr-x  1 user  staff  19 MM DD hh:mm Dropbox@ -> GoogleDrive/Dropbox
    
  • Dropbox アプリを再度インストール

    • 過去にインストールしたのと同様になります。以前と同じアカウントを設定します。
    • 普通にアプリを削除した場合、アカウント情報や同期対象フォルダ情報はどこかに残っているらしく、インストールが完了すると何事もなかったように既存アカウント・フォルダで同期が実施されます。
      • 同期対象フォルダはシンボリックリンクに置き換わってますが、Dropbox アプリ的には問題ない模様
  • Dropbox アプリ再インストール後に Dropbox フォルダ内で意図しないデータ更新が無いことを改めて確認

    $ cd ~/GoogleDrive/Dropbox
    $ find ./ -type f -print0 | xargs -0 -J % md5 % | tee /tmp/MD5-Dropbox-03.txt
    $ diff /tmp/MD5-Dropbox-0{2,3}.txt ; echo $?
    0
    
  • dropbox.com 上からも念のため確認

  • GoogleDrive へのアップロードエラーについて

    • 作業当時 (2013年4月頃) のことですが、GoogleDrive は Dropbox ほどにはファイル同期の仕組みが優れていないらしく、今回のような作業で 1 万程度のファイルのアップロードを一度に実施しようとすると アップロードエラーが生じます。メニューバーの GoogleDrive アイコンをクリックするとエラーの有無と詳細が分かります。
    • この解決方法ですが、とりあえず楽ちんなのは GoogleDrive アプリの再起動 です。何度かやってれば全部アップロードできます。一度大量のアップロードが済んでしまえばそんなにひどい頻度では起こりません。たまに出ることあるのでその際にまたアプリ再起動してあげれば OK です。
  • GoogleDrive へのアップロード待ち

    • ここまでの作業が終われば導入の作業自体は完了です。GoogleDrive での検索など試したいところですが、アップロードが全部終わらないと検索対象も限定されるため、しばし放置して (ときおり必要そうなら GoogleDrive アプリを再起動したりしつつ) データが全部アップロードされるのを待ちます。

検索してみる

  • https://drive.google.com/ にアクセスし、適当なキーワードで検索してみます。

  • テキストのメモだけ検索したい時は、検索窓の をクリックして テキスト ドキュメント を選択すると、テキストデータだけピックアップできます。".txt" 以外の拡張子も引っかかってくるのでファイルの中身を見てる可能性が高いですが、".md" (個人的に GitHub 内で Markdown 書く際に利用) は直接ファイル名で検索しないと引っかかってこないため、テキストのメモは ".txt" で取っとく方が無難なようです。

アップロード動作や検索インデックスの更新についてテスト

Mac 上でのファイル更新テスト

Mac 上で Dropbox 内 (= GoogleDrive 内) のファイルを更新してみます。Dropbox と GoogleDrive の両アプリのアイコンを見てるとそれぞれ更新後 10 秒以内ぐらいにアップロードを実施してくれてるのが確認できます (Dropbox の方が反応は早いですね)。

Android で作成したファイルのアップロードテスト

Android の Dropbox アプリで何かしらファイルを作成してみます。以下のような動きになることが確認できます。

  1. Android の Dropbox アプリでファイルを作成すると、当該ファイルが Dropbox サイトにアップロードされる
  2. Mac 上の Dropbox アプリが、Dropbox サイトから Dropbox フォルダにファイルをダウンロード
  3. Mac 上の GoogleDrive アプリが当該ファイルを GoogleDrive サイトにアップロード
  4. GoogleDrive 上で当該ファイルについて検索可能に

検索インデックスの更新

気になったので GoogleDrive 側の検索インデックスの更新タイミングを確認してみました。

  • 新規ファイルをアップロードした場合

    • ほぼリアルタイムでファイルの内容を検索可能です
  • 既存ファイルを更新した場合

    • 更新 (GoogleDrive へアップロード) から 10 分程度 (遅くとも 1 時間後には)、更新後のファイルの内容で検索可能

元々の要望が むかーし書いたメモを検索したい なので、更新の場合でもこの程度のタイムラグなら気にならないレベルかなと。

気になる点

強引な手段で Dropbox の内容を Google 検索できるようにしたので少し気になる点はあります。

  • キャッシュファイルも検索インデックスに載ってしまう

    • Android などで Dropbox にファイルをアップロードした場合、Mac に更新ファイルがダウンロードされる際にキャッシュファイルが Dropbox/.dropbox.cache/ 以下に作成されます。なお、Mac 上で直接ファイルを編集する場合は作成されないようです。
    • Dropbox フォルダは GoogleDrive フォルダに入ってますんで、キャッシュファイルも検索インデックスに載っちゃいます。
    • キャッシュファイルを消さないでいると、こういう悲しいことになります…。
    • キャッシュファイルは削除してしまえばすぐに検索インデックスから消えてくれます。直接削除しても良いですが、下記のよいなキャッシュクリーナツールもあるようです。
  • GoogleDrive アプリの同期性能がイマイチ

    • ときたま同期に失敗するようです。アプリを再起動すればちゃんと同期しなおしてくれるんですけどね。

まとめ

長くなってしまいましたが、要するに

  • Dropbox フォルダを GoogleDrive フォルダに放り込んだら、ちゃんと Google で全文検索できるようになりました

でした。まあいろいろ「あー使いたい。こー使いたい」とワガママ言ってるのでこういう工夫しなきゃいけないんですけどね。

クラウドサービスを手掛けてる会社同士の買収なども盛んなようですし、そのうち良い感じのサービスが出てきそうなんですけどね。あんまりガラパゴスなことをしたいわけじゃないので、情報収集とサービス試用は怠らないようにしないとですね。

なにか良さ気なものを見つけたらまたそのうち紹介します。


  1. 「はじめから GoogleDrive 使えばいんじゃね?」というご意見に対しての補足。個人的に一番不便なのは、スマホから GoogleDrive アプリでテキストファイルの編集・保存ができない事です。GoogleDrive アプリの思想的にはテキスト情報いじりたければ Google ドキュメント形式を使って欲しいみたいです。ただしこの Google ドキュメント形式は GoogleDrive アプリをインストールした PC ローカルにはドキュメントの URL 書いた ".gdoc" 拡張子のファイルが置かれるだけで、PC ローカルで Emacs でファイル編集とかできません。スマホの GoogleDrive アプリも Dropbox みたいにテキストファイルの編集・保存を他のアプリとシームレスにやり取りしてくれれば良いんですけどね。そんなわけで GoogleDrive の検索機能だけ使わせてもらいたくなったわけです []