📓

なぜ、JavaはWORAの思想から始まり、ただのCOBOL置換え言語に行き着いたのか?

に公開

はじめに

1990年代半ば、インターネットの爆発的普及を前に「どこでも動く共通言語」を掲げて登場したのがJavaでした。C++の複雑さを避け、仮想マシン上で動かすことでハードウェアやOSに依存しない実行環境を実現する――それが「Write Once, Run Anywhere(WORA)」の思想です。

この思想は、当時のソフトウェア業界にとって大いなる希望でした。ハードウェアやOSの違いに苦しめられていた開発者たちにとって、Javaは「共通言語」の夢を具体的に提示した存在でした。

しかし、その後30年を経て、Javaは「新しい言語の旗手」ではなく「COBOLを置き換える安定技術」としての役割に収斂していきます。本稿では、その歴史的経緯を主要な企業の思惑や技術潮流の変化とともにたどり、なぜ理想が変質していったのかを描きます。

Javaの誕生と理想

Javaは1991年、Sun MicrosystemsのJames Goslingらが中心となったGreen Projectから誕生しました。当初は家電や組み込み機器向けを想定した「Oak」という言語でしたが、インターネットの勃興に合わせてWebアプレットへと方向転換します。

1995年、正式にJavaとして公開されると、そのキャッチコピーは「Write Once, Run Anywhere」。JVM(Java Virtual Machine)上で動かすことで、どのOSでも同じコードが動作するという触れ込みは当時として革命的で、Sunは「ネットワークこそがコンピュータ」という理念とともにJavaを世界に広めました。

Javaの黄金期とIBMの後押し

Javaの普及を決定づけたのはIBMでした。IBMは自社のWebSphereやLinuxサーバー群にJavaを全面採用し、Eclipse IDEをオープンソース化することで開発環境を強力に整備しました。これにより、Javaは「安心して導入できる標準技術」としての地位を確立します。

2000年代にはServletやJSP、J2EEが整備され、銀行・官公庁・製造業といった基幹システムで広く採用されました。まさに「21世紀のCOBOL」としての道を歩み始めたのです。

Microsoftと.NET戦略

一方で、MicrosoftはJavaを脅威と捉えました。当初はVisual J++という独自拡張版を提供しましたが、Sun Microsystemsから「互換性を壊した」と訴訟され、撤退に追い込まれます。

そこでMicrosoftはC#と.NET Frameworkを開発し、Windows専用の強力な基盤を整備しました。.NETは後にクロスプラットフォーム化されましたが、Javaに代わる「共通言語」ではなく、Microsoft流の囲い込み戦略でした。結果としてWindows開発はC#に収斂し、JavaはMicrosoft陣営での立場を失いました。

Oracle買収と保守モードへの転換

2010年、経営難に陥ったSun MicrosystemsはOracleに買収されました。OracleはJavaを「新しい市場を切り拓く旗手」ではなく、「既存顧客から収益を得る安定資産」として扱いました。

ライセンス体系の変更やサポート強化が進む一方で、革新のスピードは鈍化し、Javaは「守りの技術」となります。その隙を突いてモバイルやクラウドの新領域では他の技術が台頭していきました。

GoogleとAndroid、AppleとObjective-C

モバイル時代においてもJavaは主役にはなれませんでした。

GoogleはAndroidを開発する際、Javaの文法や開発体験は利用しつつも、独自のDalvik VM(後にART)を採用しました。これによりSunやOracleへのライセンス料を回避しつつ、Javaの表面的な姿だけを残す戦略をとったのです。結果として、Javaは「モバイル標準ランタイム」となる機会を失いました。

Appleはさらに徹底していました。iPhone登場時にJavaを拒絶し、NeXT由来のObjective-Cを採用。自前のSDKとApp Storeによる閉じたエコシステムを築きました。後にSwiftに進化しますが、その基本方針は「外部の言語に依存しない」ことにありました。Javaはモバイルの二大勢力から排除されたのです。

重量級の時代 ― Javaと2000年代の潮流

2000年代のJavaは、重量級の開発思想とともに歩みました。

