Addicted to Mac

こころおどるコンピュータ。

検索結果を抽出するアプリ Dripper

text:

指定したフォルダに検索条件を与え、得られた検索結果をフォルダ階層構造を維持したままコピーするツール “Dripper” をつくりました。Mac OS Xに標準で付属しているユーティリティ・アプリケーション Automator で出来ています。

先にPosterousの方へブログの下書きを兼ね “extract” としてアップしていたのですが、アプリの名称を変更しアイコンも追加しました。また、以前のバージョンにはバグがありますので引き続きお使いいただける方はあらためてDripperをダウンロードの上お使いいただければ幸いです。

DOWNLOAD

Dripperってなに?

ウェブ制作の仕事をしていると、サイト更新時にサーバーへのアップロード担当が自分ではない場合に前回の更新時から修正や追加のあった「差分」となるファイルのみをまとめて送付する必要があったりします。

サイトが小さければそれほどの苦ではなくても、サイトが大きくなるにつれて修正や更新の量が増えてくると、その抽出作業だけでかなりの時間が取られてしまいますし、かと言って納品用のファイルなので作業をおろそかにするわけにもいかずまぁ本当に大変。しかしながら。んなもん機械の作業だろ、という気持ちもありAutomatorでアプリつくりました。ツールとして既にありそうなものですが不思議なことにMac用のソフトを見つけられなかったので。

Dripperは、

  1. 指定したフォルダに
  2. 検索条件を与え
  3. ファイルを抽出
  4. 抽出したファイルは別のフォルダへフォルダ階層構造を維持したままコピー

という作業を自動で実行するものです。最初は差分ファイルを抽出する目的でつくりましたが、検索条件を変えれば他の用途にも使えるよう幅を持たせました。以下、動作条件・注意事項と使い方です。

動作条件と注意事項

  • Mac OS X 10.6 Snow Leopardで動作いたします。
  • 内部処理に10.6より追加されたAutomatorアクションを使用しているため、10.5以下のバージョンでは動作いたしません。
  • 64bit, 32bit環境どちらでも動作します。
  • 私のMacにてさまざまなフォルダで試して一応の動作確認はしておりますが、動作保証はしておりません。
  • 通常・想定外の使用に関わらずなんらかの損害が発生しても責任は負いかねますので、ご自身の責任のもとご利用になってください。

Dripperの使い方

(1) まずはDripper.zipをダウンロードしてください。解凍するとDripperが現れますのでこれをお使いのMacのお好きな場所に設置してください。単体で動作しますのでアプリケーションフォルダでもデスクトップでもどこでも大丈夫です。

(2) ここからは実際の抽出作業です。Dripperへ検索対象にしたいフォルダをドラッグ アンド ドロップしてください。Dripperがフォルダを受け取り、起動します。

ダブルクリックで起動した場合やドロップしたアイテムがフォルダではなかった場合にはエラーダイアログが表示され、そのままアプリが終了します。

(3) ドロップすると検索の前段階としてフォルダの中身を取得する処理が始まります。Dripperの処理中はメニューバーにAutomatorアイコンが現れ、アイコンが回転します。ドロップしたフォルダの中身が大量にある場合には次のステップに進むまでに時間を要するかもしれません。

なお検索対象にできるフォルダはMacでマウントできるフォルダ全てですので、動作が重くなると思いますがネットワーク越しでも大丈夫なはずです。ただし、内部に含まれるファイルのアクセス権の設定によってはエラーとなる場合があるかも知れません(これはローカル上でも考えられます)。

※対象フォルダに含まれるファイル数はアプリの安定的な動作のためにもあまり多くない方が望ましいでしょう。検索にはMac OS XのSpotlightを使いますので高速で行われますが、数千や数万個に達した検索結果のコピーは想定しておらず、私自身試していません。

