(1/2)教育界、技術者コミュニティでJava言語の教育と啓蒙に長年携わってきた筆者が、独自の視点からJavaの面白さを掘り下げていく。computing)」という用語が使われることが多くなって、注目されています(参考:他社にないピースを持つ:Sun、総合的クラウドを提案)。VMによるJava以外の言語のサポート、並列プログラミングのサポートなどを推進していましたが、2008年はクラウドコンピューティングを前面に出してきました。今回は、Javaについて、クラウドコンピューティングという視点から見直してみることにしました。「クラウドコンピューティング」は定義がモヤモヤ「“クラウドコンピューティング”という用語を初めて聞いた」という読者もいるかもしれませんが、ネットワーク技術の解説書などでは、インターネットを表すのに雲(クラウド、cloud)がよく使われていることを知っていれば、クラウドコンピューティングとは何か、なんとなく分かるはずです。@IT情報マネジメント用語事典によると、クラウドコンピューティングは、次のように説明されています。kwout最近出てきた用語だから、いろいろな解釈がありそうですが、ものすごく単純に表現すると「クラウドコンピューティングとは、インターネットに接続されているコンピュータと、そのコンピュータが提供するデータ、サービスを利用して計算をする」ということです。「ニュースサイトが提供するニュースデータを集めて、興味のあるものだけを抽出するフィルタリング処理を施して、情報を公開する」という処理は、クラウドコンピューティングの単純な例だといってよいでしょう。ニュースサイトが提供するニュースデータのように、現在のインターネットではさまざまなデータが利用できます。いったデータを利用して、ユーザーが必要とするサービスを提供するために、インターネットに接続されているコンピュータを利用するわけです。Schmidt氏は、「これからは、データもアプリケーションもクラウド(インターネット)上にあり、ユーザーは常にオンラインでそれらにアクセスできる」といった趣旨の発言をしています。クラウドという単語に注目すると、「サービスを提供しているサーバが実際はどれなのか」「提供されているデータはどこに保存されていたものなのか」といった情報は、「もはや雲に隠れて分からない」という状態を表現しているともいえます。先ほどの例に出したニュースデータが、ニュースサイトから来たデータであるという事実は、フィルタリング処理をされた後では分かりにくくなっているでしょう。クラウドコンピューティングの世界では、ハードウェアがどこにあり、処理はどこでされたのか、といったことを気にすることなくユーザーが使えるといわれています。あなたの端末も雲の一部ここで、個人的な見解ですが、「ユーザーがサービスを利用しようとしてクラウドへ接続する端末も、ほかのユーザーからはクラウドコンピューティングを担う1つのノードとなる」ということも、クラウドコンピューティングの重要なポイントとして考えてもいいのではないかと思います。「ユーザーが利用する端末は、単なるクライアントではなく、クラウドを構成する1つの要素だ」という意見です。例としては「クラウドに接続するビデオカメラ機能付き携帯電話」などがすぐに思い付きます。この装置は、普段はクラウドに接続してインターネット電話として使うことができます。ビデオカメラ機能を使うときは、クラウドにある自分の動画配信システムへデータを提供する装置となります。クラウドに接続して、電話サービスを利用しながら、動画配信することもできるでしょう。AndroidがJavaのWebサーバに?システムに対してデータを提供する機能が端末に付くということは、端末でもサーバ機能が必要です。Android上でサーブレット/JSPコンテナを同梱させたWebサーバを動作させるプロジェクトがあったりします。kwoutどれくらい実用性があるのかは実機や具体的な利用方法が決まらないと分かりませんが、筆者としては注目をしています。VISION」といった記事を読むと、ソフトウェアライセンスの在り方も影響を受けそうだということが分かります。興味深い話ですが、本題から外れますので、ここでは技術的な面のみを取り上げることにします。Javaと雲の前線クラウドコンピューティングそのものについては、これぐらいにして、技術者の皆さんが興味を持っているクラウドコンピューティングに関係する技術について考えてみたいと思います。「サーバ上で動作する」「Linux上で動作する」といった実装も重要ですが、これからは、「クラウドの中で動作させる」「クラウドを通じてユーザーに利用してもらう」といった視点から、ソフトウェアやサービスを考える必要があるからです。いった視点で「今後のJavaを取り巻く世界がどうなっていくのか」を見ていけば、注目すべき技術もキャッチしやすくなるでしょう。VMによるJava以外の言語のサポート、並行処理プログラミングのサポート、といったことを推進しようとしていた」と最初の方で書きましたが、それぞれの個別の話を、クラウドコンピューティングをキーワードとしてつなぎ合わせてみましょう。意外といろいろと思い付いて面白くなってくるはずです。AtomとクラウドまずAtomですが、これはクラウド内でのコンテンツデータの情報を交換したり、コンテンツ編集を行うために利用されます。Protocol)は、RESTアーキテクチャに準拠していて、エントリポイントとなるURIへアクセスすると、編集のためのURIやほかのリソースへのURIが含まれています(参考:はてなダイアリーがAtomPub対応のAPIを公開)。そのため、ユーザーはそれをたどるだけで、コンテンツを参照したり、操作するといった目的を達成できます。クラウドコンピューティングの世界実現に使える技術です。VMによるJava以外の言語のサポート」ですが、この狙いは何でしょうか。クラウドコンピューティングを行うに当たっては、さまざまなプラットフォームで稼働するソフトウェアを連携させて処理を実行する必要があります。Xでも動くようにするというのが理想的です。Javaはサーバサイドでは大きな成功を収めることができました。VMを見ると、デスクトップマシンや携帯電話での存在感はまだまだです。VMで動作するアプリケーションを開発する開発者を増やすという必要があるでしょう。インターネット時代のプラットフォームとして成功しているUNIX系のOSを考えてみると、分かりやすいかもしれません。UNIX系のOSでは、プログラミング言語C/C++が主流ですが、そのほかの言語もたくさんサポートされていて動作しています。プラットフォームとして成功するためには、そのうえキラーアプリケーションが必要であり、それを開発するための基盤でないといけません。VMによるJava以外の言語サポートは.NETへの対抗という意味合いもあるのでしょうが、クラウドコンピューティングのプラットフォームとしてJavaが使えるということから力を入れているとも考えられます。UNIX系OSとC/C++はペアで普及しましたが、このプラットフォーム上で稼働する多くのスクリプト言語が誕生しました。それらのスクリプト言語が使えるということで、UNIX系OSを利用するというユーザーが増え、ますますUNIX系OSとC/C++が普及したわけです。VMとJavaがペアで普及していますから、このプラットフォーム上で稼働するスクリプト言語が増えれば、Javaを利用するユーザーがますます増える可能性が高くなるのではないでしょうか。並行処理プログラミングとクラウド最後に「並行プログラミングのサポート」ですが、これもクラウドコンピューティングに要求される並行処理プログラムを効率よく開発できる方法をサポートする、と考えると関係が見えてきます。並行処理は、一般的には1台のマシンにある複数のCPUを効率よく使用して処理をするための方法ですが、この方法がより研究されると、複数台のマシンが協調動作して処理を行う分散処理へも適用できる技術も発展するはずです。AppSpace」などを紹介し、仮想マシンとクラウドの関係について触れます。メールマガジンをご購読ください。申し込みページへITmediaはアイティメディア株式会社の登録商標です。