📓

なぜ、「JavaScript」こそが現在最強のWORA言語なのか?

に公開

はじめに

「Write Once, Run Anywhere(WORA)」という言葉は1990年代にJavaが掲げた理念でした。一度書いたコードが、どんな環境でもそのまま動くという理想は、当時の開発者にとって大きな夢でした。ところが2020年代を迎えた現在、その理念を最も現実的に体現しているのはJavaではなくJavaScriptです。

JavaScriptは1995年に誕生したときには「ブラウザ上の簡易スクリプト」に過ぎませんでした。しかし時代を経るごとに進化し、Webを超えてサーバー、デスクトップ、モバイルへと拡大し、いまや社会全体を支えるプラットフォーム言語となりました。加えてJavaScriptの特異な点は、その進化がGAFAM全員によって後押しされたことであり、この点でJavaの歩んだ道とはまったく異なります。

本稿では、Javaの理念と限界、JavaScriptの誕生と進化の過程、そしてPythonとの比較を含めて、なぜJavaScriptが現代において最強のWORA言語となったのかを詳しく論じます。

JavaのWORA理念と限界

Javaは1995年、サンマイクロシステムズによって発表されました。JavaはJVM(Java Virtual Machine)を利用して実行されるため、OS依存がなく、クロスプラットフォームを掲げた最初の本格的なプログラミング言語でした。「一度書けば、どこでも動く」というWORAのスローガンは業界を熱狂させ、特にサーバー分野では大きな成功を収めました。

しかしクライアント分野では限界がありました。Java Appletはセキュリティ上の問題とパフォーマンス不足からブラウザに嫌われ、ユーザー体験も芳しくありませんでした。JavaFXやSwingも存在感を示しましたが、ネイティブアプリに比べると使い勝手で劣り、広範な普及には至りませんでした。さらにモバイル分野でもJava MEは一時的に携帯電話で用いられましたが、スマートフォン時代にiOSやAndroidに駆逐されました。

また、Javaは2010年にサンがオラクルに吸収され、オラクル中心の戦略へ移行しました。IBM、HP、富士通といった外部企業もJavaを取り込みましたが、あくまで数社主導の閉じたエコシステムにとどまりました。結果として、Javaはサーバー分野限定の成功に留まり、WORAの理念は部分的なものとなったのです。

JavaScript誕生と黎明期

JavaScriptは1995年、Netscape Navigator上で誕生しました。名前こそ「Java」にあやかっていますが、全く異なる言語です。当初の役割はフォーム検証やアニメーションなどの簡易タスクであり、文法もシンプルながら曖昧さが目立ち、大規模開発には不向きと見なされていました。

この言語を設計したのは、当時NetscapeのエンジニアだったBrendan Eichです。驚くべきことに、彼はJavaScriptの最初の実装をわずか10日間で行いました。NetscapeはMicrosoftとのブラウザ戦争を意識しており、短期間で動的なスクリプト言語を搭載する必要に迫られていたためです。そのため、JavaScriptはSchemeやSelfといった関数型・プロトタイプベース言語の要素を取り込みつつ、C言語風の文法をまとうという、寄せ集め的かつ実用最優先のデザインで誕生しました。

マイクロソフトはWindows環境にJavaScriptを持ち込み、WSH(Windows Script Host) を提供しました。これによりシステム管理や自動化でJavaScriptを活用できるようになりましたが、Windows限定であり普遍性はありませんでした。

一方でこの時代、リッチなWeb体験の主役はFlashのActionScriptでした。ActionScriptはJavaScriptに似た文法を持ちつつ、マルチメディア機能を備え、Webゲームや動画配信を支配しました。2000年代前半において「本格的なWebアプリ」を実現していたのはActionScriptであり、JavaScriptは裏方の存在に甘んじていました。

ECMAScript標準化とブラウザ戦争

JavaScriptの方言乱立を防ぐため、1997年にECMAScriptの仕様が策定されました。しかし実装はブラウザごとに異なり、特にInternet Explorerは独自路線を進み、開発者は「どのブラウザで動くか」を常に意識せざるを得ませんでした。この時代のWeb開発は断片化と戦う日々であり、「WORAどころかWODA(Write Once, Debug Anywhere)」と揶揄されたほどです。

