【ハウツー】

Tapestryで学ぶコンポーネント指向Webアプリケーションフレームワーク

    後藤大地  [2006/08/03]

    EJB 3.0時代のエンタープライズシステムプレゼンテーション層には、JSFやFaceletといった技術が採用されていくとみられている。JSFやFaceletにみられるコンポーネント指向という考え方は、Tapestryにおいて既に実現されていた。Tapestryは難しそうという印象があり、敬遠されることも多いが、優れた考え方を実現したWebアプリケーションフレームワークであり、同分野に関わるデベロッパであれば少なくとも一度は扱っておきたい。Tapestryを実際に使ってみる方法を紹介するので、まだ使ったことがないデベロッパはぜひ取り組んでみてほしい。

    Jakarta Tapestry

    The Apache Jakarta Project, the Tapestry Projectは7月29日(オランダ時間)、Tapestryの最新版となるTapestry 4.1を公開した。Tapestryはプレゼンテーション層に位置するWebアプリケーションフレームワーク。コンポーネント指向のフレームワークで、要素に対してクラスを作成するという特徴がある。

    同プロジェクトは1月7日(米国時間)、Tapestry 4.0を公開。4.0ではアノテーションが採用され、また簡素化された新しいDTDが採用されるなど、それまでのバージョンと比べて簡単に扱えるように改善が実施されている。4.1ではDojoとの関連が強化され、AJAXなどの動的ページとの連携が強化されてる。

    Tapestryの基本的な考え方であるコンポーネント指向は、JSFやFaceletを学ぶうえでも基本となるものだ。Tapestryでコンポーネント指向のWebアプリケーションフレームワークになれておくといいだろう。

    Hello Tapestry!

    Tapestryを理解するには、実際にデモンストレーションを実行し、その構成を見ていく方法がいい。ここではTapestry 4.1を使ったデモンストレーションを取り上げながら勘所を示していく。学習する際の参考にされたい。

    まずTapestryを動作させるWebアプリケーションサーバを用意する。Tomcat 5.x系かJBoss AS 4.x系を用意すればいいだろう。サンプルをビルドする必要があるためApache Antも用意しておく。次にTapestryの配布物と、サンプルプログラムをダウンロードする。サンプルはTapestry Examplesからtapestry-examples-version.tar.gzといったファイルをダウンロードすればいい。

    サンプルを展開したら、tapestry-libraries/lib/web/にある次のファイルを削除する。

    • tapestry-4.0.jar
    • tapestry-annotations-4.0.jar
    • tapestry-contrib-4.0.jar
    • tapestry-portlet-4.0.jar

    そしてTapestry 4.1の配布物から次のファイルをtapestry-libraries/lib/web/にコピーしておく。これはまだサンプルが4.1に対応していないため自分でコピーして最新版にアップしているのだ。ダウンロードしたサンプルが最新のバージョンに対応しているなこの作業はしなくていい。

    • tapestry-annotations-4.1.jar
    • tapestry-contrib-4.1.jar
    • tapestry-framework-4.1.jar
    • tapestry-portlet-4.1.jar

    これで準備完了だ。helloworldに移動してant(1)を実行する。helloworld/target/にhelloworld.warファイルが生成されるので、Webアプリケーションサーバのwebapps/以下に配置する。「http://localhost:8080/helloworld/app」にアクセスしてみよう。Tapestryが動作してページが表示されるだろう。

    図2.1 リフレッシュすると時刻が更新されるサンプル

    これは簡単な例だが、Tapestryの動作を説明するうえで特徴的なものだ。簡単に内容を読んでみよう。

    要素をクラスに置き換える

    helloworldサンプルの実体はリスト3.1だ。このサンプルではクラスは作成されていない。注目するべき点はふたつ。span要素でjwcid属性を指定し続くvalue属性でjava.util.Date()が指定されていること、a要素で同じくjwcidが指定され続くpage要素で対象が指定されていることである。

    リスト3.1 helloworldサンプルの正体 - Home.html

    <html>
      <head>
        <title>Tutorial: HelloWorld</title>
      </head>
      <body>
        <h1>HelloWorld Tutorial</h1>
        
    <p>
      The current data and time is: 
      <strong><span jwcid="@Insert" value="ognl:new java.util.Date()">June 26 2005</span></strong>
    </p>    

    <p>
      <a href="#" jwcid="@PageLink" page="Home">refresh</a>
    </p>
        
      </body>
    </html>

    これはTapestryのコンポーネント指向を表現する簡単で端的な例だ。このようにTapestryでは要素をクラスの出力に置き換えるといったことを実施する。このクラスがひとつのコンポーネントということになるわけだ。サンプルで使われているクラスはjava.util.Dateだが、これをあらかじめ用意したクラスに指定することもできるし、提供されているコンポーネントにすることもできる。そううまくいくものではないが、うまいことコンポーネントを用意すれば、クラスの作成は一切無しで、HTML側の編集だけで事足りるようにすることだってできる。

    helloworld以外にもdirectlinkやformsというサンプルが含まれているので、同様の要領で実行してから、構成物を読んでほしい。どのように属性を指定しているか、どのようにクラスを作成しているか、継承するクラス、指定するアノテーションなど、簡単ながらかなり役に立つだろう。

    Tapestryという形 - コンポーネント指向へ

    Struts、Spring、Tapestry、JSF、Facelet、Wicket、Click、RIFEなどJavaで採用される代表的なWebアプリケーションフレームワークはいくつもある。それぞれに歴史的背景があり、なんらかの問題に対する改善や、アンチテーゼとして開発が実施されてきたものだ。

    Strutsは言ってしまえばアクションをフレームワークにしたものだ。これはServletという基本技術に対してひとつの方向性を示したが、状態遷移が複雑になると手が付けられなくなるという傾向があった。

    WicketやClickは比較的新しいフレームワークだ。動作は基本的にひとつのページに対してひとつのクラスを作成する。いわばページ指向のフレームワークである。理解しやすいし、デベロッパに主権があるという特徴がある。

    Tapestryは言ってしまえば要素に対してクラスを作成する。WicketやClickがページ単位でクラスを作成するのに比べると、クラス化の単位が小さい。コンポーネント指向である。後発のJSFやFaceletにはTapestryの概念が活かされており、同様にコンポーネント指向である。エンタープライズにおける主流は今後このコンポーネント指向系のフレームワークになるとみられている。

    Tapestryのようなコンポーネント指向のフレームワークの場合、表示の機能をクラス化しておけるため、再利用がおこないやすいという特徴がある。スクリプト言語の導入などもあり、必ずしもコンポーネント指向のフレームワークがEJB 3.0時代の主流になるとは限らないが、しばらく間は話題の中心にありつづけるだろう。

    関連記事

    関連サイト

    新着記事

    特設サイトの情報

      求人情報

      人気記事

      一覧

      イチオシ記事

      新着記事

      特別企画

      転職ノウハウ

      あなたの仕事適性診断

      4つの診断で、自分の適性を見つめなおそう!

      Heroes File ~挑戦者たち~

      働くこと・挑戦し続けることへの思いを綴ったインタビュー

      はじめての転職診断

      あなたにピッタリのアドバイスを読むことができます。

      転職Q&A

      転職に必要な情報が収集できます

      スカウト転職する

      企業からアプローチのメッセージが届きます。

      マイナビニュースマガジン