「Rust」「Go」「TypeScript」などのプログラミング言語はクールだが、「COBOL」や「Java」などはつまらない言語とされている。しかし、米国時間5月23日に30周年を迎えたJavaは、最も刺激的な言語ではないとしても、現在使われている中で最も重要な言語の1つであり続けている。
Sun Microsystemsが1995年5月23日にリリースしたときは、家電製品向けのニッチなプロジェクトだったJavaが、エンタープライズ、クラウド、ウェブ開発を支える世界的な言語へと進化した歩みは、先見性と適応力の物語だ。
Javaは30周年を迎えたばかりだが、実際の歴史はもっと長い。そのルーツは1991年までさかのぼる。SunのエンジニアだったJames Gosling氏、Mike Sheridan氏、Patrick Naughton氏が、インタラクティブテレビや組み込み型デバイス向けの言語の開発に乗り出したときのことだ。「Green Project」と呼ばれたこの取り組みは、新しい言語を作るというより、今で言うモノのインターネット(IoT)コントローラーのようなものを開発することが目的だった。初期のJava開発者の1人だったTim Lindholm氏はこれを「大型の携帯情報端末(PDA)と超高性能なリモコンを組み合わせたようなデバイス」と説明している。
この「Star7」というデバイスは、「SPARC」プロセッサーをベースとしたハンドヘルド型のワイヤレスPDAで、5インチのカラーLCDを搭載していた。残念ながら、当時としてはあまりにも先進的で高額だったため、市場で受け入れられなかった。
しかし、Javaはそうではなかった。「Oak」という名称だった初期のバージョンのJavaは、「C++」スタイルの構文を採用していたが、Gosling氏はOak/Javaについて、「銃とナイフのないC++」だと述べている。なぜC++をそのまま使わなかったのだろうか。Lindholm氏によると、C++では、インターネット上を安全に移動できるアプリケーションを作るという目標に合わなかったからだ。「少なくともC++では、アプリケーションを異なるアーキテクチャーで動作させるのが難しい。また、プログラミングが非常に困難で、われわれがターゲットとしていた経験の浅いプログラマーでは手に負えないと感じていた」(Lindholm氏)
Javaに対するGosling氏のビジョンには、自動メモリー管理(ガベージコレクション)が含まれていた。ガベージコレクションにより、C++の手動メモリー管理で発生しがちなエラーやセキュリティ脆弱(ぜいじゃく)性を軽減できる。同氏はまた、C++のコードはプラットフォームごとにコンパイルする必要があるが、Javaは「一度書けば、どこでも動く」という理念をJava仮想マシン(JVM)によって実現し、移植性が高いプラットフォーム非依存の言語になった、と指摘する。
どれも非常に素晴らしい利点だが、失敗した家電製品プロジェクト用に設計された言語に、別の用途などあるのだろうか。幸いなことに、Gosling氏とそのチームがJavaの開発を終えようとしていた時期は、ワールドワイドウェブ(WWW)の一般公開が始まった1993年だった。Javaは適切な言語であることを適切なタイミングで証明した。
この言語の特徴であるプラットフォーム非依存性は画期的だった。OSごとにコードを書き直す必要がある他の言語と異なり、Javaで書かれたプログラムはバイトコードにコンパイルされ、JVMを搭載したあらゆるデバイスで動作する。この「一度書けば、どこでも動く」という理念により、Javaはすぐにウェブアプレットでよく使われる言語になり、その後エンタープライズアプリケーションでも使用されるようになった。
Gosling氏は1995年、Javaの有用性を示すために、「WebRunner」というブラウザーを公開した。このプロトタイプのウェブブラウザーは、商業的には成功しなかったが、Javaアプレットを組み込んだHTMLコンテンツをウェブブラウザーで表示できることを実証した。
そこからJavaは軌道に乗った。まず、WebRunnerが「HotJava」になり、その後Javaのホームウェブサイトである「java.sun.com」が正式に公開された。Sunは商標の問題でOakという名称を使えなかった。チームは長期にわたり議論を重ねて、大好きな飲み物であるコーヒーにちなんで、英語の俗語でコーヒーを意味するJavaという名前を選んだ。
Javaは急速に進化した。最初の大きな変化は、1997年の「Java Development Kit 1.1」のリリースだった。このバージョンで導入された「JavaBeans」により、オブジェクト指向プログラミングが開発者にとって格段に容易なものになった。また、「Java Database Connectivity」(JDBC)も追加された。このJavaの標準アプリケーションプログラミングインターフェース(API)を用いることで、Javaプログラムはデータベースにアクセスできる。
1998年に実施されたJavaの変更は、「Swing」ライブラリーの追加だった。これにより、Javaのグラフィカルユーザーインターフェース(GUI)機能、Javaプラグイン、「Java Collections」フレームワークが強化された。最も顕著な変化は、Javaが3つのエディションに分かれたことだろう。汎用デスクトップアプリケーション向けの「J2SE」(「Standard Edition」)、サーバーサイドアプリケーション向けの「J2EE」(「Enterprise Edition」)、モバイルデバイスおよび組み込みシステム向けの「J2ME」(「Micro Edition」)という3つのエディションは、現在も存続している。