
誰にとは言いませんが、私からの警告です。
「Web上で日記を書いて、コメントをつけるシステムを作りたい」
えーと、日付ごとに分けてテキストを保存しておけばいいんだな。一日に複数の話題を書くこともあるだろうから、先頭に * がある行は見出しとして扱おう。コメントはシンプルなテキストで、各日付に関連させておけばいいな。
以上。
ふむ、コメントつきの日記システムか。凡人にはコメントと本文は別物のように見えるかもしれないけど、俺に言わせると実は同じものなんだ。だって、どちらも何かの話題に対して何らかの意見を述べているものだろ? 違いは、ある話題のツリーのトップにあるのが本文、そこにぶら下がってるのがコメント。ツリーといえばファイルシステムだ。そう、つまり我々が作ろうとしているものはファイルシステムの一種なんだよ。日記を書けるファイルシステムというものを考えてみよう。各ファイルは、名前、所有者、タイムスタンプ、そして内容を持っている。これでそれぞれ、見出し、投稿者、投稿日時、そして本文(あるいはコメントの内容)を表現できるだろう。そしてここがポイントなんだが、各ファイルはフォルダとしての機能も持っている。ファイルとしての「内容」も持っているけど、フォルダとしての「子要素」も持っているんだ。こうすると、「8月3日の日記」というファイル(フォルダ)の子要素としてコメントのファイルをぶら下げることができるだろう? そして、コメントにコメントをつけることもできる。 そして、驚くことに、日記帳全体も一つのファイルなんだ。たとえば、「gyuqueの日記」というファイルを作って、gyuqueしか書き込めないようなパーミッションを設定しておくとするだろ、で、そこにgyuqueが「○月○日の日記」というファイルを毎日追加するんだ。ほら、「gyuque専用の日記帳」が実現できただろ? ここまで汎用的なシステムができてしまうと、日記だけに使うのはもったいないよなあ、日記というのは我々のファイルシステムに対するあくまで一つの「ビュー」である、というのはどうだろう。たとえば、利用者の気分によって「日記ビュー」と「アルバムビュー」を切り替えられるようにしよう。すると、きれいな画像を集めてコメントしているような日記をFlickrのようなインターフェイスで見ることができるんだ。書いてる人は日記のつもりなのに、見ている人にとってはFlickrなんだ。とってもCoolだろ! あと……

プログラムを抽象化するのは大いに結構だが、サービスまで抽象化してはいけない。
参考: アーキテクチャ宇宙飛行士