Google Code で macfuse がリリースされたのをきっかけに、FUSEをみんながおもちゃにするに違いないと思ったのにだれもおもちゃにしていないみたいで、くやしかったので自分でおもちゃにしてみました。
FUSEの利点は、ファイルシステムという今まで数十年間使われてきた標準的なインターフェイスに任意のサービスをマッピングできるということにあります。数十年間、ファイルシステム上でファイルを扱うために様々なツールが開発されてきました。ファイルシステムにサービスをマッピングできるということは、数十年間蓄積されてきたファイルを扱うためのツールをそのままサービスを扱うためのツールとして利用できるということです。
例として WikipediaFS, view and edit Wikipedia articles as if they were real files を見てみましょう。このwikipediafsを使うとwikipediaの任意の項目をファイルとしてマウントすることができます。ファイルとしてマウントすることができれば、ブラウザの中で動く絶望的に使いにくいへんなエディタ(しかもサービスによってUIがまちまち!)ではなく、いつも使っているvimやemacsのようなエディタでいつもつかっている変なショートカットを使って編集することができます。さらにはcpでどこかに書いたことをそのまま持ってくることもできますし、消したくなったらrmで消せて、subversionなんかに入れておけば履歴のdiffをとることもできます!
というわけで、ソーシャルブックマークサービスにポストしたブックマークひとつひとつをファイルに見立ててFUSEでマウントして、ふつうにファイルとしてコピーするとサービス間でブックマークがコピーされるというのを作って試してみました。そのために はてなブックマーク - ソーシャルブックマーク をマウントするperlのモジュール BookmarkFS::Hatena.pm と POOKMARK Airlines - ソーシャルブックマークサービス をマウントする BookmarkFS::Pookmark.pm を書きました。
macfuseではFUSEのperlバインディングであるFuse.pmがうまく動かないようだったので、無用なトラブルを避けるべくWindows用の Virtual PC 2004 SP1 に Fedora Core 6 をインストールして Virual PC 上のFedoraでFUSEを使っています。
perl hatenafs.pl /home/kuma/hatenafs ku0522 [password]
というコマンドを実行するとku0522のブックマークが /home/kuma/hatenafs にマウントされるようにしました。マウントするとこうなります。
.urlファイルとして見ることができるようにしてあります。ほんとうはページタイトルをファイル名にしたかったのですが、FUSE側で日本語をうまく扱えないかんじなので今回はパスしました。いちばん上の RadiumSoftware-Identicon.url の中身をテキストエディタで開いて中を見てみましょう。
次にブックマークのコピー先の
perl pookmarkfs.pl /home/kuma/pookmarkfs ku0522a [password]
で POOKMARK Airlines をマウントします。いつも使っているアカウントにコピーすると上書きされちゃうので新しくアカウントを作りました。なので中身はまだ空の状態です。
.urlファイルのコピー.urlファイルをNautilusでふつうにドラッグアンドドロップしてコピーします。
すると裏側ではFUSEを経由して BookmarkFS::Pookmark.pm が呼び出されます。Pookmark.pmモジュールは、書き込まれた.urlファイルの中身をパースして、その内容をもとにHTTPリクエストを組み立て POOKMARK Airlines に送ります。結果としてpookmarkfsディレクトリと、POOKMARK Airlines にブックマークがコピーされます。
この方法のいいところは
.urlファイルをほかのディレクトリにコピーすることで容易にバックアップが可能.urlファイルはsafariとIEで開けるものの、ソーシャルブックマークサービスでふつうに使われるタグやコメント、公開非公開などの情報を表現することができません。今回はdel.icio.usのAPIのパラメータ名にあわせてタグやコメントを勝手にプロパティとして記述しています。FUSEでファイルシステムとして扱えることの利点は、レスポンスがXMLとして帰ってくるということと、普及しているということとで、atomAPIをラップしてファイルとしてみせるatomfsなんかだとかなり発揮されるのかもと思います。
なんだかんだいってもバイナリ、なんだかんだいってもローカルのファイルシステムなのです。
トラックバック元エントリにこのエントリへのリンクがない場合はトラックバックを受け付けません。
http://labs.gmo.jp/mt/mt-tb.cgi/92
comments
Fuse.pm ですが、コンパイルオプションの設定でなんとかなるようで、Developer Release の 0.09_1 だと、インストールできて example.pl は動きました。どれくらいちゃんと動くのか、確認していませんが、ご参考まで。
ありがとうございます!次回はOSXで試してみます。ほんとうは見慣れたGUIのもので実現したかったのでFinderで表示できるとうれしいです。