それでも重要だったのは、JavaScriptが単一企業の私物ではなく、標準化団体と複数ベンダーによる合意形成の下で育てられた点です。FirefoxやSafari、Chromeの登場で再び競争が起こり、結果としてJavaScriptは改善と進化を続ける道を歩むことができました。

V8エンジンと高速化の革命

2008年、GoogleはChromeとともにV8エンジンを発表しました。JITコンパイルと最適化技術により、JavaScriptはかつての「遅いスクリプト」から「高速実行可能な言語」へと変貌しました。

これによりGmailやGoogle Mapsのような大規模Webアプリケーションが可能になり、Flashを代替していきました。V8は単なるエンジンではなく、JavaScriptを真のアプリケーション基盤に押し上げた存在でした。

AJAXの登場とJSON・RESTの普及

1990年代末、Internet Explorer 5に非公開実装としてXMLHttpRequestが導入され、ページ全体を再読み込みせずバックグラウンド通信が可能になりました。当初のデータ形式はXMLやHTML断片が中心で、JavaScript側はDOM操作や文字列処理で奮闘する必要がありました。

2005年、Jesse James GarrettがAJAX(Asynchronous JavaScript + XML) という呼称を提示し、ページ遷移なしでインタラクティブに更新する技法が一般化しました。jQueryなどのライブラリの普及も相まって、非同期通信は爆発的に広まりましたが、この時代のデータ交換はまだXML主体であり、冗長さやパースの重さが課題でした。

こうした「実装上の痛み」を解決する形で、JSON(JavaScript Object Notation) が台頭しました。JavaScriptオブジェクト表記に直結する軽量フォーマットであり、パースが容易で、通信量も少なく済むため、開発者の負担を大幅に軽減しました。2000年代後半には主要Webサービスが次々にJSON APIを提供し、AJAXでXMLを扱う負担は急速に過去のものとなりました。

並行して、REST(Representational State Transfer)の考え方が広がります。2000年に提唱されてはいたものの、普及の決定打となったのはAJAXの一般化とJSONの浸透でした。SOAPやXML-RPCといった重量級プロトコルに代わり、HTTPメソッドとURIで直感的にリソースを操作するRESTful JSON APIが標準化していきました。

この三拍子がそろったことで、ブラウザとJavaScriptは単なる「表示のための補助スクリプト」から、世界規模の「アプリケーション実行基盤」へと進化しました。そしてその基盤の上に、次章で触れるHTML5の強力な標準仕様が重なり、今日のWebアプリ時代が始まるのです。

HTML5によるWebアプリ基盤の進化

2014年に正式勧告されたHTML5は、Webアプリの可能性を根底から広げました。FlashやSilverlightに依存していた機能が、標準仕様としてJavaScriptと組み合わせて利用できるようになったのです。

  • <canvas>要素による2D描画、WebGLによる3D描画
  • <audio> <video>要素によるメディア再生
  • ローカルストレージやIndexedDBによるオフライン保存
  • WebSocketによる双方向通信
  • WebRTCによるリアルタイム通信
  • Service Workerによるオフライン対応とプッシュ通知

これらにより、Webブラウザは「閲覧の場」から「実行環境」へと進化しました。特にYouTubeがFlashからHTML5へ完全移行したのは象徴的であり、以後JavaScriptとHTML5が「世界共通の実行基盤」として標準化されました。

Node.jsとサーバー進出

2009年に登場したNode.jsは、V8をサーバーに持ち込んだ画期的技術でした。非同期I/Oとイベント駆動アーキテクチャにより、大量の接続を効率的に処理できる軽量サーバー環境が構築可能となりました。フロントとバックエンドをJavaScriptで統一できるというメリットは計り知れず、「フルスタックJavaScript」という概念を生み出しました。

ES6による近代化

