Wicketってなに?
Links
FAQ
News
TOP

Wicketってなに?

WicketはApache Software Foundationで開発されているJava上で動くウェブ・アプリケーション・フレームワークです。
Java用のウェブ・アプリケーション・フレームワークを探すと、山ほどの選択肢が出てくることでしょう。そのなかでなぜ敢えてWicketなのか。Wicketは他のフレームワークが持っていない特徴があるからです。

オブジェクト指向

ウェブ・アプリケーション・フレームワークで最も普及しているApache StrutsはJavaで作られていますが、Javaらしいオブジェクト指向開発を実現していません。StrutsはあくまでもJava Servletの上に被せられた薄い膜であって、サーブレットを設定ファイルで制御することを目標としたものです。さまざまな要素を設定ファイルに追い出すことで、開発効率を上げようとしたのです。

Wicketの発想は全くの逆です。WicketはJavaであることを大事しています。WicketはJavaのオブジェクト指向言語としての機能を最大限に活用しています。そのためにStrutsのような設定ファイルを持ちません。Wicketが使う唯一の設定ファイルはJavaサーブレット仕様で必要と定められている「web.xml」だけです。Wicketによる開発では、プログラマは自由にページを「継承」したり、機能を「委譲」したりすることができます。

Wicketにとって、ウェブページとは一つのオブジェクトであり、その上のテキストフィールドやラベル、セレクトリストなどもすべてオブジェクトです。もちろんそれらを自由に継承して独自に拡張することができます。

Wicketの最大の目標は、ウェブ・アプリケーション開発にオブジェクト指向を取り戻すことです。

HTMLをそのまま使う

WicketはJSPのようなページ・テンプレートも否定します。ページ・テンプレートはどんなにタグでプログラムでないように見せかけようと一つのプログラムであり、HTMLページデザイナとの協業を邪魔します。

WicketはHTMLファイルをそのままテンプレートとして使用します。HTMLにもともと存在する属性をWicketが使うこともほぼありません。Wicketが利用するのは、DreamweaverのようなHTMLエディタが無視してくれる、独自の「wicket:id」属性だけです。デザイナがデザインしたHTMLファイルをそのまま、すこしの属性を付け加えるだけでプログラム上から利用することができます。プログラマが触ったHTMLファイルは、もとのままDreamweaverのようなHTMLエディタで修正することができます。もうHTMLファイルをJSPに変換するための余計な労力は発生しないのです。

コンポーネント指向

Wicketはページをオブジェクトとして扱います。さらに、ページそのものが複数の「コンポーネント」の組み合わせでできていると考えます。「テキストフィールド」や「ラベル」「ラジオボタン」という各要素もコンポーネントの一種です。

そういった基礎的なコンポーネントを拡張したものも、もちろんコンポーネントとして同じように扱うことができます。コンポーネントは結局のところただのオブジェクトであって、Wicketはオブジェクト指向のフレームワークだからです。入力補完をしてくれるフィールドや、日付選択用のボタンのついたフィールドなども「コンポーネント」です。

さらに複数のコンポーネントを組み合わせた、例えば「ログインフォーム」「コメントフォーム」などもコンポーネントです。こういった要素をコンポーネントとして扱うことで、複数の画面で再利用することができるのです。

Wicketではコンポーネント指向のおかげで、Ajax対応コンポーネントをページに追加するだけで、Ajax化されてウェブページを作ることができます。しかも、HTMLファイルはただのHTMLのままです。Wicketのコンポーネント化技術はJavaScriptファイルも組み合わせることができるからです。ただのHTMLファイルとJavaプログラムだけでAjax化されたページを作ることができる。これがWicketのコンポーネント技術のパワーです。

ステートフル

Wicketがオブジェクト指向をウェブ開発に取り戻すためにどうしても必要だったのが、「状態の維持」という機能です。ウェブページの基礎となっているHTTPという通信プロトコルには本来「状態」という概念がありません。一つ前のリクエストと、今回のリクエストが両方あなたからのリクエストだと知る手だては少なくともプロトコルには無いのです。

一方でアプリケーションには状態があります。あなたがショッピングカートに入れたものは、3ページ後の画面でもショッピングカートに入ったままであるべきです。

サーブレットはこの問題を上辺だけで解決してきました。少なくともあるリクエストとあるリクエストが同じユーザーのものであると分かるようにだけして、後の管理はすべてプログラマに投げたのです。プログラマはページの生成とは別に、ユーザーの「状態の管理」を別に行う必要がありました。

Wicketはオブジェクト指向フレームワークです。オブジェクトとは、「状態」と「ふるまい」をパッケージ化したものです。オブジェクト指向フレームワークとして状態の維持の問題は避けて通れない問題なのです。多くのフレームワークがこの問題を避けてきたため、サーブレットと同じ手法でしか状態を管理できませんでした。Wicketは違います。Wicketはページの状態をフレームワークが保持します。入力値やページの変更も「状態」として保持します。

Wicketには「バックボタン」問題はありません。Wicketはページが前のページでどういう状態だったか知っているからです。Wicketではページに単純に値を保持できます。ページの状態をWicketが保持するからです。あなたは、ページを「オブジェクト」として作ることができるのです。オブジェクトのフィールドに値を格納するのと同じ感覚で、ページに値を持つことができます。ユーザーがページに再びやって来たときには、ページの状態はそのまま保持されています。サーブレットはサーブレット内に値を持つこと自体が禁止されていたのと対照的です。サーブレットでは状態はすべて「セッション」に保持して自分で管理しなければいけなかったのです。


Wicketは上記のような特徴をもった新しいフレームワークです。ウェブ開発を簡単にし、ウェブ開発を楽しくするフレームワークです。Javaプログラマのために作られたJavaをフル活用したフレームワークです。