2010年5月26日水曜日

img0chの設計

最初の投稿は最初期のimg0chの設計について。

img0chは投稿時に画像を添付することが出来る2ch互換掲示板スクリプトであるが、元々は同じく2ch互換掲示板スクリプトである0chにファイルの添付機能がついただけのスクリプトだった。最初のリリースは2003年秋である。

最初期の設計


当時の設計は以下のようになっていた。

  • [掲示板名]/img/[スレッドキー]/[レス番号].[拡張子] のリンクが本文の最初に入る

  • 上記が他のリンクによって騙られることを防ぐためリンクロジックに手を加えた


そのリンクロジックとは、レスの本文の最初の一行に「掲示板のサーバ名が一致し、かつ現在のスレッドキーが一致し、かつ現在のレス番号が一致する」というものだった。まだ0chを改造して間もない頃だったため、ファイルを保存しなくて済む簡単なロジックにした。

今ならこういう形式ではなく、UUID などを使ってユニーク性を高められるが(それによってダウンローダーにとっても都合は良いと思われるがそれを使われることに管理人が望ましく思わないだろう)、当時はこの方法しか思いつかなかった。現在のバージョンも互換性のため、この形式を踏襲している。リンクをdatに直接書き込むため、移行コストが極めて高いことから別の形式に移行することは出来ないし、今後もない。

はてなダイアリーを参考にした拡張機能


当時ブログが流行期であり、今は削除したがはてなに日記を作成していた。この時はてなダイアリーのメタタグを元にした拡張があり、これをimg0chの拡張機能として取り入れた。例えば

<meta name="module" content="trackback">

をmeta.txtに挿入するとトラックバック機能を使えるように処理が入る。また、セミコロンを使って引数を渡すことが出来るように設計を行った。例えば

<meta name="module" content="rss;10">

とすると最新10件の投稿がRSSとして生成するように処理が入る。ただ、これらは本体に直接取り込まれているため、第三者が拡張を入れるには本体を改造しないといけなかった。そこで、2.1以降では第三者が拡張出来るように拡張機能を分離して第三者が本体を改造せずとも機能を追加出来るように設計を行い、プラグイン機能として現在に至っている。過去の拡張機能の大半は互換性のため2.1以降でも使うことが出来る。

まとめ


添付されたあとに作成されるリンク構成は他のリンクに騙られないように現在のスレッドキーとレス番号を元にチェックする機構を持っており、それが現在でも互換性のためにそのままになっている。また、拡張機能ははてなダイアリーのメタタグを元にして作られたが、第三者による拡張が難しいので2.1以降にプラグイン機能として分離した。

0 件のコメント:

コメントを投稿