2015年のES6(ECMAScript 2015) は、JavaScriptの歴史における決定的なターニングポイントでした。

  • let/constによる変数スコープの明確化
  • アロー関数による簡潔な記法
  • クラス構文の導入
  • モジュールの標準化(import/export
  • Promiseによる非同期処理の整理

これらの新機能により、JavaScriptは「玩具的スクリプト」から「大規模開発にも耐えるモダン言語」へと進化しました。Babelなどのトランスパイラにより後方互換性が担保され、開発者はすぐに新機能を活用できました。

TypeScriptの登場と役割

2012年、マイクロソフトはTypeScriptを公開しました。これはJavaScriptのスーパーセットとして型注釈を導入し、大規模開発での保守性を劇的に改善しました。

TypeScriptの効果は絶大でした。IDE統合により補完やリファクタリングが強化され、エンタープライズ開発でも安心して使えるようになりました。React、Angular、Vueといった主要フレームワークはTypeScriptを前提に進化し、ElectronやReact Nativeといったクロスプラットフォーム基盤でもTypeScriptは標準化しました。

Electronによるデスクトップ展開

ElectronはGitHubが開発したフレームワークで、ChromiumとNode.jsを組み合わせ、Web技術でデスクトップアプリを構築できるようにしました。Slack、Discord、VSCodeといった代表的アプリはElectron製であり、これによって「Web技術だけで業務用の本格アプリが作れる」という常識が広まりました。

しかしElectronの影響は業務ソフトに留まりませんでした。RPGツクールMV(2015年)以降はElectronをベースにしており、現在のPC同人ゲームの主流は事実上Electron上で動いているのです。これにより、従来はWindows専用だったツクール製ゲームがMacやブラウザでも動作可能となり、配布の自由度が飛躍的に高まりました。逆に、実行ファイルサイズがAce時代と比べて大幅に肥大化するという副作用もありましたが、それでもクロスプラットフォーム対応と開発の容易さが優先され、コミュニティはこれを受け入れました。

このようにElectronは「業務アプリ」と「同人ゲーム」という両極端な領域で受け入れられ、Web技術をデスクトップに持ち込む強力な武器として確立したのです。

ReactとReact Nativeの誕生と展開

2013年にFacebookが公開したReactは、Web開発に革命をもたらしました。従来の命令的なDOM操作を捨て、「UIは状態の関数である」 という宣言的アプローチを導入したのです。その中核にある仮想DOM(Virtual DOM) は、UIの更新を仮想的に計算し、実DOMには最小限の差分だけを反映する仕組みで、パフォーマンスを大幅に向上させました。

Reactはさらにコンポーネント指向を徹底しました。UIを小さな部品として分割し、組み合わせることで画面を構築します。この設計は再利用性と保守性を高め、JSX(JavaScript XML)という直感的な記法とあいまって、当初の批判を超えて開発者に広く受け入れられました。Facebook自身がニュースフィードの更新処理で直面した課題を解決するために生まれたことからも、その実用性が伺えます。

2015年にはその思想をモバイルに拡張したReact Nativeが登場しました。従来のCordovaやPhoneGapのようなWebViewベースではなく、JavaScriptで記述したUIをネイティブコンポーネントとして実行する方式を採用し、1つのコードベースでiOSとAndroidの双方に対応可能となりました。Expoや周辺ライブラリの整備により使いやすさも向上し、モバイル開発における事実上の標準となっています。

こうしてReactとReact Nativeは「Webとモバイルを統一するUI基盤」として成長し、JavaScriptをWORA言語として押し上げる強力な推進力となったのです。

GAFAM全員による育成

Javaがサンとオラクルを中心にIBMや富士通など一部企業によって支えられたのに対し、JavaScriptはGAFAM全員が推進しました。

  • GoogleはV8とChromeで高速化を実現
  • MicrosoftはTypeScriptとVSCodeで開発体験を刷新
  • Facebook(Meta)はReactとReact NativeでUIを革命
  • AppleはSafariとWebKitでモバイルWebを牽引
  • AmazonはAWSでNode.jsを標準提供

JavaScriptは単なる言語ではなく、巨大IT企業がそれぞれの利益のために磨き上げた結果、全体として公共財化しました。これがJavaとの決定的な違いです。

Pythonとの比較

Pythonもまた「WORA的」と呼べる強みを持っています。Pythonの最大の武器は圧倒的に豊富なライブラリです。AI・機械学習ではTensorFlow、PyTorch、scikit-learn、データ分析ではNumPyやpandas、インフラ自動化ではAnsible、Web開発ではDjangoやFlask、スクレイピングではBeautifulSoupやScrapy、さらにGUIや教育向けライブラリまで網羅しています。

またPythonは書いてすぐ実行できる手軽さも魅力です。対話型シェルで一行書けば即座に結果が返り、Jupyter Notebookではコードと可視化を統合できます。この「書いてすぐ試せる」体験はJavaScript以上にWORA的だと感じられることもあります。

一方でPythonの弱点は配布と環境依存です。ライブラリの依存競合、C拡張のビルド失敗、バージョン差による不整合は日常茶飯事であり、「自分の環境では動くが他では動かない」という問題を抱えています。

結局のところ、Pythonは「書いてすぐ試せる」点では非常にWORA的ですが、配布の容易さではJavaScriptに劣ります。

JavaScript進化年表まとめ

年代 出来事 / 技術 WORAにおける意味
1995 - JavaScript誕生(Netscape)(Brendan Eichが10日で実装) ブラウザ標準搭載で、どのOSでも使える最初の共通スクリプト環境。
1997 - ECMAScript標準化 ブラウザ間互換性を確保し、言語を公共財化。
1999 - XMLHttpRequest登場(IE5) 後のAJAXの基盤となる非同期通信APIが初登場。
2000 - REST提唱(Roy Fielding博士論文) HTTPメソッドを利用した直感的API設計の思想を提示。
2001 - JSON定義(Douglas Crockford) 軽量データ交換フォーマットとして誕生。
2005 - AJAXという概念が提唱
(Gmail, Google Mapsなどで普及)
ページ遷移なしでのWebアプリ化を実現。
2006 - JSON標準化(RFC 4627) データ交換形式として正式に規格化。
2008 - Google:Chrome & V8公開 JavaScript高速化の決定打。モダンWebアプリの基盤を確立。
2009 - Node.js登場 サーバー開発へ進出し、フロントとバックをJavaScriptで統一可能に。
2012 - Microsoft:TypeScript公開 型システムを導入し、大規模開発への対応を強化。
2013 - Facebook:React公開
- GitHub:Atom Shell登場
Virtual DOMとコンポーネント指向によるUI革命。Web技術でデスクトップアプリを構築可能に。
2014 - HTML5正式勧告
- Safari/iOSでHTML5機能積極採用
Flash依存を脱し、Webがネイティブ超えの実行基盤へ進化。モバイルWebの標準化を牽引。
2015 - ES6(ECMAScript 2015)発表
- React Native登場
- Atom ShellをElectronに改名
- RPGツクールMVがElectron採用
- AWS LambdaでNode.jsサポート
・クラス構文やモジュール導入で言語が近代化
・モバイル開発をJavaScriptで統一
・Electronが正式名称化され、デスクトップ基盤として確立
・同人ゲームもクロスプラットフォーム化
・クラウドでもNode.jsが最初に採用され、フルスタック性を補強

まとめ

Javaが掲げたWORAは理想として先駆的でしたが、閉じた企業依存構造とクライアントでの失敗により未達となりました。対してJavaScriptは、WSHやActionScriptの時代を経て、ECMAScript標準化、V8による高速化、AJAX・JSON・RESTによる通信の革新、HTML5によるアプリ基盤の進化、ES6による近代化、TypeScriptによる開発体験の改善、Electronによるデスクトップ展開、React Nativeによるモバイル展開を経て進化しました。さらにGAFAM全員が公共財として育成したことで、真のWORA言語となりました。

Pythonは豊富なライブラリと即時実行性で強力な競合ですが、配布の難しさという壁がありました。そのため、現在最も現実的で最強のWORA言語はJavaScriptなのです。

Discussion