はじめに
以前は、Javaの世界でフレームワークと言えば「Struts」と定番が決まっていました。しかし、フレームワークによる開発は、どうしても大掛かりなものになりがちです。時代がライトウェイト言語(Lightweight Language、PHPやRubyなどのスクリプト言語)へとシフトしつつある中、重量級のフレームワークは、やや時代遅れな印象をもたれてしまうのは仕方のないことでしょう。
もっと軽快に使えるフレームワークがあれば、と思う人は多かったに違いありません。この数年の間に「軽量フレームワーク(Lightweight Framework)」と呼ばれるものが次々と登場するようになりました。軽量フレームワークは、はっきりとした厳格な定義があるわけではありませんが、従来の大掛かりなフレームワークに比べ、もっと軽快に取り扱えるものを一般にそう呼ぶようになりつつあります。
本連載では、こうした軽量フレームワークの中から注目株をピックアップし、その概略を紹介していこうと思います。まず最初に取り上げるのは、軽量フレームワークという言葉を生み出した「元祖」といってもいい「Apache Wicket」です。
対象読者
- Javaで手ごろなフレームワークを探している技術者
- 最近のフレームワークをごくざっと理解しておきたい方
- Web開発の手法がどうも気に入らない、と常々考えているJavaプログラマ
Apache Wicketとは?
「Apache Wicket」は、ご存知Apache Software Foundationが提供するWebアプリケーション開発フレームワークです。このWicketは、それまでJavaの世界で広く使われていたフレームワークの考え方とは、おそらく正反対の設計思想で作られています。
従来のフレームワークは基本的に「いかにして記述するソースコードを減らすか」を考えられていたように思えます。「さまざまな設定情報などは極力ソースコードから切り離し、テキストファイルベースの設定ファイルで記述する」「独自のテンプレートなどを駆使し、なるべくソースコードとして書かなければならない部分を減らしていく」といった考えです。ページ遷移だの各種の設定だのといったものはただ設定ファイルを書き換えるだけで済み、プログラムを再コンパイルする必要もないため、開発が楽になるというわけです。
Wicketはまったく反対です。これは「すべてをJavaで記述するフレームワーク」なのです。Wicketで作成するのは、ページのテンプレートとしてのHTMLと、Javaのソースコードだけ。作成する必要がある設定ファイルの類いは、わずかにサーブレットを登録するweb.xmlの修正だけです。HTMLファイルにしても、JSPのように特殊なタグや処理を埋め込んだりするわけでなく、ごく普通のHTMLに専用の属性を追記するだけで、後はすべてJavaで書くのです。
「それのどこが、新しい軽量フレームワークなんだ?」と思うかもしれません。しかし、実際に使ってみると、Wicketの目指すところが次第にわかってきます。Wicketは、Webアプリケーション開発のすべてを、Javaプログラマの手に取り戻そうとしているのです。皆さんがWebアプリケーションの開発を行う際の作業を思い起こしてみてください。XMLファイルの記述、JSPの作成、サーブレットの用意、フレームワーク用の設定ファイルの作成、プロパティファイルの作成・・・。Webアプリケーション開発作業はまるで、たくさんの種類の異なる端切れのようなものを縫い合わせてパッチワークをしているような感覚に陥ります。所詮、Webなんてのはさまざまな技術の寄せ集めなんだ、そう思いながらあちこちの種類の異なるファイルを書いていませんか。
Wicketによる開発は、そのスタイルを一変させます。HTMLでページを用意したら、後はひたすらJavaのソースコードを書くだけです。非常に素晴らしいのは、そこで記述されるのはGETやPOSTに応じて呼び出されるメソッドなどではなく、ただ「クラスの定義」なのです。Webページで必要とされるさまざまな要素は、すべてコンポーネントとして用意されており、それらを組み込んでいくだけです。実際にコーディングをしていくと、まるでawtやSwingのコードを書いているような錯覚に陥ることでしょう。Webアプリケーションを作っているという感じはまるでありません。
これこそが、Wicketが実現しようとしている世界なのです。Javaプログラマにはあまりにおなじみの、コンポーネントを中心とした開発スタイル。それまでのWeb開発に見られたような「Javaで開発しているといいつつも、実はただ指定の関数を定義しているだけ」というようなものとはずいぶんと違います。
Wicketの入手と構成
では、Wicketを利用してみましょう。Wicketは現在ここからファイルをダウンロードできます。左側に見えるメニューから「Releases」という項目を探してください。ここに、各バージョンごとにリンクが用意されています。本稿執筆現在「Wicket 1.4」が最新版となっているので、このリンクをクリックしてください。「Apache Download Mirrors」というページになり、ダウンロードのためのミラーサイトが表示されます。ここからサイトをクリックし、ダウンロードします。ファイルは、tar.gz形式と、zip形式のものがアップロードされています。Windowsユーザーであれば、「apache-wicket-xxx.zip」(xxxはバージョン番号)というものをダウンロードすればよいでしょう。
圧縮ファイルを展開すると、その中にはいくつかのフォルダとファイルが保管されているのが分かります。それぞれ次のようになります。
- apidocs:WicketのAPIドキュメントが用意されています
- lib:Wicket関連のライブラリがまとめられています
- licenses:Wicketで使用している各種ライブラリのライセンスの説明です
- src:Wicketのソースコードです
- README/NOTICE/LICENSE/CHANGELOG-xxx:リードミー、注意事項、ライセンス説明などのファイルです
Wicket本体となるのは「lib」フォルダです。フォルダの中を見て、非常に多くのファイルが用意されていて驚いた人もいることでしょう。これらは、別にすべて必要なわけではありません。Wicketで使用するものやさまざまな用途で使う拡張ライブラリの類いまで一式がまとめられているのです。
Wicketの本体は「wicket-xxx.jar」というファイルだけです。とりあえずWicketを使うだけなら、このファイルだけあればOKです。ただしWicketでは、ログの出力にJUnit、SLF4jなどを使うため、これらのファイルもあわせて用意する必要があります。これらは別途ダウンロードしてもよいですが、サンプルファイルの中からコピーして利用するのが1番でしょう。「lib」フォルダ内に「wicket-examples-xxx.war」というファイルがあるはずです。これを展開して、WEB-INF/lib
を開いてください。中に、多数のJarファイルが用意されています。この中から、以下の3つのJarファイルを取り出してください。
- log4j-xxx.jar
- slf4j-api-xxx.jar
- slf4j-log4j12-xxx.jar
先のwicket-xxx.jarとこの3つの計4ファイルを用意すれば、Wicketを使えるようになります。