The Seasar Project チーフコミッタひがやすをさんとの対談の中編です。
Java談義
弾: Javaがオープンソースになったのって、つい先日ですよね。Javaが最初に出たのって95年? そんなもんでしたよね。失われた10年だったりして。Javaそのものがオープンソースでなくて悔しい思いをしたとかは?
撮影:編集部
ひが: VM(Virtual Machine)などの部分は、そんなにソースコードとか読みたいと思っていたところじゃなかったので。
弾: 私の場合、Javaで一番いやだったのはClosure[1] が使えないことだったんです。Javaって、簡単なところは簡単にっていうところはよかったんですよ。Javaが出た初期に、Dukeが踊ってるところ見て、すげえ、っていうのがあったんですが、実際に使ってみると、CやC++では当たり前だったテクニックがとたんに使えなくなるわけです。たとえば関数ポインタ[2] ってないじゃないですか。あぁソートどうするんだー! みたいな。
ひが: Javaでは、ソートとかはライブラリとかAPIが用意されているので、それを使えば別にコーディングする必要はないんです。
弾: でも使うとき、わざわざcompareのためのメソッドこさえてというのが面倒で。Closureぽんと渡しておしまいにできない。
ひが: Closureに相当するようなところを、インタフェースを用意しておいて、それをインプリしたインタフェースを渡すというようなまどろっこいことは必要ですね。
弾: あと、Javaってマクロ[3] を否定してるじゃないですか。確かに、Cを使っているとマクロが嫌になることもあると思うんですよ。でもあれのおかげで、ぐしゃぐしゃしてたコードが一発でえいやってこともけっこうあるんですよね。
ひが: 私の考えでは、そのへんはコードをたくさん書く人にとっては、重要な意味があると思ってるんですけど、一般の開発者ということでいうと、そんなに使わないのかな?という気もするんですよ。最近JavaはCOBOL化していると言われることも一部あるみたいなんですけど。実際COBOLみたいに、だんだん、一般の開発者が書くところはそういう雰囲気になっていて、そんなに難しいこともやらないし、言われたとおりにやるみたいなところがあるんじゃないかなと。
弾: それはすごく残念なことだと私は思うんですよね。というのも、永遠の初心者っていないと思うんですよ。Matzさん[4] もよく言ってることですけれど。この辺はよくできるようになったから、次に難しいことをエレガントに簡単に書きたいっていうときに、そこへの手段がロックされていると、それを無理やりにでもやってしまおう、っていう動きが出てくると思うんですよね。
ひが: Javaの世界だと、難しいことがあると、それをどこかのフレームワークにお願い、みたいなそういうノリで、自分で書くっていうのがそんなになくなってきているんじゃないかという気がするんですよね。
弾: ただ、それはほんとに簡単なのかっていう疑問はあると思うんですね。たとえば確かにIDEを使っていればクラス名を一発で全部直してくれるじゃないですか、あれはあれでかっこいいんですけれども、裏を返せば、JavaのDRY[5] でないところをIDEが始末していると。
ひが: そうですね。
弾: 何でJavaって重たく感じるかっていうと、Javaをまともに使うために用意しなければいけない環境が大きいんですよね。50行もあれば書けるもののために、何でEclipseを立ち上げなければならないんだ、とときどき思います。
ひが: そういう意味では、Eclipseさえ入っていればあとはデフォルトでインストールできますよ。URLをぽーんと指定するだけで。
撮影:編集部
弾: なんでもかんでもEclipseになってしまうし、結構、Javaの好き嫌いってIDEの好き嫌いっていうところもあると思うんですよ。viだけで楽しくJavaとつきあうわけにいきませんかね、vi作った人がCTOやってた会社[6] の言語ですし(笑) 。
ひが: そういう意味では、Javaは、単にテキストのエディタだけではもう楽しめない言語なのかなという気がしますね。Javaの世界にいると、IDEがないと生産性が出ないですよね。私はJavaに移ってからは、Javaの開発はIDEでやるというので決めてます。
Javaの仕様への要望
弾: これでめでたく、Javaもオープンソースになったんですけど、ひがさんから、こういう仕様があったらありがたい、みたいな要望はどう報告してます? あるいはどう反映されてます?
ひが: JavaってJava Community Process(JCP)っていうところで仕様を話していて、それがJSRっていう仕様になって、それがインプリされていくというのがこの数年の流れなんですけど、最近、ある記事を書くときに、JSRってどんなのがあったかな、と思って調べてみると、規格倒れになったものが多いんですよね。成功しているのはごく一部で、それもほかで成功してるAPIをそのままJavaに持ってきましたというものばかりで。そういう意味で最近思っているのは、みんなが会議をしながら仕様を作っていくっていうのは限界があるというか、玉虫色になりがちなのかなって思っていて。
弾: コミュニティがデザインしたみたいなのは、たいていイケてないですよね。委員会方式でやると。もうUnicodeとかUnicodeとかUnicodeとか…(笑) 。
ひが: そういうのを見ていると、委員会方式よりは、まずは自分で作って世の中に出しちゃって、それが広く受け入れられれば、これが良いねという感じでJavaにとりこまれるという方向で動いたほうが楽しいんじゃないかって、思っています。