最近勉強がてらMODxというCMSをいじったりして遊んでいる。
CMSとはContent Management Systemの略で、ウェブ用のコンテンツを管理するシステムの総称。例えばウェブログは「日記的なコンテンツ」を管理することに特化したCMSだと言うことができる。
要するに、「デザインやら検索やらの機能はシステムに任せて、僕はコンテンツを作りますよ」といった場合に便利なウェブ用のシステムだ。
MODxは今年(2005年)の3月頃にEtomiteというプロジェクトから派生した(forkという)ばかり。
ライセンスはGPLで、RDBにMySQLを使っているのはイマドキのCMSらしい。
PHPで書かれていて非常に汎用的な作りになっているのが特徴。
元々Etomiteも同じようなCMSを目指して開発されていたのだけれど、今年に入ってコアの開発メンバーが抜けてしまう事件が発生して開発が滞ってしまい、そこで生まれたのがMODxというわけ。
**
Etomite自体とてもパワフルで面白いCMSなので、Etomite/MODxでドキュメントが生成されるからくりをまとめてみよう。
Etomite/MODxではひとつのページを「ドキュメント」という単位で扱っていて、それぞれのドキュメントはひとつのテンプレートをベースに生成される(左図参照)。
テンプレートやドキュメントではChunkとSnippetという自由定義のパーツを呼び出すことができる。
Chunkは静的な文章を保持するのためのHTMLコードで、例えば住所を"MyHomeAddress"のように定義することで何回も同じ事を書かなくて済む。
Snippetは動的な構造を実現するためのPHPコードで、例えば現在いるページからのナビゲーションを"SiteNavigation"のように登録しておき、テンプレートから呼び出すことでそのテンプレートを利用するドキュメントからのナビゲーションが動的に生成される。
Chunk/Snippet/Templateでは、共通のAPI(及び変数名)を利用することで参照されているドキュメントの詳細情報を取得することができる。
さらに、MDOxにはEtomiteにはない拡張がされていて、その中で僕が注目しているのが"Template Variable"という機能。
詳細は本家のドキュメントにあるWhat are Template Variables?でも読んでいただくとして、これを使うと全てのドキュメントに対して任意のデータ形式&任意のプレゼンテーション(見せ方)を用意することができる。
例えばAmazonに並んでいる商品はある規定のフォーマットによって並んでいる(商品名、画像、発売元、などなど)わけだけど、この商品名や画像などがデータベースに保存されるフォーマットを自分で定義することができて、かつそれが表示される仕組みも自由に定義することができたらどうだろう?
Template VariableはCMSの活用方法を無限に広げることができるとても魅力的な機能だ。
**
閑話休題。
大学にいた頃はZopeというCMSが気に入っていてよく遊んでいた。
これはLinuxやWindowsの上でサービスとして動作するウェブアプリケーションサーバーで、いくつか斬新な機構を持っている。
まず"acquisition"というのがそれで、Zope内ではディレクトリ階層(ZopeではCMSに特化した独自のファイルシステムを使っている!!)の上にあるものが全て下位の階層で利用できる、という特徴がある。
つまり、汎用的なヘッダー/フッター/エラーページなどを上位階層に置いておくだけで下位階層から読み出しが可能だったりして、当時は「おぉ!こんなに簡単にウェブアプリが作れる!」と感心した記憶がある。
大学の卒論でも取り上げたし、その延長線上で今は映画レビューサイトに応用したりしている。
ただ、この映画レビューサイトを実現しているからくり(Zopeでは"Product"と呼ぶ)は汎用的なデータベースをウェブから使えることを意識して作っていたものだったので、現実的には作りこむ作業を放棄した残骸であったりする・・・。
**
で、実はMDOxで実現しているTemplate Variableという仕組みこそ僕が自分で実現しようと思っていた、データ形式とプレゼンテーション方式を抽象的に定義したデータ単位をウェブ用に特化したもので、このコンセプトを理解した時の個人的な感動を他の人に伝えるのはとても難しいものがある・・・。
MODx自体まだバージョン0.90と発展途上で取っつきにくいところもあるのだけれど、これから将来がとても楽しみなソフトウェアだ。
管理ページを日本語化する言語ファイルは本家フォーラムで配布されているので、その辺が心配な人でも多分大丈夫だろう。