なぜ、Javaの目標は10日のやっつけ仕事で作られたJavaScriptに全部奪われたのか?
はじめに
1990年代半ば、インターネットの黎明期に登場した二つの言語、JavaとJavaScriptは、どちらも「どこでも動く」という夢を背負っていました。
Javaは「Write Once, Run Anywhere(WORA)」のスローガンを掲げ、基幹システムから教育現場に至るまで幅広く採用されました。一方のJavaScriptは、わずか10日で生まれた「ブラウザ用おまけスクリプト」に過ぎませんでした。
しかし30年後、真に「事実上のWORA」を実現したのはJavaではなくJavaScriptでした。なぜこの逆転が起こったのか。その歴史的経緯を主要プレイヤーの動向を踏まえて追っていきます。
Javaの誕生と理想
Javaは1991年、Sun MicrosystemsのJames Goslingを中心とするGreen Projectから生まれました。当初は「Oak」と呼ばれ、家電や組み込み機器向けのプログラミング言語を目指していました。C++の煩雑さを避け、シンプルで安全な文法を備え、ネットワークを前提に設計されたのが特徴です。
その後、インターネットが急速に普及し始めた1994年頃に方向転換し、Webブラウザ上で動作する「アプレット」として注目を集めます。Sunはこの転換を追い風に、Javaを「ネットワーク時代の共通言語」として大々的に売り出しました。ここから「Write Once, Run Anywhere」という理想が前面に掲げられるようになったのです。
JavaScriptの誕生と戦略的改名
1995年、Netscape CommunicationsはWebページに動きを与えるため、新しいスクリプト言語をブラウザに組み込みました。開発者Brendan Eichがわずか10日で書き上げたこの言語は、当初「LiveScript」と呼ばれていました。
しかしNetscapeはマーケティング上の理由で、当時急速に注目されていたJavaにあやかって「JavaScript」と改名しました。実際には全く別物であったにもかかわらず、その名前は利用者の心理に大きく作用しました。皮肉なことに、この便乗戦略が後にJavaScriptを飛躍させ、Javaを押しのける契機となったのです。
Javaの黄金期とIBMの後押し
Javaの普及を決定づけたのはIBMをはじめとする大企業の後押しでした。IBMはWebSphereやLinuxサーバー群でJavaを全面採用し、さらにEclipseをオープンソース化して開発環境を整備しました。これによりJavaは「安心して導入できる標準技術」としての地位を固めました。
この時期、JavaはServletやJSPによるWebアプリ開発、J2EEによる分散システム、そしてAndroidによるモバイル開発にまで広がり、「エンタープライズの万能言語」として君臨しました。
Sun Microsystems自身は「The Network is the Computer」という壮大な理念を掲げながらも経営基盤が脆弱で、やがて体力が尽きていきました。そして2010年、SunはOracleに買収されます。
Microsoftと.NET戦略
Javaが勢いを増していた1990年代後半、Microsoftはその脅威を強く意識しました。当初はVisual J++という独自拡張版Javaを提供し、Windows向けに最適化しようとしました。しかしSun Microsystemsは「Javaの互換性を壊した」として訴訟を起こし、結果としてMicrosoftはJ++を放棄することになります。
その後、Microsoftは戦略を転換し、自前のC#と.NET Frameworkを開発しました。.NETはWindowsアプリ開発を全面的に支える基盤となり、JavaがWindowsの世界で主役となる道は閉ざされました。
さらに.NETは時を経て.NET Core、そして現在の統合.NETへと進化し、クロスプラットフォーム対応を果たしました。しかしそれはJavaの「WORA」を補完するものではなく、あくまでMicrosoft流の囲い込み戦略でした。結果的に、Windowsアプリ開発はC#に収斂し、JavaはMicrosoft陣営では決して中心にはなれなかったのです。
Oracle買収と保守モードへの転換
OracleはJavaを「新しい市場を切り拓く旗手」としてではなく、「既存顧客から収益を得る安定資産」として扱いました。ライセンス体系の変更や企業顧客向けサポート強化が進む一方で、言語仕様やエコシステムの革新スピードは鈍化しました。
その間に、モバイルとクラウドという新しいフロンティアでは、他のプレイヤーが次々と主導権を握っていきました。Javaは「守りの技術」となり、新たな領域を牽引する役割を失っていったのです。
GoogleとAndroid、AppleとObjective-C
Googleはスマートフォン時代の覇権を狙い、Androidを開発しました。彼らは「Javaソースの開発体験」は利用しつつも、JVM互換ではない独自のDalvik VM(のちにART)を採用しました。これはSun MicrosystemsやOracleにライセンス料を払わずに済む仕組みであり、Javaの影響力を巧妙に切り離すものでした。表面的にはJava言語が使われていましたが、裏側は完全にGoogleのコントロール下にある独自エコシステムとなったのです。
一方でAppleは、iPhone登場時にJavaを徹底的に拒否しました。理由は明確で、OracleやSun Microsystemsに依存するリスクを嫌ったからです。彼らはNeXT由来のObjective-Cを採用し、自前のSDKでアプリエコシステムを作り上げました。後にSwiftへと進化しますが、その基本方針は「外部の言語に依存しない」ことにありました。これによりJavaは「モバイルの共通言語」というチャンスを完全に失ったのです。
重量級の時代 ― Javaと2000年代の潮流
2000年代初頭、企業システム開発の現場では「確実さ」と「形式知化」が最重要視されていました。そこに適合したのがJavaです。
プロセス面ではRUP(Rational Unified Process)やCMMI(能力成熟度モデル)が推奨され、仕様を文書化し、工程を厳格に管理することが重視されました。技術面ではXMLが標準的なデータ交換フォーマットとなり、SOAPベースのWebサービスが「企業間システム統合の解法」とされました。
Javaはこうした重量級の思想と歩調を合わせ、J2EEを中核にエンタープライズの世界を支配しました。EJB(Enterprise JavaBeans)や巨大なアプリケーションサーバー群は、まさに「重量トレンドの申し子」だったのです。
軽量級の時代 ― JavaScriptと2010年代の潮流
2010年代に入ると、世界は一転して「軽量化」へと傾きました。スマートフォンの普及とクラウドの勃興が背景にあります。
開発プロセスではスクラムを中心としたアジャイル手法が主流となり、重いドキュメントや認証プロセスよりも動くソフトウェアと柔軟なチームワークが重視されました。技術面ではJSONがXMLに取って代わり、REST APIがSOAPを駆逐しました。
JavaScriptはまさにこの軽量化の波に乗りました。2000年代半ばのAjax(Asynchronous JavaScript + XML)は、ブラウザ上で非同期通信を行いながら画面を動的に更新できる技術で、GmailやGoogle MapsのようなリッチなWebアプリを可能にしました。2010年前後にはHTML5の標準化が進み、動画再生やCanvas描画、オフラインストレージなどがJavaScriptから直接利用できるようになり、FlashやSilverlightといった専用プラグインを駆逐しました。
決定打は2015年のECMAScript 6(ES6)です。クラス構文、モジュール、アロー関数、Promiseなどが導入され、JavaやC#に慣れたエンジニアにも受け入れやすい言語へと進化しました。
さらに2008年のGoogle V8エンジンによる高速化、2009年のNode.jsによるサーバー進出、2012年のMicrosoft TypeScriptの登場、2015年のVisual Studio Code公開が重なり、JavaScriptはフロントからバックまでを統一できる「軽量トレンドの旗手」として地位を確立したのです。
ゲーム特化型のWORA ― Unity
汎用言語としてのWORAはJavaScriptに奪われましたが、ゲーム分野ではUnityが独自の「限定的WORA」を実現しました。
UnityはC#を使いながらも標準CLRではなく独自ランタイムを採用し、現在はIL2CPPでC#をC++に変換して各プラットフォームに展開します。特にiOSではAppleがJITを禁止していたため、この方式は不可欠でした。これによりUnityはPC、モバイル、家庭用ゲーム機を横断する「ゲーム特化のWORA」を実現しました。
ただしUnityの適用範囲はあくまでゲームに限定され、業務アプリやWebアプリの基盤にはなりませんでした。
Javaの相対的地位低下と「帯に短し襷に長し」
2010年代後半、各言語のポジションは明確になりました。
Goは高速性とシンプルさでクラウド基盤に定着しました。
Ruby on Railsはスタートアップに依然強い存在感を放ちました。
Node.js+TypeScriptはフロントとバックを統一でき、クラウドネイティブに最適な選択肢となりました。
Pythonはデータ分析とAI分野で独占的地位を築きました。
一方のJavaは「何をやらせても致命的にダメではない」が「特定分野で圧倒的に強い」わけでもなくなりました。まさに「帯に短し襷に長し」という存在に収斂したのです。
それでもJavaが消えない理由
しかしJavaがCOBOLのように完全にレガシー化するかといえば、答えは否です。
富士通、NEC、日立といった日本のメインフレーマーは、COBOLをJavaに置き換えることでクラウド時代に顧客をソフトランディングさせました。これは単なる延命ではなく、クラウド対応済みのJavaならではの強みを生かした合理的な選択でした。
COBOLが物理的なメインフレームに縛られていたのに対し、JavaはすでにAWSやGCPといったクラウド基盤で安定稼働できるようになっています。切り捨てるコストが存在せず、わざわざ捨てる必然性がないのです。
さらにJVMの存在もJavaの寿命を延ばしています。KotlinやScalaといった新しい言語が同じ基盤で動作し、資産を無駄にせず移行できる環境を整えています。そのためJavaは「新規開発の主役には戻れない」が「既存資産を支えるインフラ言語」として長く生き続けると考えられます。ある意味で、COBOLよりも幸福な老後を迎えているのです。
まとめ
JavaはSun Microsystemsで「Oak」として誕生し、WORAという理想を掲げてインターネット時代の旗手となりました。IBMの後押しで黄金期を築き、RUPやCMMI、XMLやSOAPといった重量級の潮流に乗って2000年代を支配しました。
しかしMicrosoftはJavaを拒絶し、C#と.NETで独自路線を歩みました。さらにOracle買収後の停滞、GoogleがDalvik VMでライセンス回避を図ったAndroid戦略、AppleがObjective-Cと自前のSDKで築いたエコシステム、そして世界がスクラムやJSON、RESTといった軽量化へ舵を切ったことにより、Javaは相対的に中途半端な存在へと追いやられました。
一方でJavaScriptは、誕生当初は「ブラウザの付録」に過ぎなかったにもかかわらず、AjaxやHTML5、ES6といった節目を経て進化し、V8やNode.js、TypeScript、Visual Studio Codeといった後押しを受けて大躍進しました。その姿は、かつてIBMの支援を受けて急成長したJavaの軌跡と重なります。
つまり両者は、支援者を得て時代の波に乗ったからこそ成り上がり、支援や革新のタイミングを逃した方が凋落したという点で、同じ歴史のリズムを歩んだのです。
二つの言語の歩みは、技術もまた時代の流れとともに姿を変えていくことを静かに物語っています。それはまるで、移ろいゆく世の常を映す一場面のように感じられます。
Discussion