「自分はこの技術に詳しい」と思っていても,意外なことを知らなかったり,知識があやふやだったりすることはよくありますよね。ここでは「今さら人に聞くのはちょっと恥ずかしい」という質問に,Javaの達人であるサン・マイクロシステムズの石原氏と日本IBMの米持氏に答えていただきました(編集部)。

Q.1 そもそもJavaって何ですか?

 Javaは「開発言語」だとよく言われます。しかし,単なる開発言語ととらえると誤解を生みかねません。現在では,実行環境,開発環境,ときには開発者コミュニティや独特の文化を含めてJavaと呼ぶことがあるからです。

 Javaはもともと,デジタル家電を制御するための言語として生まれました。米Sun Microsystemsが1991年に極秘で立ち上げたGreen Projectが生み出したOakというプログラミング言語がそれです*1。このOakが後にJavaと名前を変えました。Oak自体は家電制御用の技術として花開くことはありませんでした。ただ,開発が容易なアーキテクチャ,ネットワークへの対応,プラットフォームに依存しないといった特徴は,当時爆発的な活況を見せ始めていたWebの世界に適したものでした。

 Javaが注目を集めるようになったきっかけは,当時メジャーなWebブラウザだったNetscape Navigatorが1995年にJavaの組み込みを発表したことでした。「アプレット」と呼ぶJavaのプログラムをブラウザ上で動作させることにより,動きのあるWebページを表示できるようになったのです。

 現在では,パソコンやサーバーのほか,ICカード,携帯電話など,多くのプラットフォームでJavaのアプリケーションが動作しています。Javaアプリケーションの開発者は,全世界で400万人を超えると言われており,世界で最も人気のある開発技術の一つと言っていいでしょう。

 一企業であるSunのプロジェクトで誕生したJavaですが,現在の開発や仕様策定には,多くの企業,コミュニティ,個人がかかわっています。Javaにかかわる開発者はオープン技術やベンダー非依存への指向が強いと言われており,独自の文化を形成しています。Javaとは,これらを含む開発技術の総称ととらえるのが無難な解釈でしょう。(石原)


Q.2 Javaの名前の由来は?

 Q.1にあるように,JavaはもともとOakという名前で呼ばれていました。しかし,Oakという名称は当時すでに商標登録されていたため,正式リリースのために別の名前が必要になりました。そこで1995年初頭,米Sun MicrosystemsのOakチームのメンバー全員が集まり,新しい名前を考え出すことになったのです。

 様々な候補が挙がった中で,商標登録されていない名称はSilk,DNA,Javaの三つでした。Javaという名前は必ずしも一番人気ではありませんでした。しかし最終的にチーム内の投票でJavaが選ばれました。当時のSunのマーケティング部門はWebにちなんだ名前を望んでいたようですが,James Gosling氏などの旧Oakチームのメンバーは,ソースコードを即座に書き換え,Javaという名称で既成事実を作ってしまったようです。

 もっとも,誰が最初にJavaという名前を言い出したかは,定かではありません。開発メンバーのChris Warth氏がいつもPeet'sコーヒー*2のカップを持ち歩いていて,その日も会議に持ち込んでいたのがきっかけだという説が有力とされています*3。いずれにせよ,コーヒー豆のJavaから名付けられたことは間違いないでしょう。(石原)


Q.3 Javaのプログラムはどうやって動かすのですか?

図1●Javaのプログラムを実行させる手順

 Javaのソースコードは,「.java」という拡張子が付いたファイルに保存します。このファイルを通常,Javaファイルと呼びます。このJavaファイルをJavaコンパイラでコンパイルすることで,中間言語(バイトコード)で記述された,拡張子が「.class」のファイルができます。これをクラス・ファイルと呼びます。Javaの実行環境は,このクラス・ファイルを解釈して実行します(図1[拡大表示])。

 これらの作業をコマンドライン環境で行うときには,まずテキスト・エディタなどを使ってソースコードを記述します。これを例えば,HelloWorldApp.javaといった名前のJavaファイルとして保存します。コンパイルするには

javac HelloWorldApp.java

と入力します。その結果,クラス・ファイル(HelloWorldApp.class)ができます。これを実行するには,

java HelloWorldApp

と入力します。(石原)


Q.4 Java実行環境の「仮想マシン」ってどんなものですか?

 C/C++言語のソースコード・ファイルをコンパイルして作成した実行用ファイルは,ターゲットのOS上で直接動作させられます。これに対してJavaは,ソースコードをコンパイルして作成したクラス・ファイルをOS上で直接実行させることができません。Javaのクラス・ファイルを実行させるための環境を提供するのが,Java仮想マシン(Java Virtual Machine,以下JVM)というソフトウエアです。

 JVMは,Windows用,Linux用といったようにコンピュータのOSごとに用意されています。JVMがOSごとの違いを吸収してくれるため,同じクラス・ファイルがどのOSでも動作します。Javaのこうした特徴を「Write Once,Run Anywhere(1度書けば,どこでも動く)」と呼びます。

 パソコンやサーバー以外にもJVMは用意されています。小さなところでは,スマート・カードと呼ばれるICカード上のチップ,携帯電話,携帯情報端末(PDA),カーナビゲーション・システム,業務用コピー機,大きなところでは,発電所の監視システム,メインフレームなどで,それぞれのプラットフォーム向けのJVMがあります。(石原)


Q.5 J2SEやJ2EEって何ですか?

 現在,Java技術は,大きく分けて3種類のプラットフォーム向けに区別されています。小型端末向けの「Java 2 Platform,Micro Edition(J2ME)」,主にパソコンがターゲットの「Java 2 Platform,Standard Edition(J2SE)」,企業システムなどのサーバー向けの「Java 2 Platform,Enterprise Edition(J2EE)」です。ただし,これらは2005年6月に名称が変わりました。それぞれ,「Java Micro Edition(Java ME)」「Java Standard Edition(Java SE)」「Java Enterprise Edition(Java EE)」が今後は正式名称になります。

 三つの中で,標準的な仕様がJava SEです。Java EEは実行環境としてJava SEを必要とします。Java MEの中にはJava SEと同じJVMを使う「Connected Device Configuration(CDC)」と,Java SEよりも機能を制限したJVMを使う「Connected Limited Device Configuration(CLDC)」があります。

 Java EEとJava SEはバージョン番号が統一されています。Java EE 5に必要な環境はJava SE 5といったように,基本的に同じバージョン同士で動作します。(石原)