そろろろRailsについて本音を書いてみるかに追記されていた。
確かにJavaはうざく見えるけど、これは、Javaの話ではなく、Struts,Spring,Hibernateの話です。
そう。Javaの本質はシンプルで静的型付けによる安全なコードを俊敏に書くということ。複雑になるライブラリや環境を選択しておいて、Javaはこんなにも複雑と書くのはただのFUDでしょう。同じようなライブラリをRubyでかいたら同じように複雑で面倒なことになる。でもそれってRubyとはぜんぜん違うところの話だよね?
たとえば、URLベースではなくイベントベースの開発ではあるけど、ひがさんの出したサンプル的なコードをいわゆるNetBeansで標準的な開発(VisualWebJSF+EJB3+JPA)をすると以下のようになる。
public String editButton_action() { person = personFacade.find(id); return "edit"; }
personFacadeも自動生成してくれるし(findのキーがObjectなのが多少気に入らないけど)、JPAに必要な各種エンティティもDBから関連含めて自動生成してくれる。HTMLの生成もぽとぺただけですむし、環境設定のXML類もまったく書く必要がない。実際に入力したコードは10行もないわけだ。開発者はロジックとビューの動きのみに専念できる。
しかも、この書き方が出来たのは今に始まったわけではない。
Sun Java Studio Creatorが出たのは今から3年以上前。価格はたしか1万1000円くらいだったと記憶している。大幅に変わったNetBeans4がでているのにベースが3.6と一世代前で、NetBeansと違ってコードをかいたり機能が大幅に少ないなど問題点もあった。RowSetを売り出していた時期なので相性のいいPointBaseは同梱されたが、日本で最も普及しているオープンソースなDBのPostgreSQLが動かないなど問題も多かった。RowSet自体は非常にすばらしいものなのだが、PostgreSQLがまともにJava対応していないのでどうしようもない。
有償だったのがネックになったのか、書籍はいくつか出たが、ユーザーはあまり増えなかった。そして今からちょうど2年前にフリーになったCreator2がでることになった。ベースはNetBeans4となり、コンポーネントは一気にAJAX対応として大幅に増え、EJB2をコールできることによってCreator2のコード部分の貧弱さをカバーすることになった。これが今のNetBeans6.0のVisualWebJSFのベースとなる。しかし、開発環境で動かすのは相変わらずアプリケーションサーバーのみで、メモリもマシンパワーも貧弱な上にアプリケーションサーバー自体もわりと重かった。そしてなによりNetBeansはすでに5.0になっていた・・・。
しばらくたったあとCreator2がVisual Web PackとしてNetBeans5.5のプラグインとして登場することになる。ここでNetBeansとはじめてまじわり、コードの書きやすさなど問題点がことごとく解決された。Rowsetを使わずともJPAによるO/RマッパのサポートでDB操作もできるようになった。欠点は専用のプロジェクトを作らないといけないことだけだった。
それからさらに月日がたち、6.0が登場した。ここで通常のWebプロジェクトの上に設定するフレームワークという位置づけになりやっと融合された。特定のページはパーマネントなURLがほしいから、という場合にServletやStrutsなど自由に追加することが出来るのだ。Tomcatが6になったことによりアプリケーションサーバーを用意しなくてもJSF1.2が使えるようになったことも大きい。
欠点が全て消えて万々歳・・・となるはずだったが、webuiコンポーネントのバージョンが上がってコンポーネントのサイズ変更が出来ないという重要な欠点も追加されてしまった。残念ではあるが、webuiコンポーネントは使わないほうがJSFでは開発が楽なのでここでは無視しよう。
なんかNetBeansの歴史みたいな感じになっちまったけど、複雑なほうを選択してJavaは複雑と比較するのはフェアではないと思う。StripesとかClickとかほかにもいろいろあるでしょと。ひがさんは影響力があるだろうから、ぜひもっと世の中をかき回していただきたい。