Javaはクラウドのプラットフォームになり得るのか小山博史のJavaを楽しむ(11)(1/2 ページ)

教育界、技術者コミュニティでJava言語の教育と啓蒙に長年携わってきた筆者が、独自の視点からJavaの面白さを掘り下げていく。(編集部)

» 2008年10月30日 00時00分 公開
[小山博史,株式会社ガリレオ]

 ここのところJavaの世界でも、「クラウドコンピューティング(cloud computing)」という用語が使われることが多くなって、注目されています(参考:他社にないピースを持つ:Sun、総合的クラウドを提案)。

 2007年のJavaOneの記事である「Sun、Javaモバイルデバイス展開をブレイ氏語る」「『Javaに並列処理と関数型言語の要素を』、ティム・ブレイ氏」を読んでみると分かるように、サン・マイクロシステムズでは、Atomの推進やJava VMによるJava以外の言語のサポート、並列プログラミングのサポートなどを推進していましたが、2008年はクラウドコンピューティングを前面に出してきました。今回は、Javaについて、クラウドコンピューティングという視点から見直してみることにしました。

「クラウドコンピューティング」は定義がモヤモヤ

 「“クラウドコンピューティング”という用語を初めて聞いた」という読者もいるかもしれませんが、ネットワーク技術の解説書などでは、インターネットを表すのに雲(クラウド、cloud)がよく使われていることを知っていれば、クラウドコンピューティングとは何か、なんとなく分かるはずです。@IT情報マネジメント用語事典によると、クラウドコンピューティングは、次のように説明されています。

 最近出てきた用語だから、いろいろな解釈がありそうですが、ものすごく単純に表現すると「クラウドコンピューティングとは、インターネットに接続されているコンピュータと、そのコンピュータが提供するデータ、サービスを利用して計算をする」ということです。

 「ニュースサイトが提供するニュースデータを集めて、興味のあるものだけを抽出するフィルタリング処理を施して、情報を公開する」という処理は、クラウドコンピューティングの単純な例だといってよいでしょう。ニュースサイトが提供するニュースデータのように、現在のインターネットではさまざまなデータが利用できます。そういったデータを利用して、ユーザーが必要とするサービスを提供するために、インターネットに接続されているコンピュータを利用するわけです。

すべては雲の中に?

 2007年の記事ですが、「Text of Wired's Interview with Google CEO Eric Schmidt」を読むと、Google CEOのEric Schmidt氏は、「これからは、データもアプリケーションもクラウド(インターネット)上にあり、ユーザーは常にオンラインでそれらにアクセスできる」といった趣旨の発言をしています。クラウドという単語に注目すると、「サービスを提供しているサーバが実際はどれなのか」「提供されているデータはどこに保存されていたものなのか」といった情報は、「もはや雲に隠れて分からない」という状態を表現しているともいえます。

 先ほどの例に出したニュースデータが、ニュースサイトから来たデータであるという事実は、フィルタリング処理をされた後では分かりにくくなっているでしょう。クラウドコンピューティングの世界では、ハードウェアがどこにあり、処理はどこでされたのか、といったことを気にすることなくユーザーが使えるといわれています。

あなたの端末も雲の一部

 ここで、個人的な見解ですが、「ユーザーがサービスを利用しようとしてクラウドへ接続する端末も、ほかのユーザーからはクラウドコンピューティングを担う1つのノードとなる」ということも、クラウドコンピューティングの重要なポイントとして考えてもいいのではないかと思います。「ユーザーが利用する端末は、単なるクライアントではなく、クラウドを構成する1つの要素だ」という意見です。

 例としては「クラウドに接続するビデオカメラ機能付き携帯電話」などがすぐに思い付きます。この装置は、普段はクラウドに接続してインターネット電話として使うことができます。ビデオカメラ機能を使うときは、クラウドにある自分の動画配信システムへデータを提供する装置となります。クラウドに接続して、電話サービスを利用しながら、動画配信することもできるでしょう。

AndroidがJavaのWebサーバに?

 システムに対してデータを提供する機能が端末に付くということは、端末でもサーバ機能が必要です。世の中では、同じように考える人がいるようで、「i-jetty」というGoogle Android上でサーブレットJSPコンテナを同梱させたWebサーバを動作させるプロジェクトがあったりします。

 どれくらい実用性があるのかは実機や具体的な利用方法が決まらないと分かりませんが、筆者としては注目をしています。

