Apache Wicketファーストインプレッション

いきさつ

盟友ティッシ卿が、Apache Wicketを勧めている。

http://blog.so-net.ne.jp/tissi/2007-06-24

WicketとかJettyとかを併用すると再利用性の高いグッドなWebアプリケーションをかなりご機嫌に開発できるらしい。

しかし・・・。

おかしいな、僕としてはRuby on RailsなんかよりよっぽどCOOLなフレームワークだと思うんだけれど。

注:強調は俺

こんガキャー!"なんか"とほざきやがるか!*1よぉぉぉし、そうまでいうなら試してみようじゃねえかこん畜生が!

・・・と、まんまと術中に嵌ってApache Wicketと戯れることにしたのである。

参考にしたのは、下記のサイト。

Wicket入門 - JavaとHTMLだけで作るWebアプリケーション
情報がちと古い?てか、java.lang.Objectへのキャストは常に間違いだと思うのだがどうか。
Javaウェブフレームワーク「Wicket」の使い方
こっちのほうが参考になったかな。

とりあえず簡単にページ遷移するWebアプリを作ってみた。

感想

・・・いいんじゃないすか、これ?Struts一色のJavaによるWebアプリケーション界にこのような化け物が存在していたとは。EODとか言ってる場合じゃないよ、ViewとControllerに関しては、もうWicketが達成してるんじゃないの?

設定ファイル極少
web.xmlと簡単なプロパティファイルぐらい
HTMLとJavaコードだけのシンプルな構造
シンプルさはつねに正義。無駄が少なく、直感的に組める
HTTPリクエスト/レスポンスを見事に隠蔽した秀逸な設計
イベントドリブンモデルで実装できる
コード内でのページ遷移定義
Strutsstruts-config.xmlに遷移を切り出してるけど、なにも嬉しいこと無い。むしろ、こっちのほうが処理を追いやすい
POJOでOK
extends ActionFormとかいりません
ありがちな機能は実装済
Validatorとか。独自のValidatorも簡単につくれるよ
ライブラリへの依存極少
ロガーぐらいか?

軽くなでただけで、これだけ良いところがでてきた。歴史が浅い故の問題はあるだろうが、開発効率の面ではおそらくStrutsを軽く超える。JavaでWebアプリケーション開発やってる人たちは、これ試してみたほうがいい。Struts使うのがバカバカしくなると思うぞ。

比較

と、散々持ち上げておいてなんですが、正直Ruby on Railsをコキおろせるほどに優れたフレームワークとも思えない。

以下、Ruby on Railsと比較してどーなのよ?という話をする。

気に入らない点
DRYじゃない
Formを定義する際、Hogehoge.htmlとHogehoge.javaで、同じ構造を異なる方法で定義しなければならない。
ダウンキャストうぜぇ
静的型言語の宿命か。
Bean定義めんどくさい
POJOなModelは大変結構だが、結局getter/setterもってるだけの構造体もどきのBeanを多量に作らにゃならんか。助けて、Eclipse
フルスタックじゃない
シンプルなのはViewとControllerに限られるので、Model層の選択によってはやっぱり設定で苦労する。異なるFW間の連携も大変。それに、テストどうするの?とかいろいろ。もっとも、これは選択の自由がある、とも取れる。
疑問点
再利用性高いの?
DRYじゃないと密結合な箇所が出てきて保守が面倒になるのでは?そもそも、くだんの記事はLLで開発したコンポーネントは再利用性が低いという前提のようだが、その根拠が何なのだろう。それは設計次第では。RoRMVCモデルに則ったコンポーネントの分離も行っているし。同じ程度には使い回し効くんじゃないかなぁ。
生産性高いの?
コードの記述量はRoRのほうが少なくなりそうだ。自然に変更時の修正箇所も少なくなると思われる。
なんでJava
なんかバリバリにメタプログラミングな感じで、動的言語使った方が簡単に作れそうなんだが、このFW。
っていうか
WicketのやってることはRoRもできる。両者を触ってみて、こいつら似てるなぁ、と感じはするが、Wicketだからすげぇ、という優位性が見いだせない。どの辺に差があるのだろう?

結論

Apache Wicketはすごい。Strutsなんか目じゃない。超オススメ。でも、Ruby on Railsなんか*2とこき下ろせるほどの格段の優位性を持つとは思えない。

まぁ、1時間ちょいしか触ってないから、なにか未知のすごさがあるのかもしれん。きっと、ティッシ卿が教えてくれるに違いない!自分で調べろという話もありますな。へぇ、そうします・・・。

*1:本気にしちゃやーよ

*2:こだわります:-p