mod_diary - URLマッピングとデータ構造


mod_diaryの単純なデータ構造を紹介します。

mod_diaryを利用するには、apacheの設定ファイルhttpd.confに最低限以下の設定を追加します

LoadModule diary_module modules/mod_diary.so
<Location /diary>
  SetHandler diary
  DiaryURI http://www.example.com/diray/
  DiaryData /path/to/diary
</Location>

この*DiaryData*以下に、記事データを配置します。

記事は1エントリにつき1ファイルが対応し、Markdown形式で記述します。記事ファイルはgitなどのSCMで管理することを前提としているので、ローカルでもどこでも良いのでお気に入りのテキストエディタで書いてscpやrsyncでuploadしてくれ、という方針です。(サーバー上のファイルを直接編集する機能は気が向いたら実装するかもしれません)

例えば、 /path/to/diary/ 以下に 2012-01-01.md というファイルを配置すれば、

http://www.example.com/diary/2012-01-01 がエントリのURLとなります。

一日に複数のエントリを書く人は、2012-01-01-1.md というファイルを配置すればよいし、URLに記事タイトルを入れたい場合、2012-01-01-hello_world.md というファイルを配置すれば、

http://www.example.com/diary/2012-01-01-hello_world

というURLで参照できます。 ちなみに、URLに.mdをつければ生のMarkdownファイルを表示できます。 たとえばこのエントリは

http://www.cuspy.org/diary/2012-01-05.md

という様に表示されます。

エントリに紐づいたファイルや画像を添付したいこともあるでしょう、その場合 /path/to/diary/2012-01-01/ といったディレクトリを作成し、画像やファイルを配置して記事ファイルから参照すればapacheのdefault handlerが直接serveします。

ディレクトリを分ける必要は無いのですが、自分で自分の記事をgrepする際の効率を考慮しています。

右端のサイドバーにある「Recent Entry」をどうするかという問題があります。 これはDiaryData以下に配置したindex.hdfというファイルを参照しています。

index {
  1 {
    uri = 2012-01-03
    title = ブログシステムをつくった
  }
  2 {
    uri = 2012-01-01
    title = Hello world!
  }
}

これは、ClearSilverのHDFと呼ばれるデータフォーマットで詳細な仕様はこちらにあります。

このファイルは別にjsonなどのフォーマットでも良かったのですが、既にテンプレートシステムとしてClearSilverを利用している、という状況があるのでHDFにしました。

このHDFファイルを自動生成するコマンドがあれば良いのですが、今の所無いので手で書くしかありません。

追記:

自動生成するコマンドdiary-mkindexをつくりました。 -u オプションでブログのBaseURIを指定しないとうまく動かないかもです。