米サンフランシスコで開催中のJavaの開発者向け会議「2003 JavaOne Conference」で,大きなテーマの一つになっているのがJavaによるアプリケーション開発を手軽にすることである。ここで大きな役割を担うのがJavaServer Faces(JSF)だ。JSFの開発責任者で米Sun Microsystems社Senior Staff EngineerのCraig McClanahan氏は,「JSFで最も重要なのは,Webアプリケーションのユーザー・インタフェースを開発するための共通の基盤であること」という。

 JSFは,ボタンやテキスト・ボックスなど,Webアプリケーションのユーザー・インタフェース要素をコンポーネント化するための技術である。すべてのユーザー・インタフェースは,「UIComponent」という一つのインタフェースを実装することにより開発される。作られたコンポーネントは,他のアプリケーションでもそのまま利用できる。イベント・ドリブン型のプログラミング・モデルを採用しているので,Visual Basicなどのクライアント・アプリケーションと同じスタイルで開発できる。

 McClanahan氏は「JSFは間違いなく,今後のWebアプリケーションのユーザー・インタフェース開発における標準技術となる」と断言する。大きなカギを握るのがツールの存在だ。「ツールがJSFをサポートすることで,開発者もJSFを利用しやすくなるだろう」(McClanahan氏)。具体的な動きは既に始まっている。2日目の基調講演で披露された米Sun Microsystems社の新開発ツール「Project Rave」や,米Oracle社が初日の基調講演で公開した開発ツールが出てきつつある。このほか米IBM社や米Borland社も,既にJSFをベースにしたツールの研究開発を始めている。いずれも,Webアプリケーションのユーザー・インタフェースをコンポーネント化し,それをドラッグ・アンド・ドロップでWebページに貼り付けて開発を進める。

 ただここだけを見ると,米Microsoft社がASP .NETで実現している。しかしMcClanahan氏は「ASP .NETは,単にVisual Studio .NETという一つのツールのレベルでコンポーネント化を実現しているだけだ」と指摘する。「JSFの特徴は,APIのレベルでコンポーネントを規定している。このため,特定のツールに依存しない。JSFで作られたコンポーネントは,どのツールでも利用できる」(McClanahan氏)。

 JSFにはもう一つの大きな特徴がある。個々のコンポーネントが外部の描画用クラス(Renderer)に描画の処理を依頼できることだ。同じコンポーネントでも,Rendererを入れ替えることで違う見た目を実現できる。Webアプリケーションの利用者の環境に応じて動的にRendererを交換し,ロジック部分に手を加えることなく表示をさまざまに変えられるのである。

 つまりJSFを使えば,HTML以外で表現されたユーザー・インタフェースも実現できる。HTML以外の表示を生成するRendererを用意すればいいからだ。このため,JSFでリッチ・クライアントを実現できるのではないかと見る向きもある。しかし「今はHTMLなどを使って,ブラウザで実現できるユーザー・インタフェースにフォーカスを当てている。ブラウザは既に多くの人が持っているものだからだ」(McClanahan氏)。将来的には,リッチ・クライアントに対応することもあり得る。ただし,「リッチ・クライアントには,Javaの他の技術の方が適している場面がある」(McClanahan氏)ことから,現在は特に力を入れていないようだ。

 ただし,ブラウザで表現できるものであれば,HTML以外の描画方法を利用することも考えている。2003年6月12日のセッションでは,XMLで動きのあるグラフィックスを記述できるSVG(Scalable Vector Graphics)とJSFの連携が紹介された。SVGのデータを生成するJSFのRendererを用意し,見栄えのよいWebページを作成する技術が発表された。

 JSFは現在,JCP(Java Community Process)によってPublic Reviewの仕様が公開されている段階だ。「今年度中に正式リリースすることを目指している」(McClanahan氏)という。同じくMcClanahan氏が開発を主導するWebアプリケーション用フレームワーク「Struts」との統合も予定されている。その具体的な時期については明言を避けたが,「統合の一つの方法としては,StrutsのタグをJSFのタグで置き換えるやり方があるだろう」(McClanahan氏)。

(八木 玲子=日経バイト)