2005/07/06

beatsync.netのつくりかた

書いてみたけどちっとも面白くない話。

beatsync.netという形で運営をはじめた2004年11月末からHTMLが全部動的吐き出しになったわけですが、じゃあそれはどうやって吐き出してるのよって話について延々と語ろうと思ったけど長くなりそうなので軽く。

  1. サイトの大枠のテンプレートを読み出す
  2. テンプレートに対して表示するページの破片を埋め込む
  3. 出来上がったHTMLをざっと見渡して適当にリンクとかナビゲーションとか作る

こんな感じになってます。簡単ですね。

まず最初のテンプレですが、いまのとこbeatsync.net全体/acidlemon以下/bayside以下の3つ+RSS用があります。各テンプレでCSSを決めてるので/acidlemonと/bayside以下だけは固有サイトのCSSになっとるわけですね。

で、そのテンプレの中にある<?webout なんたら?>とかいうXMLで言うところの処理命令(XML的な意味がない、特定の実装に対して処理命令を送るためのもの)があるので、こいつをwebout.cgiで処理するわけです。include="/catnavi.dat" とかがそうですね。ここでのdatのパスは/dat以下のパスとして読まれるので、例えばトップページのカテゴリナビは/dat/catnavi.datにあるわけです。この.datファイルはXML Fragment(つまり部分的にwell-formed)になってるわけですね。

またファイルの展開とともに、mainplayのところでQueryStringで指定されたパスを持って来て、そのdatも展開します。たとえばこの記事のやつであれば、http://beatsync.net/bayside/memo/log20050706.htmlなので/dat/bayside/memo/log20050706.datにこのdatファイルがあるわけですね。テンプレは固定なので、毎回更新時に書いてるのはここの部分だけです。ホントに内容だけ書いてアップロードすればいいだけなのでらくちんぽんです。

この1回目の処理で全部のdatが展開されてXHTMLとしてできあがりになっているので、これをもう1回処理してリンクとかを埋め込みます。<webout process="なんたら"?>がそれになってます。そこでページ内のIDが振られた見出しを拾ってきてQuickLinkをつくったり、1回目の処理で開いたファイルの中で一番新しかったファイルの時間をしらべてLast-Modifiedの時間としたりするのがこの処理です。

このような2パスの処理を経て出来上がったXHTMLを、そのままHTTPヘッダとともに標準出力へ吐き出してできあがりです。こっちとしてはテンプレさえまぁちゃんと作ればあとは全部CGIが面倒みてくれるので楽なもんですね。そこblosxomみたいだなぁとか言わない

ちなみにblosxomとの違いはblosxomのテンプレはheadとfootがバラバラになってるけど、こっちのテンプレはそうじゃないってことでしょうか。テンプレ自体をXMLパーサに通すとちゃんとwell-formedになってるかチェックできるので、テンプレがwell-formedなら出力XHTMLがwell-formedでは無いときに原因がdatのどれかにあるんだな、とかいうのが簡単に切り分けできるんですねー。

まぁ激しく自己満足ですが、別にいいんです、自分がそれで便利なので。

うされもん @acidlemonについて

|'-')/ acidlemonです。鎌倉市在住で、鎌倉で働く普通のITエンジニアです。

30年弱住んだ北海道を離れ、鎌倉でまったりぽわぽわしています。

外部サイト情報

  • twitter
  • github
  • facebook
  • instagram
  • work on kayac