Leopard解体新書--第5回:ファイル監視を行うFSEvent - (page 2)

木下誠(HMDT)

2007-11-13 19:20

 フォルダ内のファイルを監視するFSEvent

 FSEventとは、File System Eventのことだ。ファイルシステムに発生したイベントを監視して、通知してくれるフレームワークである。こう書くと、まるで汎用的に使えるようだが、ほぼTime Machine専用と考えていい。

 なぜTime Machine専用かというと、これを説明するには、このフレームワークで何ができるかよりも、何ができないか、ということを説明する方が早い。このフレームワークは、ファイルシステムに変更が発生したときにそれを通知してくれるのだが、その単位はフォルダごとになる。特定のファイルを監視したり、ファイルに対する変更を知ることはできない。

 どういうことかというと、あるフォルダの中のファイルに何らかの変更が発生したということは、分かる。だが、どのファイルが変更されたかということは、分からない。同様に、フォルダへのファイルの追加や削除が発生したことは、分かる。だが、どのファイルが追加、削除されたかということは、分からない。

 つまり、何かが起きた、ということは分かるのだが、何が起きたかは分からないのだ。非常にざっくりとした仕様で、完全にTime Machineに合わせて作られていると言えるだろう。

FSEventを実験する

 そんなFSEventだが、どのように動作するのか、ちょっと実験してみよう。開発環境とともにインストールされるサンプルの中に、RubyCocoaでFSEventを利用するものがあるので、それを利用する。RubyCocoaについては、本連載の第一回を参照してほしい

 サンプルは、/Developer/Exapmles/Ruby/RubyCocoa/Scriptsにある、watcher.rbというファイルだ。これは、コマンドラインから実行するという前提で作られているので、ターミナルを起動しよう。次のように入力してほしい。

$ cd /Developer/Exapmles/Ruby/RubyCocoa/Scripts
$ ruby watcher.rb ~/Desktop

 2行目で、watcher.rbを実行している。このとき、引数としてフォルダのパスを渡すと、FSEventを使ってそのフォルダを監視してくれるのだ。上のように入力すると、デスクトップを監視してくれる。

 試しに、デスクトップ上で色々なファイル操作を行ってみよう。たとえば、デスクトップ上のファイルを開き、編集をして保存する。または、デスクトップにファイルを追加する、デスクトップからファイルを削除する、といったものだ。

 すると、ターミナル上に、ファイルシステムイベントが通知された旨が表示されるだろう。

ファイルシステムイベント 変更を加えると、ファイルシステムイベントが通知された

 確かに、何らかのイベントは起きている。でも、何が起きたかかは分からない。これが、FSEventだ。そしてこれは、プラグラムから利用するのも非常に簡単なのだ。次ページでそれをみてみよう。

ZDNET Japan 記事を毎朝メールでまとめ読み(登録無料)

ZDNET Japan クイックポール

所属する組織のデータ活用状況はどの段階にありますか?

NEWSLETTERS

エンタープライズコンピューティングの最前線を配信

ZDNET Japanは、CIOとITマネージャーを対象に、ビジネス課題の解決とITを活用した新たな価値創造を支援します。
ITビジネス全般については、CNET Japanをご覧ください。

このサイトでは、利用状況の把握や広告配信などのために、Cookieなどを使用してアクセスデータを取得・利用しています。 これ以降ページを遷移した場合、Cookieなどの設定や使用に同意したことになります。
Cookieなどの設定や使用の詳細、オプトアウトについては詳細をご覧ください。
[ 閉じる ]