移転しました。

J2EEを捨てれば道は開かれるか

我らJava世代の課題
私にとってはJavaは最初の覚えた言語だから少し見え方が違うかもしれないけれど、最近Javaを仕事で使わなくなってから同じようなことを感じるようになった。
先日、Strutsで組まれたシステムを見る機会があって懐かしかった。流石Javaと思わせる型を意識したプログラミングが光っていた反面、幻滅したのは001Action.javaとか002Action.javaとかいった旧来システムのような命名。国内のJava案件はホストシステムなどの旧来システムからWebへ移行する開発が多かったように思う。そういう使われ方でJavaを覚えた人たちが、新たに一から外向きWebサイトを作ろうとしたときに頭の変換ができなくなっているのだと思う。
Java自体は今でも素晴らしい言語だと思っているし、GUIを手っ取り早く開発するなら間違いなくSwingを使うけれど、焦点をWebに絞ろう。Ruby on Railに代表されるようなスクリプト言語に多い高速開発フレームワークStrutsに代表されるJavaのWebフレームワークでは土俵が大きく違う。Javaがいつも重量系フレームワークになってしまう原因の一つにServletの存在があると思う。JSPも裏ではServletだ。
このServletの存在のためにTomcatのようなJavaコンテナが登場する。これら一体でJ2EEフレームワークと考えることができるだろうか。ファイルの配置場所やXMLの設定、HttpServletの継承(ライブラリのパスとかEclipseがないと無理!みたいな)などの苦難を乗り越えて初めてブラウザ上にHelloWorldを表示できる。しかし、スクリプト言語の多くは

print "Hello World";

というファイルを作って、URLでファイル名を叩けば終わりだ。ただし、ApacheのようなWebサーバーが言語を解釈できる必要こそあるが。Javaな人は良くこれを設計レベルの話で反論する。Javaは安全にプログラムできるとか、生産効率を考えられているとか。そうではない。HelloWorldを出力するだけの差をもっと着目すべきだと思う。
その他にも、JSPって本当にViewとして切り離されているのか(タグライブラリは使いこなせるデザイナーに会ったことがない)とかも思うし、「Javaは遅い」というのは大分と解消されたように思うけれど「Javaコンテナはメモリを食う」は今でも問題な箇所だと思ったりもする。こういったことを考えていると、いつもJavaが不利な環境で無理やり戦っているような印象を受けて悲しい。本当に素晴らしい言語であることが強調される前に環境負けしている。
だから、JavaなWebに提案したいのは、J2EEの思想を全く踏襲しない開発だ。J2EEの良さを引き合いに出して反論するのではなくて、向いているものを開発しようという建設的な考えで。例えばVMをキックするだけのサーバーかApacheモジュールみたいなのを用意する。それで、例えばURLに

http://example.com/hello.class

とやると、普通にJavaが動く。標準出力だけWebのレスポンスに紐付けて置けばよいかな。コンテナもServletもない。だから、HttpServletの継承とかもないし。WEB-INFOなんていうディレクトリも存在しない。リクエストの取得はどうするのだとかあるけれど、それはハンドラクラスをhttpd.confに書いたらそこで引数として受け取れるくらいライトな感覚がいいかと思う。
何が重要かというと、Sun側で何でも提供しないことだ。Webサーバーが必要値を渡して一つのクラスを呼んでくれるところさえあれば、後は世界の素晴らしい技術者が最高のフレームワークを開発してくれる。その自由な開発土俵がJ2EEにはない。だから、いつまでたってもデファクトスタンダードとしてStrutsが不動の存在だ。ひょっとすると、Javaの思想に反するような無茶なフレームワークも出現するかもしれないけれど、そんな盛り上がりを見せるJavaが見たい。
と、思ったことを書いてみたけれど、実は「mod_java」みたいなのは既にあったりするのかなぁ。