JAVA-インターフェースの芸術

まっぷたつに分割できる車があったとする。そして、右半分と左半分を別々に売っていて、ユーザの好みで好きなパーツを選んで組み合わせることができる。しかし、どちらの半分にもボディーがあってエンジンが半分含まれていて、座席やら内装も含んでいる。タイヤとエンジンとボディーの色と内装は全部組み合わさって売ることになるわけで、いくら「お好みのパーツを組み合わせてお客様のお望みの車を選べます」と言われても、全く意味がない。自分が赤いボディーの右半分を持っていたら、いくらエンジンやタイヤがぴったりでも青いボディーの左半分を組み合わせるわけにはいかない。

売る時だけでなく製作するのにも、右と左で分担したら、お互いに相手の作業を詳細に把握していないと自分の作業を進められない。しかも、パーツができあがって組み合わせる時に、ちょっとしたミスで合体がうまくいかない。さらに、新しい車種を作る時に、前の車がよくできていたから、右を残して左だけ新しくしようということもできない。

このように、ものを分割する時に、適切な所で分けないと分けた意味がない。当然ながら、車をパーツで売ったり作るなら、エンジンとタイヤとボディーとかそういう分け方をしないといけない。何をばかなことを言っているかというと、ソフトウエアを分割して作りましょうと言う時には、車を右左にわけることと近いような馬鹿げたことが行われているということだ。

最近、仕事で*JAVAについていろいろ調べたが、このような意味で要素を適切に分解することが見事にできていると感じた。こういうのは、できあがった仕様書を見るとなかなかわからない。どれも当たり前に見えてしまうのだ。分解した個々の要素がうまく設計されているのは目を引くことだが、要素をどこで分解したのか、ということにはなかなか目がいかない。特に、うまく分解していると空気のようにあって当たり前になってありがたみがない。

JAVAというのは、単なる言語でなくてひとつのOSを含むような大規模で複雑なシステムだ。それに、携帯電話からスーパーコンピュータまでいろいろな領域をカバーしようというのだから、要素も多くたくさんの「インターフェース」がある。

へたな技術者がこういうのを設計すると、車を右半分と左半分にわけるような、分割する意味がない所にインターフェースを設定しがちだが、SUNは見事な仕事をした。例えば、最近、HotSpotという仮想マシンがリリースされた。これは車で言えばエンジンにあたるようなユーザの目には直接見えない所だが、燃費や馬力を左右する重要な要素だ。JAVAのプログラムは結局、この仮想マシンの上で動作するので、このソフトの性能が世の中の全てのJAVAプログラムの性能を左右する。さっそく試してみたが、私の手持ちのプログラムはそれなりにスピードアップした。条件によっては期待した性能が出ないこともあるようだが、重要なのは今現在、今回の最初のリリースの性能ではなく、今後継続的に改良が加えられ、世界中のJAVAのユーザはその成果を何の努力もなしに享受できることだ。

車のたとえにもどると、毎年新しいエンジンがリリースされ、無料で新しいエンジンにつけかえることができる車だ。そして新しいエンジンにすれば、毎年、燃費がよくなり加速などの性能も向上する。そんな車があれば、最初のバージョンが多少問題あってもたいていのユーザはそれを買うだろう。

これができるのは、バイトコードという仮想マシンとアプリケーションの間のインターフェースが適切に設計されていたからだ。このバイトコードを単純なものにするか、複雑で機能の高いものにするか非常に難しいトレードオフがある。単純すなわち、JAVA言語からかけ離れていると、仮想マシンを作るのが簡単だが、性能を向上するのが難しくなる。仮想マシンで工夫する余地がなくなり、アプリケーションの側で努力しないと性能があがらない。逆に、複雑すなわちJAVA言語に近い仕様にすると、仮想マシンを作ること自体が難しくなってしまう。これだと、サーバマシンなどでパワーがある場合にいろいろ工夫して全体の性能を上げるのは楽だが、携帯電話やカーナビのような小さなデバイスに入れるのが難しくなってしまう。結局、中間に正解があることは誰でもわかるのだが、実際にその中間に線を引くのことは誰でもできることではない。

JAVAには仮想マシンだけでなく、JAVA言語自体からはじまって、JAVABEANSとかJINIとか関連するインターフェースが山ほどあるが、大抵はセンスがよくて学のある人がこういう作業をやっていて、どれもこれも美しい。おそらく全員がUNIXからこういうセンスを吸収しているのだと思う。JAVAというシステムは、いろいろな取り替え可能な構成要素でできている。

例えば、仮想マシンにしてもHotSpotとほとんど同時に、IBMもリリースしたし、他にもいろいろなところが出している。組み込み分野でもいろいろな会社が出している。重要なのは、同じアプリケーションを一切いじることなくどの仮想マシンでも動かせることだ。純粋に、しがらみなく性能と価格で好きなものを選ぶことができる。

こういうふうになると、競争があって値段が下がって品質があがる。HotSpotのホワイトペーパーを読むと、まだまだ今後のバージョンで最適化する余地がたくさんあって、潜在能力が高いことがわかるが、こういうハイレベルの競争が起こるのはユーザとしては大歓迎だ。また、特殊な条件でよく動くものが出てきたりして、適材適所で使うといろいろな場面に使える。本当にJAVAのプログラムというのは、携帯電話からスーパーコンピュータまで動くようになるだろう

仮想マシンだけでなく、いろいろな構成要素が取り替え可能であり、取り替え可能であるということはそこに競争があり、いろいろなニッチを埋める製品も出てくる。おそらく今年からJAVAはブレークすると思うが、その根本にあるのは、このような部品を取り替え可能な設計、いわばインターフェースの芸術というべき基本設計の美しさなのだ。