CSS Nite LP, Disk 6「CMSリベンジ編」
このイベントに参加する"CMS Designer"はテンプレートにXSLTを使っているというので、少し興味があります。
XSLTは、埋め込み式のテンプレートよりも柔軟な発想でデザインできて面白いのですが、PHPでテンプレート実装する場合に比べて重箱の隅をつつくのが難しいかなという印象があります。そういったニーズまで細かく対応しているのかどうか、その辺が気になります。
テンプレートの限界について
前エントリクラウドとHTML5にPHPが沈むとき - noopな日々では、テンプレート脳ではHTML5に限らず、Semantic Webの力を最大限に生かすことができないという話を書きましたが、その趣旨は
- テンプレートをシンプルに保ちながら複雑な出力を行うにはテンプレートの量産が必要
(→変更コストが高くなる)
- 量産しないためには、細かい対応をするためにテンプレート言語に複雑なロジック実装が必要
(→テンプレートの可読性が落ちる)
- 静的に埋め込まれたタグを変更することができない
(→意味付けをコンテンツと連動させるにはテンプレートとコンテンツの対応が必要→再利用性が落ちる)
というネックがあるためだと仮定したものでした。
たとえば、再帰的なリスト構造を正確に出力するためのテンプレートをシンプルに記述したり、ユーザー側の都合で追加変更されたデータモデルにテンプレートがついていくコストが、テンプレート化するメリットを上回ってしまいます。
前エントリでは、そういうニーズに対して、デコレーションであればその辺は簡単に解決できるよとだけ言って実例を出していないんですが、それはまた後日、詳しく書きたいです。
RecursiveIteratorIteratorを使った再帰出力やZend_Formについてはデコレーション実装の一例です。
XSLTがテンプレートと違うところ
XSLTもテンプレートに似たところがあると思うのですが、いわゆるPHP製のCMSなどで使われているテンプレートと根本的に違うところは、ベースになるXMLは高度に意味付けされた状態を保持しており、それらに対するプレゼンテーションをXMLデータモデルと分離して記述できるところだと思います。
RDBMSのフィールド拡張で実装してあるよりもXMLDBで保存してある形式の方が各種融通が利くことはXMLを普及させている人が書いているドキュメントを見るとわかりやすいと思います。そういう柔軟なデータモデルに対してもXSLTでプレゼンテーションを分離してあると変更に強いプレゼンテーションを実装できます。
システム側はデータモデルを出力することに集中できるので極めて簡素化することができ、プレゼンテーション側はXSLTの作成をサポートする管理機能があればよいので、保守性その他、メリットがあるものと思います。
XSLTが主流にならなかった理由
XHTMLがHTML4にとって変わった時、XML+XSLTもかなり注目されたと思うのですが、XSLT実装はそれほど普及しなかったと思います。
今でもXSLTを学習済みでノウハウを引き出しにしまったままのデザイナーさんが結構いると思います。よく、XSLTは学習コストが高いから普及しないという話が出ることがあると思うのですが、学習コスト自体は自動化するツールで解決できるので本質的な障壁ではないと思います。むしろ、アプリケーション開発の現場ではXSLTによるアプローチでは対応できないぐらいの細かい変更やニーズが多かったからではないかと思えます。つまり
という技術的な限界があるためだと思われます。
実はこれらの問題の根源にあるのは、システム開発者がプレゼンテーションロジックを軽視しているためではないかと個人的には思っています。
"CMS Designer"はXSLT技術をどのように生かしているのか
個人的には、XSLT技術はとても優れたものだが、それをどのように生かして、誰を対象としたCMSが作られたのかというところにとても興味があります。
後日に書かれるであろうレポートに注目してみたいと思います。
デザイナーのために作られたCMS? だまされちゃだめですよ。デザイナーさん
さて、他にラインナップされているCMSをみているとデザイナーのために作られたCMSという売り込みをしているケースが多いように思いますが、プログラマー視点からはCMSを使うケースはまれで(作る側なので)、どちらかというとプログラマーリソースを使わずにWebプロダクトをリリースしたいというニーズに対応するものだと思われます。
それらに共通しているように感じるのが、HTMLソースとほぼ同じ形式でテンプレートが書けるという売り文句です。
たとえば、HTMLソースにコメントタグを追加することで、リピートを実装したり、コメントで括った部分を内部パーツとして再利用したりとか。
それが、デザイナーのため?ということなのだろうか。
それって結局、肝心なデザインワークの助けにはなってないよね。だから、Adobeが高飛車なんだって(おっと蛇足)。
ところで、CMSユーザーのみなさん。CMSもいいんですが、美しいテンプレートが書きたかったら、PHPTALは一度見ておいてくださいませ。