どんなものがほしいのか
Hawkさんからトラックバックもいただいたので、今考えているテンプレートエンジンについてちょっと書いてみようと思う。
JSFをはじめてみたときにこういうのがあるといいなーとは思ったが、サーバサイドにコンポーネントツリーを保持し続けるというのはPHPには向いてなくて残念だなと思っていた。また、bobchinさんがAmrita移植を進められた結果、やっぱりHTMLをパースしてコンポーネント化して使おうとしてもやっぱりレスポンスが・・・という話になったようだ。
じゃ、どうする?ってので、コンポーネントツリーをサーバサイドで保持するんじゃなくて、クライアントサイドに保持させてみたらどうなんだろう?ってのが今の発想です。サーバサイドで一旦HTMLをパースしてコンポーネントツリーをJSON化して、JSON化されたそのコンポーネントツリーをブラウザ側で処理して、ブラウザ側で動的レンダリングさせるってのを考えています。クライアントサイドテンプレートエンジンという感じ。
探してみると似たような事をしているものは既にあって以下の2つをみつけることができました。(他にもあるよ、って方がいれば情報いただければと)
(1)はJavaScriptでJSPやPHPのようなHTML埋め込み型テンプレートエンジンをつくっちゃったよってやつですね(これはこれで動きをみると感動する・・・)。(2)はあらかじめ埋め込んでおいた文字を置き換えるという形のものです。
で、私がほしいなと思うのはこの(1)でも(2)でもなくて、MayaやS2JSFのようなダミー文字列をいれてちゃんとプレビューができるHTMLファイルを使ったクライアントサイドテンプレートエンジンなんですよね。
とはいえ、この二つは参考になると思うので、コードをじっくり読ませていただこうと思います。
クライアントサイドテンプレートエンジン
クライアント側でHTMLの動的レンダリングを行うことができれば、サーバサイドの責務はリクエストをうけてそれに基づいて処理を行い、(どのように表示するかというものを除いた純粋な)処理結果をクライアントに返すというすっきりしたものになる。これはFlashをフロントにしたモデルと同じになり、役割分担とコードの切り分けがものすごくきれいになるんじゃないかなと思っている。
あと、クライアントサイドのコンポーネントツリーのライフサイクルをうまく考えれば、複数ページの入力フォーム(ウィザード形式のような)や、戻る対策みたいなのも今までとは違ったアプローチができるんではないかなと思っています。
ま、JavaScriptの基礎をかじっただけのやつが偉そうなことをいろいろいうのもあれなので、先ほどの2つのテンプレートエンジンの解析を進めたいと思います・・・
※追記 サーバーサイドがまだ完成してなくてもダミーデータを食わせる(もしくはダミーデータを吐き出すテスト用スクリプトと通信させるとか)とレンダリングの状況がいろいろ確認できるみたいなものになれば、デザイナーも重宝するんじゃないかな?とか。