2003-12-02

アンテナウェア

一般的ではなさそうだけれど, はてなアンテナのような "アンテナ" を, 以下ではアンテナウェアと呼ぶことにした.

由緒あるアンテナウェアである 朝比奈アンテナ の history.txt を見ると, 初版は 1996 年となっている. アンテナウェアの歴史は古い. 私がはじめて知ったウェブのアンテナウェアは, SF系日記更新時刻 だ. SF マニアになりたかった頃のこと. 登録されているサイトの量も, 個々のページのテキストも多く, とても読み切れない. SF 読みというのはなんて活字耐性の高い連中だろうかと思った. しかしやがて自分がウェブ中毒になってみると, アンテナウェアの便利さが身に染みてくる.

HTTP

古典的なアンテナを作る上で主に難しい/面倒なのは HTTP の実装だ. コンテンツを取得するのではなく, 更新時間を取得しなければならないのが難しさの中心になる. 多くの場合, 更新時刻は付加情報にすぎない. だからいいかげんな HTTP サーバはそのへんの作りが手抜きだし, 大抵の CGI は更新時刻の通知や解釈なんて面倒なことはしてくれない. 広告を多く見せたいために, 更新されたと嘘をつくこともある. 更新時刻の扱いが適当なのは web ブラウザも同じだ. caching に積極的な実装が通知された更新時刻を厳密に扱ってくれるとは限らない.

web らしさの一部であるこの適当さは, アンテナウェアのような 正しい更新時刻を知りたいアプリケーションにとってみれば障害だ. 仕方がないので, アンテナウェアの実装者は通知された更新時刻だけでなく, 実際にコンテンツの内容を比較したり, ページ内に(コンテンツ製作者によって)埋めこまれたヒントを頼りに更新時刻を推測したりと手を尽くすことになる. ここでの泥臭いがんばりが, 古典的アンテナウェアの性能差になる.

もう一つのがんばりどころは設定項目の細かさで, たとえば日付によって対象 URI がかわるページを正しくハンドルする仕組みや, 出力する HTML の柔軟性といった点も個性になっていた.

差分取得

はてなアンテナのように更新状況の差分を表示するシステムでは, 上記の問題に加えて差分取得の難しさがある. 差分取得は, やってみると案外難しい. 特に面倒なのが文字コードの扱いだ. 差分計算(diff) は対象が文字であることを前提としている. また, 最終的には差分を HTML として表示したい. だから文字コードを正規化する必要がある. ところが文字コードの変換や自動判定はかなり複雑な上に決定打の無い話題で, 相当に面倒だ. 最近は UTF-8 でエンコードされたページもあり, 単純に nkf を使うわけにもいかない. 試行錯誤の世界. ただし文字コードの判定は, 利用者が文字コードを指定することで避けるという手もある.

文字符号を正規化したら, こんどは diff を実装しなければいけない. 既存の diff 実装は必ずしも再利用しやすい作りではないため, それを使えるかどうかは, システムのアーキテクチャに依存する.

サービス化

アンテナウェアは定期的に登録サイトを巡回しなければいけない. だから単純な CGI では実現できず, 敷居が高かった. 掲示板ほど流行らなかったのにはこういうわけがある. はてなアンテナのようにサービス化されたことで, 自由に使える固定 IP アドレス無しにアンテナを利用できるようになった.

ただし, アンテナウェアのサービスはかなりコストが高いはずだ. ウェブのシステムを作るのはそれだけでも面倒なのに, 加えてスケーラビリティの制約が厳しい. 1 利用者あたりが必要とする資源の量が他のサービス(例えばオンラインショップ)よりずっと多いように見える. そのうえ, アンテナだけで収益をあげるのは難しい. (そこをサービス化に踏みきったはてなは勇敢だと思う.)

RSS

RSS はアンテナウェアをつくる意欲を削ぐ. RSS 配信は machine readable な更新情報を push することに目的がある. そんなサービス満点の世界が目の前にある. 世間のウェブサイトが RSS を提供するようになったら, アンテナウェアの面倒な部分はあらかた徒労になるわけで, そこに投資するには根性がいる.

アンテナウェアがサーバ側に更新集約を集約しているのに対して, (元々 Portlet というサーバサイドの技術であるところの) RSS ビューアは多くが PC 用のクライアントとして実装されている. この違いは面白い. アンテナウェアの PC クライアント版は WWWC が有名だけれど,類似のソフトウェアは少ないように思う. C や C++ といった言語で, 上で述べたようなあれこれを実装するのはたしかに手間だ. スクリプトで書いたって面倒なのに. RSS ではこういう手間がない分, PC 用クライアントを作る余裕が生まれたのかもしれない. 文化の違いもあると思うけれど, そんな議論はどこかで繰り返されていそう. 省略. (そういえば, RSS を提供しないウェブサイトの RSS を勝手に作ってしまう rss-jp.net というサイトがある. RSS とンアテナの中間にある発想. 安直な議論は避けたいと思う一方で, こういうのを見ると文化の違いについてのステレオタイプな偏見が頭に浮かんでしまう.)

とりとめもなく

アンテナウェアの現状を, 私にわかる範囲でまとめてみた. (続く.)

付録

参考 URL をまとめておこう. まずアンテナの古典 ("HTTP 世代") をいくつか.

サービス...をしているのは, はてなと ysano のところ以外にあるのかしら. arai さんが昔やっていたやつはどうなったんだろう.

PC 用 RSS 収集クライアントは大量にある.

RNA というシステムはちょっと面白い. 古典アンテナに今風のアーキテクチャを適用した印象. 基本は web-based RSS feeder で, RSS のないサイトははてなアンテナの出力を間借りするらしい. はてなアンテナを利用することで, 上で議論したような面倒なあれこれを回避している. これをせこいと見るかハックと見るかは意見がわかれるだろうが, 私個人は評価したい. こういうセコカシコハックはアンテナウェアの原点だと思う.