-Nirvana(3)-Nirvanaと私的イメージの相違点

目の付け所がシャープなNirvanaですが、私の昨日の思いつき(妄想?)で見たイメージと違うところを説明します。まずNirvanaJSFの実装と関係が深い点に違和感があります。用意されたHandlerはすべてJSFタグおよびその関連にマッチングしていくものです。でもね、JSTLはHandlerが用意されるまで使えないんです。他の既存JSPタグライブラリも同様です。これはもったいないことです。JSPタグライブラリ(含むJSFタグライブラリ&JSTL)は膨大にありますしすでに世に出て長いものもあり、品質の高いものになってます。これらをすべてPlane Old HTML Page(以下POHP)中で使えるようにすることを考えています。Nirvanaでも非Handler対応JSPタグを使えないかというと、使えます。metaタグの記法でtaglibをインポートする機能がありますので、あとはJSPタグを書けば、非Handler対応タグはストリームにそのまま書き出す仕組みなので結果JSPJSTLなども使える。が、POHPじゃなくなります(もしかするとうまい仕組みがあるかもしれない。その場合はご容赦!)。
次に、POHPと設定XMLのどちらにバインディング情報が書けるという将来機能を大前提にしたいと思います。デザイナーとプログラマーの分業の追及から、弊社ではTapestryを推して使ってますが、TapestryのHTMLテンプレート化能力をフルに発揮すると、まさにPOHPに「jwcid="abcd"」というような見慣れないが単純な属性が残るだけになります。やっぱりここまでPOHP化すれば、デザイナーは黙ってうまいことやります。間違って削られてしまっても、ダメージ少ないです。ここでTapestryのHTMLテンプレート化能力のGOOD/BATを述べると、

  • GOOD: 唯一jwcidに識別を残すのみまでPOHP化できる。この場合、バインディング情報は設定XMLに記述する。
  • GOOD: HTMLにバインディング情報をすべて埋め込むこともできる。
  • SuperGOOD: 設定XMLに記述するのとHTMLに記述するのを混在で利用できる。
  • BAD: すべてのバインディング情報をHTMLに埋め込んで、設定XMLは空っぽでも、設定XMLの存在が必須。

ということで、このBADだけをなんとかしたいなと思います。
そして、最大のイメージ相違は、この機能、JSFと関係なくて良いのです。JSFに特化することなくもっと大きな仕組みだと思うのですよ。POHPを書いて、ちょっと簡便なバインディング情報を記述すれば動くWEBフロント開発パラダイムなんですね。JSFに囚われず、ただプレゼンテーションコンポーネントとしてJSFタグライブラリも含まれる、JSPタグライブラリフレームワークを利用できるってことでいいじゃないですか。ということで、NirvanaのディストロにJSF実装(MyFaces)が含まれている点で、守備範囲をひろげすぎだと考えます。
繰り返しますが、アイディアは秀逸でコロンブスの卵もかくやというのに、アイディアを深堀りしないでもったいないと思うのです。気に障ったらごめんなさい。でも、Tapestryの凄い成果を実現できません。以下の例がそうです。

<table>
  <tr jwcid="@Foreach" element="tr" source="ognl:list" value="ognl:current">
    <td><span jwcid="@Insert" value="ognl:current.name"</span></td>
  </tr>
  <tr jwcid="@Conditional" element="tr" condition="ognl:isEmpty">
    <td>No Item</td>
  </tr>
</table>

タグ名を頼りにコンポーネントを割り当てる仕組みでは、上記はできないのです。同じtrタグにForeachとConditionをバインディングするのですから。
そして、事の軽重をはかるに、POHPにこだわるのはやめたほうがいいかもしれません。POXP?Plane Old XHTML Pageにこだわりたい。NekoHTMLの実装をいじってもおられるみたいですが、やはりHTMLというのは宿命的に不安定です。ノードの関係性がワンパスでパースできないHTMLをベースに置くとどうしても予測しえない、もしくは見つけにくいエラーの発生原因となります。だから、XHTML。これならJ2SDKに付属のJAXPだけでなんとかできるし、Kijimunaのようなツールサポートも容易になります。また、既存のDreamwaverやGoLiveなどのデザイン系HTMLツールでもXHTMLをサポートしていないものは無いでしょうし、HTMLからXHTMLへの変換およびバリデーション機能などもあります(少なくともGoLiveにはある)。ということで、私の昨夜のイメージを次にまとめます。