Diff 色々 - by makotoi

私達が作成中のコメントマネジメントシステムの重要な機能として「自分がしたコメントに対する返事がきたら通知してほしい」というものがあります。

ブログによってはコメントも含めてRSSフィードを吐いていたり、メールで通知してくれたりするサイトもありますが、そういうのは少数派です。そこでそれを一括して管理できるようなものを作ろうと思っています。

やり方を考えた際に最初に参考にしたのはRSSリーダー。各社から色々なものが出てますが、自作した人いないかなといろいろ探してみました。

いや〜本当にいるもんですね。世の中にあるウェブサービスって大概のものはどこかのだれかが作ってソース公開してます。やはり巷にあるサービスを「俺も作ったんだ」と世の中に示すのは充実感があるってもんでしょうか?

で、そのソースを飛ばし飛ばし読んだいたのですが、あまり「更新した箇所のみ通知」という機能は拝借できそうにないのがわかってきました。なぜならRSSリーダーが読み込むXMLってちゃんと全ての更新項目に更新日時が書いているので、リーダーの方で単純に日時を元にした差分のみ表示すればことたりるからです。でも一般のHTMLには「ここを更新したよ」なんて書いてありませんからね。

そこで次に目をつけたのは「アンテナ」機能。はてなアンテナとかありますが、やはりフリー版がいろいろありました。

Ruby版だと五月雨があるようです。

これらはソースは見てないのですが、機能とかをいろいろ探すとやはり使えなさそう。
あくまでダイナミックなサイトの差分をチェックすることで更新時刻を割り出していますが、差分自体を表示はしてないようです。

つぎに考え出したのが「UnixのDiff機能に似たようなものだれか作ってるはず」。

やはりいました。

これって本当にUNIXのDiffと同じでAとBのファイルの異なっているところを

diff A B<< only A contents
>> only B contents

見たいな感じで出力してくれます。

そこで

diff old_html new_html<< old_html contents
>> new_html contenst

見たいな感じでつかって<< old_html contents の部分だけコメントアウトすれば使えそうです。

でも他人のソースコードを中身わかんないままコピー&ペーストするとAbdelに怒られそう。もうちょっとスマートな方法でプラグインとかライブラリー形式で使うことができればよいのですが。

で最後にたどり着いたのがWikiです。 でもWikiと一口にいってもいろいろな実装方法があるみたいですね。

面白いと思ったのがpylori*style wikiさんが自作Wikiチュートリアルに活用されているHiki

ここって更新差分表示にVCSや、以前に紹介したSuvbersionといったバージョン管理ソフトを利用しているようです。

そして最後にたどりついたのはRubyOnRailsのエンジンです。ここではログインエンジン、ユーザーエンジンとともにWikiエンジンというのもあるみたいです。なんでもDHHはInstiki というWikiRubyで作っていたようです。たぶんInstikiのコードを元にWikiエンジンをつくったと思われます。 今からインストールしてみますね。