プロセス面ではRUPやCMMIが推奨され、工程を厳格に管理し、仕様を詳細に文書化することが美徳とされました。技術面ではXMLやSOAPが標準となり、EJBや巨大なアプリケーションサーバーが導入されました。Javaはこうした「重量トレンド」の申し子として、エンタープライズシステムを支配しました。

軽量級の時代 ― JSON、REST、そしてJavaScript

2010年代に入ると状況は一変します。スマートフォンとクラウドが普及し、世界は「軽量化」へと傾きました。

プロセス面ではスクラムやアジャイルが主流となり、文書よりも動くソフトウェアと柔軟なチームを重視しました。技術面ではJSONがXMLを駆逐し、RESTがSOAPに取って代わりました。

Ajaxによる非同期通信、HTML5の標準化、2015年のES6の登場といった節目は、軽量技術群を後押しし、Webの主役はJavaではなくJavaScriptに移っていきました。

ゲーム特化型のWORA ― Unity

Unityは「限定的なWORA」を実現した存在です。C#を採用しながらも標準CLRではなく独自ランタイムを使い、iOS向けにはJITが禁止されていたためIL2CPPでC++へ変換する仕組みを導入しました。

これによりUnityはPC、モバイル、家庭用ゲーム機を横断し、ゲーム開発の世界で独自の共通基盤を築きました。ただしあくまでゲーム特化であり、JavaやJavaScriptのような汎用性は持ちませんでした。

Javaの相対的地位低下と「帯に短し襷に長し」

2010年代後半、言語ごとに明確なポジションが確立しました。

Goは高速性とシンプルさを武器にクラウド基盤やマイクロサービスで定着しました。
Ruby on Railsは素早くWebサービスを立ち上げたいスタートアップに依然として強い支持を受けました。
Node.js+TypeScriptはフロントとバックを同一言語で統一でき、クラウドネイティブ環境に最適でした。
Pythonはデータ分析やAI分野で独占的な地位を築きました。

一方のJavaは、依然としてエンタープライズ基幹システムで使われ続けてはいるものの、新規分野においては優位性を発揮できませんでした。「高速化」ではGoやRustに、「素早い開発」ではRubyやNode.jsに、「Webフルスタック」ではTypeScriptに、「AI・データ分析」ではPythonに後れを取りました。

結果としてJavaは「何をやらせても致命的にダメではない」が「特定分野で圧倒的に強い」わけでもない――まさに「帯に短し襷に長し」という立場に収斂したのです。

それでもJavaが消えない理由

では、JavaはこのままCOBOLのように完全にレガシー化していくのでしょうか。答えは否です。

富士通、NEC、日立といった日本のメインフレーマーは、COBOLをJavaに置き換えることでクラウド時代に顧客をソフトランディングさせました。COBOLが物理的なメインフレームに縛られていたのに対し、Javaは既にAWSやGCPといったクラウド基盤で安定稼働できるため、切り捨てる必然性がないのです。

さらにJVMの存在もJavaの寿命を延ばしています。KotlinやScalaといった新しい言語が同じ基盤で動作し、既存資産を無駄にせず進化を取り込める環境を提供しています。これにより、Javaは「新規開発の主役には戻れない」が「既存資産を支えるインフラ言語」として長く生き残ると考えられます。

つまりJavaは、COBOLがたどった「完全なレガシー化」とは異なり、現代的な環境に適応した「しぶとい老後」を歩んでいるのです。ある意味ではCOBOLよりも幸福な余生を過ごしていると言えるでしょう。

まとめ

JavaはWORAという理想を掲げて誕生し、2000年代にはRUPやCMMI、XMLやSOAPといった重量級の潮流に乗って黄金期を築きました。しかし、Microsoftの拒絶、Oracleによる保守化、GoogleとAppleによるモバイル分野での排除、世界的な軽量化の流れによって、主役の座を失っていきました。

そして今、Javaは新規の旗手ではなく、COBOLを置き換える「企業システムの下支え」としての役割に落ち着いています。

その歩みは、技術が時代の波に翻弄され、やがて異なる役割へと収斂していく様を物語っています。Javaは理想の旗手から現実の保守役へと変わりましたが、その変化の軌跡こそ、技術の歴史における必然の一コマといえるでしょう。

Discussion