なぜJavaの価値があがるといえるか。

昨日の続き。
PHPの価値が相対的に落ちてJavaの価値があがっていく

PHPJava

Windows Azureでは、PHP対応もあるらしい。
また、GAE/J上でPHPを動かしたら一緒ではないかというコメントもあった。現状ではGAE/J上でPHPを動かす環境が未完成であったとしても、先のことを言うのであればこちらも完成度があがっていくことを考慮する必要がある。
ただ、これらを考慮したとしても、PHPの相対的な価値が下がったという意見には変わりがない。
PHPがこれまでもっていた「動かす環境が確保しやすい」という特権がなくなったということをもって、PHPの相対的な価値が下がったといっているからだ。実行環境の確保という点では、PHPがもっていたほかの言語に対する優位性がなくなった。


また、Google App EngineによってPythonではなくJavaが強くなったというのは、今までJavaは一番サーバーが確保しづらかったといえたものが確保やすくなったということによる。
Javaサーブレットコンテナという別プロセスを必要とする関係上、Apacheには組み込めず、不利な状況にあったわけだ。それが、不利ではなく若干有利になった。そういう意味で、GAEでJavaが採用しやすくなったと書いた。
もちろん、Amazon EC2やGAE/Jだけであればマイナスが0より少し上になっただけなので、これだけをもってJavaの価値があがっていくといっているつもりはない。

クラウドホスティング用パッケージ

昨日のエントリの文脈でJavaの価値があがると書いたのは、GAEと同様のクラウドホスティングサービスを提供しようとすると、Java以外の選択肢が考えにくいということからだ。
GAEタイプのクラウドホスティングを行う場合には、ローカルリソースにアクセスさせない仕組みが必要になるので、サンドボックスが必要になる。Javaサンドボックスには10年の実績があり、クラウド環境を公開するのに十分な完成度を持っている。
もうひとつの事情として、Googleのように複数の言語に対応したクラウドホスティングを行うモチベーションと体力を持った会社はないだろうということだ。提供できる環境がひとつであるならば、Javaに対応しておけばJRubyJythonなどを使って複数の言語を利用できる。
完成度の高いサンドボックスを持ち複数言語を実行できる環境というのがJavaのほかには.NET以外にない。
クラウドホスティング用パッケージの.NET版はMicrosoftが出すかもしれないが、ほかの会社が出すならJavaになるだろう。


ところで、そのようなクラウドホスティング用のパッケージというのは開発可能なのだろうかと考えてみた。
クラウドホスティングのパッケージに必要な機能を考えると、クラスタリングの管理をして、分散ストレージをもち、プロセスをクラスタに振り分ける、というものが考えれる。BigTableのようなデータベースの実装も必要になる。
と、こうやって挙げてみると、すでにそのようなソフトがメジャーになっていることに気づいた。MapReduceを行うためのソフト、Hadoopだ。BigTableの論文をベースにしたデータベースとしてHBaseも開発されている。また、HadoopにはWebサーバーとして、HadoopにはJettyが組み込まれている。
つまり、クラウドホスティングのためのパッケージに必要な機能はほとんどできあがっていて、あとはWebアプリケーションを動かす仕組みを乗せればいいだけとすらいえる状態だ。
こう考えれば、GAEタイプのクラウドホスティングを提供するためのパッケージが開発されるのも、そう遠くないと思えてくる。

もうひとつの強み、Android

もうひとつ、Javaの価値があがる根拠として、昨日は挙げなかったものがある。
それはAndroidだ。AndroidのプログラムはJavaで書く。
日本ではAndroidの端末としては、HT-03Aという使いやすいとはいえない端末しか出ていない。この端末は、ぼくは開発者が公共回線を使っていろいろと試すために早期に提供された端末だと思っている。エンドユーザー向けではない。
そういう状況なので、Android携帯が普及するというのは考えにくいかもしれないけど、ソニーエリクソンの端末を皮切りに徐々に普及していくと思う。
恐らくiPhoneの何倍かにはなるだろう。ユーザーはAndroidを買うのではなく、どこかの端末を買ったら中身がAndroidだったという具合になっていく。
Android用のプログラムの開発しやすさは非常に高い。いままでこういったデバイスでのプログラムは、エミュレータを使って開発しあとで実機に転送して確認するといったことが普通だった。Androidでは、実機で動かすときにもデバッガが使えるので、エミュレーターを使って開発環境のメモリと画面を食うよりも実機で直接開発したほうが楽なくらいだ。iPhoneがアプリの開発にMacが必要で実機で動かすために費用がかかるのとは段違いだ。
端末の普及と開発の容易さから、Androidのアプリケーションは数が増えると思う。Androidのアプリケーションが増えるというのは、Javaのアプリケーションが増えるということでもある。


Androidのプログラムは、サーバーと通信してこそ意味があるといって過言ではない。多くのAndroidプログラムがサーバーと通信する。
このとき、サーバー側とAndroidでプログラム言語が同じほうがいろいろと楽だ。そういうことからサーバー側もJavaを使うということも多くなると思われる。サーバー側とクライアント側でプログラム言語を変える場合は、そのデメリットも考慮しておく必要がある。
また、Androidアプリケーションでの通信は、パソコンをクライアントにした場合に比べて、少量多頻度になることが多くなると思われる。端末の数も比較的多くなる。人間の操作ではなく、機械的に通信することも増える。たとえば、GPSの情報を1分置きにサーバーに送るという具合に。
そうなると、サーバーをスケールアウト可能なクラウド環境に置く必然性も出る。

ハブ言語としてのJava

もちろん、Java VMで動くからといって必ずしもJava言語が採用されるわけではない。
そうだとしても、Java言語はJavaVMにとっての高機能アセンブラであり、Java VMにとって一番自然な言語だ。スピードが求められる部分、いろいろなアプリケーションで使われる共通ライブラリなどは、Java言語で書かれることが多いと思われる。
Javaの価値があがっていくというのは、Java VMで動くプログラムが多くなり、Java言語がほかのプログラム言語とのハブとしての価値を持ち出していくことでもある。

まとめ

このように、Javaクラウドホスティングスマートフォンといった今までになかった実行環境を持ち、Java言語がいろいろなプログラム言語とのハブという役割を持ってくるということから、Javaの価値があがっていくのではないかと考えている。