1年くらい前、RailsとJavaを比較して、Railsは良い!とエントリしました。コレは、Javaが複雑になって嫌気がさしていた真っ盛りに、Railsを触った時の感想です。
しかし、お客さんに納める基幹システムにRailsを使う気になれず。Javaの安定性や安心感の方が魅力的で、JSFやJPAといったEoDなJavaの検証を始めました。
ひととおり検証しつつプロトタイプを組んでみましたが、Railsに引けをとらないくらい、簡単でアジャイルなフレームワークだと感じています。POJO+アノテーションの効果は絶大。事実、そんなに苦労しなくても、プレゼンや要件定義の席で見せる「デモ版」程度のものはササっと作れるようになりました。
今風Javaをそれなりに使ってみて、もう一度比較です。
RailsはRailsだけでWeb+DBを簡単に開発できます。一方で従来のJavaEEは、JavaEEだけでは開発できませんでした。
JSFとJPAがJavaEEに加わったことで、この問題は概ね解消しているように思います。どうせJava陣営のことですから、またいろんな亜流やアンチが飛び出してくるのだとは思いますが、今後しばらくはJavaEEだけで満足、他のフレームワークを検証する必要性を感じなくなりました。
JavaEEは、歯抜け状態だったものがキレイに生えそろい、ようやく本当のフルスタックフレームワークになったのだと思います。もちろんRailsとJavaEEがカバーする「フルスタック」の範囲には、子供と大人ほどの開きがあります。
Railsには、4 Days on Rails(pdf) に代表されるように、まず動かして、少しずつブラッシュアップしていく過程を数日で習得できる資料があります。
一方Javaは今のところ、JavaEEチュートリアル(1300ページ!)を読みながら、この中から必要な情報をピックアップしていくという作業が必要になります。ネットを検索してみると、いろんな人がいろんな議論をしているので、その中から総合的に、自分流をみつけていくしかないようです。
今のJavaは簡単です。でも、この作業がボトルネックになり、Java嫌いを増幅しているように思います。あいかわらず、複雑なことから説明しようとするから、こうなる。Web層を教えるには、Servlet/JSPからではなく、JSFから教えるべきなんだと思います。プリミティブな仕様は、隠してしまえばいい。
Railsは仕様の解説なんて、後回しにしています。興味があるなら調べれば?くらいのノリかも。それでも開発はできるからです。JavaEEも、もっと簡単にチュートリアルをまとめることは、できるはずだと思うのですが・・・
そんな中で良い動きをしているのは、NetBeansコミュニティ。JSF from JPAのような簡潔なチュートリアルが今後増えていくことに期待します。developerWorksのような論文調のものは、もはや我々には必要ありません。何度も言うけど、研究で食ってるわけではないのだから。
スクリプト全般の問題だとは思いますが、Railsのステージング環境はApacheやFastCGIに頼っています。この点は不安が残ります。現にこのサイト運用していて、プロセスの残骸でOSごとハングしてしまう現象も起こり、定期的に再起動をかけるなどの運用をしています。問題の切り分けが難しく、高度な専門知識が必要なところです。
また、常駐型ではないのでパフォーマンスを改善しようにも限度があるように思います。
Javaは、開発環境=ステージング環境であり、他のミドルウェアに依存する部分がありません。障害原因も、ほとんどの場合、StackTraceを見れば解決する。特に最近は、GlassFish+NetBeansなどの環境が整備されて、ボタン一つでステージングしてくれます。
アプリケーションサーバの運用は難しいと思われがちですが、開発~運用をトータルでみると、Rails(や他のスクリプト)よりも圧倒的に簡単だと思います。
もちろん、Ruby陣営もこういった問題に積極的に取り組んでいるようです。http://mongrel.rubyforge.org/
普通のWeb開発は「URLにCGIパラメータを流し込む」「コンテンツを返す」、このルールさえ守れば、”何をやっても”良かったはず。
JSFを習得するためには、この概念を一旦忘れないといけません。URLやCGIパラメータの概念がナイといってもいい。
ここが苦しいですが、その見返りに得るものは大きいです。が、失う自由も大きいでしょうw。失った自由を取り戻すには・・・分厚い仕様書読むしかない。
JSFとしてはコレでいいのかもしれないですが、正直、URL-メソッド バインディングな(Railsのようなw)フレームワークがもう一つ欲しくなります。
Railsの功績は、「フレームワークたるもの、このくらいのことは簡単にできて然るべきだ」というボーダーラインを決めたことだと思います。Javaも(その他の言語も)そのポテンシャルは持っていたわけで、今となっては十分に追いついているように思います。
多少苦労はしましたが、JSFとJPAを理解できた今、安定性・パフォーマンスや拡張性を比較すると、あえてRailsを使う理由がなくなってしまいました。Railsは、作るのは簡単だけど、その後にイバラの道が待っているような気がします。Javaは、今はまだ情報がなくて大変だけど、それに見合った安心感を得ることができます。
今後Javaに必要なのは、ハードルを下げるためのちょっとした工夫かもしれません。Rubyがステージング環境を整備するのと、どちらが早いでしょうか。