雲はライセンスに影響も

 ちなみに、クラウドコンピューティングが実現される世界では、データやアプリケーションのライセンスはどうなるのか気になるところですが、「オープンソースとクラウドコンピューティング | WIRED VISION」といった記事を読むと、ソフトウェアライセンスの在り方も影響を受けそうだということが分かります。興味深い話ですが、本題から外れますので、ここでは技術的な面のみを取り上げることにします。

Javaと雲の前線

 クラウドコンピューティングそのものについては、これぐらいにして、技術者の皆さんが興味を持っているクラウドコンピューティングに関係する技術について考えてみたいと思います。

 「サーバ上で動作する」「Linux上で動作する」といった実装も重要ですが、これからは、「クラウドの中で動作させる」「クラウドを通じてユーザーに利用してもらう」といった視点から、ソフトウェアやサービスを考える必要があるからです。こういった視点で「今後のJavaを取り巻く世界がどうなっていくのか」を見ていけば、注目すべき技術もキャッチしやすくなるでしょう。

 「サン・マイクロシステムズでは、Atomの推進、Java VMによるJava以外の言語のサポート、並行処理プログラミングのサポート、といったことを推進しようとしていた」と最初の方で書きましたが、それぞれの個別の話を、クラウドコンピューティングをキーワードとしてつなぎ合わせてみましょう。意外といろいろと思い付いて面白くなってくるはずです。

Atomとクラウド

 まずAtomですが、これはクラウド内でのコンテンツデータの情報を交換したり、コンテンツ編集を行うために利用されます。Atomに含まれるAtomPub(Atom PP、Atom Publishing Protocol)は、RESTアーキテクチャに準拠していて、エントリポイントとなるURIへアクセスすると、編集のためのURIやほかのリソースへのURIが含まれています(参考:はてなダイアリーがAtomPub対応のAPIを公開)。

 そのため、ユーザーはそれをたどるだけで、コンテンツを参照したり、操作するといった目的を達成できます。クラウドコンピューティングの世界実現に使える技術です。

「Java VMによるJava以外の言語のサポート」とクラウド

 「Java VMによるJava以外の言語のサポート」ですが、この狙いは何でしょうか。

 クラウドコンピューティングを行うに当たっては、さまざまなプラットフォームで稼働するソフトウェアを連携させて処理を実行する必要があります。ですから、WindowsでもLinuxでもMac OS Xでも動くようにするというのが理想的です。Javaはサーバサイドでは大きな成功を収めることができました。しかし、プラットフォームであるJava VMを見ると、デスクトップマシンや携帯電話での存在感はまだまだです。

 ここで、Java VMが「Write once, run anywhere」という理想を実現し、クラウドコンピューティングの世界で主流となるためにはどうすればいいでしょうか? やはり、クラウドコンピューティングのプラットフォームとなるためには、主流となるプログラミング言語であるJava以外にも、プログラミング言語をたくさんサポートして、Java VMで動作するアプリケーションを開発する開発者を増やすという必要があるでしょう。インターネット時代のプラットフォームとして成功しているUNIX系のOSを考えてみると、分かりやすいかもしれません。

 UNIX系のOSでは、プログラミング言語C/C++が主流ですが、そのほかの言語もたくさんサポートされていて動作しています。プラットフォームとして成功するためには、そのうえキラーアプリケーションが必要であり、それを開発するための基盤でないといけません。

 Java VMによるJava以外の言語サポートは.NETへの対抗という意味合いもあるのでしょうが、クラウドコンピューティングのプラットフォームとしてJavaが使えるということから力を入れているとも考えられます。

 UNIX系OSとC/C++はペアで普及しましたが、このプラットフォーム上で稼働する多くのスクリプト言語が誕生しました。それらのスクリプト言語が使えるということで、UNIX系OSを利用するというユーザーが増え、ますますUNIX系OSとC/C++が普及したわけです。同じようにJava VMとJavaがペアで普及していますから、このプラットフォーム上で稼働するスクリプト言語が増えれば、Javaを利用するユーザーがますます増える可能性が高くなるのではないでしょうか。

並行処理プログラミングとクラウド

 最後に「並行プログラミングのサポート」ですが、これもクラウドコンピューティングに要求される並行処理プログラムを効率よく開発できる方法をサポートする、と考えると関係が見えてきます。

 並行処理は、一般的には1台のマシンにある複数のCPUを効率よく使用して処理をするための方法ですが、この方法がより研究されると、複数台のマシンが協調動作して処理を行う分散処理へも適用できる技術も発展するはずです。

  次ページでは、実際にJavaアプリケーションを動かすための仮想/レンタルサーバ「Amazon EC2」「Morph AppSpace」などを紹介し、仮想マシンとクラウドの関係について触れます。

       1|2 次のページへ

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。