(4) 抽出条件の設定を求めるダイアログボックスが表示されます。デフォルトでは「最後に変更した日が YYYY/MM/DD より後」になっています。この設定だと、指定した日付より後に変更・追加した差分となるファイルのみ抽出されます。

この設定はもちろん変更したり条件を追加してもかまいません。設定が完了したら [続ける] ボタンをクリックしてください。

(5) するとDripperが検索条件に従いフォルダ内の検索処理を始め、抽出が済むと続けて別フォルダへのコピー処理に進みます。

アイコンが回り続けているという場合には単純に抽出やコピーの処理に時間がかかっているか、Dripperがフリーズしている可能性も考えられます。フリーズしているかの判断はご自身でしていただくしかないのですが、このアイコンをクリックしてメニューから強制終了させることは可能です。

(6) デスクトップに「Dripper_年月日_時分秒」という名前でフォルダが作成されます。期待したとおりの処理がなされていれば、この中に抽出されたファイルのコピーが元のフォルダの階層構造を維持した状態でコピーされているはずです。

下の例では、最後に変更した日が 2010/04/01 より後であるファイルのみ抽出されています。

検索結果に .DS_Store / .git / .svn / Thumbs.db が含まれていてもこれらのファイルやフォルダは多くの場合不要と考えられるためあらかじめコピーされない設定にしています。

また、適切な検索条件を与えたにも関わらずフォルダが空になっているなど期待する抽出が行われなかった場合には、ドロップするフォルダの中身を減らしてお試しください。

Dripperの編集・リメイクはご自由に

Automatorで出力したアプリは、再度Automatorで開いて内容を編集することが可能です。編集やリメイク、再配布について特に権利は主張いたしませんので出来るという方や中身に興味があるという方はぜひぜひご自由に自分好みのものに仕上げていただければと思います。

僕はプログラマではないこともあり、おそらくここでどうしてこんな無駄な処理をしているの?と感じられる部分があるはずですので、そうした部分が他の方の手によってより洗練されたものになればそれ以上にありがたいことはないです。もしより良いアイデアがありましたらそっとコメント欄などで教えていただけると嬉しいです。もちろんバグ情報もお知らせいただけると助かります。

今回内部処理として「Finder項目にフィルタを適用」アクションを重ねて使用しており、本来なら一度の適用で出来るはずで自分でも無駄に思っているフローがあるのですが、Automatorのバグなのか僕の理解が足りていないせいなのか、どうも期待する出力が得られずこうした適用の仕方になっています。その他、検索したファイルのコピーに1ファイルごとにrsyncコマンドを使っておりまして(汗)これはかなり間違っている気がするんですがもっと上手いやり方ってないんでしょうか。。

Automatorは使える奴

AutomatorはMac OS Xに付属するワークフロー構築ツールで、FinderやSafariやiCalなど様々なアプリケーションの機能を組み合わせて、自動処理プログラムを作ることができます。Tigerで初めて搭載され、その後Leopard・Snow LeopardとOSのバージョンアップとともに大幅な機能強化がなされてきました。

今回初めてまともに触ってみた感じから言うと、Automatorは「かなり使える奴」です。条件分岐処理が無いとか期待する アクションが含まれていないなど扱いづらい面やもっと強化できる面はまだまだありますが、スクリプティングを必要としない処理であれば、本当にドラッグ アンド ドロップやクリックというマウス操作だけで驚くほど複雑な処理を簡単に作ることができそうです。

Dripperのように汎用性(自分のMac以外の環境でも動く)を持たせようとすると限られた実装になってきてしまいますが、自分のMacで動けば良いということであれば、定型的な作業で自動化出来てしまうことが色々とありそうな予感。こういったことをやってくれるアプリないかな〜と延々と探し回る時間でAutomatorワークフローを作ってしまった方がもしかしたら速いかも。「特定のフォルダに音楽ファイルの入ったフォルダをドロップして、ネットワーク上の別のMacのiTunesライブラリに曲を追加」みたいなことはさくっとできてしまいます。素敵ング。