1. 序論

2020 年、ワールドワイドウェブはユビキタスであり、ウェブに接続された数十億のデバイスから十億を超えるウェブサイトにアクセスできる。そういったデバイスではウェブブラウザあるいはそれに似たプログラムが実行され、それがウェブサイトから受け取ったページを処理して画像として表示する。ウェブサイトが配信するページの大多数には JavaScript というプログラミング言語で書かれたソースコード (あるいはそれを読み込む命令) が含まれる。JavaScript が世界で最も多くデプロイされたプログラミング言語であることはまず間違いない。Stack Overflow [2018] の調査によると JavaScript は世界で最も広く利用されるプログラミング言語であり、職業開発者の 71.5% が利用する。

本稿では 1995 年から 2015 年にかけての JavaScript 言語の誕生、設計、進化に関する話が主に語られる。しかし話題は JavaScript の技術的詳細だけにとどまらない。2020 年のウェブを支配する JavaScript を形作るために個人や組織がどのように競争、協調したかについても話は及ぶ。

長く複雑なこの話を読みやすくするために、本稿は四つの部に分かれている ── それぞれの部が JavaScript の開発と進化における重要な一つのフェーズに対応する。また部と部の間には「余談」があり、ここではソフトウェア開発者たちが JavaScript にどう反応し、JavaScript をどう利用してきたかに関する文脈が提供される。

時は 1995 年、ウェブとウェブブラウザは世界に突如現れた新しい技術であり、Netscape Communications Corporation という企業がウェブブラウザ開発をリードしていた。JavaScript は 1995 年 5 月、当時 Netscape の従業員だった本稿の著者の一人 Brendan Eich によって最初に設計、実装された。この言語はコードスニペットをウェブページの定義に組み込める使いやすい単純な動的言語として開発された。組み込まれた JavaScript のコードスニペットはブラウザがページを描画するときに解釈され、ページの表示の動的なカスタマイズやユーザーとの対話が可能になる。

第 1 部「JavaScript の起源」では JavaScript の誕生と初期の進化が語られる。この部では Netscape で行われた JavaScript 言語の初期バージョンの開発で考慮されたモチベーションやトレードオフを考察する。JavaScript はその名前のためにプログラミング言語 Java と混同されることが多いが、第 1 部では JavaScript という言語の名前を決定したプロセス、思い描かれた二つの言語の関係、そして実際に起こったことが説明される。初期の JavaScript の機能とそれを動機付けた設計判断の概観も説明され、さらに Netscape とその他の企業で最初の数年間に起こった初期の JavaScript の進化も明らかになる。

ウェブの土台には「ウェブはプロプライエタリではないオープンな技術で作られている」という事実がある1。どんな人が作ったウェブページであっても好きなベンダーが提供するウェブサーバーでホストでき、そのページには好きなブラウザからアクセスできるべきである。独立した実装の間の相互運用性は共通の技術仕様が保証する。JavaScript に何らかの共通標準仕様が必要となることは最初期の段階から理解されていた。早くも JavaScript が生まれた最初の年には既に、ウェブ開発者たちは Netscape の JavaScript 実装とリバースエンジニアリングで作られた Microsoft の JavaScript 実装の間で相互運用性の問題に直面していた。1996 年、標準化組織 Ecma International の後援で JavaScript の標準化プロセスが開始される。初めての公式な JavaScript 標準仕様は 1997 年に「ECMAScript 言語仕様」という名前で発行され、Netscape での JavaScript の進化を主に反映した改訂・増補版が 1999 年までに二度発行された。

第 2 部「規格の作成」では JavaScript を標準化する取り組みがどのように開始され、仕様がどのように作成され、誰が取り組みに参加し、決断がどのように行われたかが説明される。

2000 年までの間に JavaScript はウェブで広く使われるようになったものの、Netscape は急速に勢いを失い、Eich は他のプロジェクトに移動した。将来の JavaScript の進化をリードできるのは誰だろうか? 「優しい終身の独裁者2」となる企業または個人がいなかったために、JavaScript を進化させる責務は ECMAScript 標準化委員会に渡った。この JavaScript を設計する責務の移管は円滑に進まなかった。委員会が言語を進化させる方法を独自に模索する中で、フライングが起きたり、標準化が休止したり、労力が間違った方向へ注がれたりといったことが 10 年にわたって続いた。その間にも JavaScript の利用は急速に広まり、その中で実装依存な言語拡張が多く生まれた。この状況の結果として標準化されていない JavaScript を利用する管理されていない大量のウェブページというレガシーが生まれ、新たな相互運用性の問題が発生した。ウェブ開発者は複雑なクライアント JavaScript を利用するウェブアプリケーションを作り始めており、それをサポートする標準化された言語拡張が求められた。

第 3 部「失敗した改革」では失敗に終わった言語改訂の試み、その結果として生じた標準化委員会の混乱、そして最終的にその混乱がどのように解決されたかが説明される。

JavaScript 標準化委員会は 2008 年に円満な運営を復活させ、2009 年には少しだけ拡張された JavaScript 規格の策定を完了させた。この成功により、標準化委員会は互換性を保った形で JavaScript を現代化するというタスクに本腰を入れて取り組む準備がついに整った。それから 7 年の時間をかけて委員会は JavaScript とその仕様の拡張に取り組んだ。こうして完成したのが ECMAScript 2015 として知られる言語であり、これは現在まで続く JavaScript の進化の基礎となった。ECMAScript 2015 のリリースが完了した後に委員会は JavaScript の進化プロセスをもう一度変更し、頻度の高いインクリメンタルなリリースを可能にした。現在では年に一度のスケジュールで改訂が行われている。

第 4 部「JavaScript の現代化」では ECMAScript 規格の 2009 年版および 2015 年版の作成に関与した人物およびプロセスに関する話が語られる。規格の 2009 年版と 2015 年版が据えた目標は何か、そして発展しつつあった JavaScript 開発コミュニティの要求にその目標がどう答えていたかについても話題は及ぶ。この部では二つの版で行われた根本的な変更、および言語に追加された重要な新機能も説明される。

本稿では可能なとき必ずソースとして同時期の一次資料を示した。幸い一次資料は豊富に存在する。参考文献に示した URL を使えば、ウェブ上の信頼できるアーカイブから主要な資料のほぼ全てに無料で簡単にアクセスできる。一次資料を補強するのは話題に上がる出来事に直接関わった人々とのインタビューや個人的な会話である。また本稿の著者二人はどちらも本稿で言及される様々な出来事に大きく関わっており、著者らの記憶も第三者の情報提供者が語ったことと同じように扱われる。

20 年に及ぶ JavaScript の完全な歴史は長大であり、そのため本稿も長い。数百の出来事、数十の人物と企業が登場する。補遺 A から補遺 E はこういった細かい部分について読者の理解を助ける目的で提供される。補遺 A補遺 B は登場する人物と組織の注釈付きのリストである。補遺 C は用語集であり、JavaScript 特有の用語、2020 年のコンピューティングコミュニティで一般的な意味と異なる意味で使われる用語、将来の読者が読むときに意味が変わっている (あるいは使われなくなっている) 可能性がある用語が含まれる。用語集にある用語が本稿で初めて使われるときは上付き添え字で「単語」と強調してある。補遺 D では本文で使われる略語が定義される。補遺 E には様々な出来事の詳細な時系列を本稿における部ごとにまとめてある。

1.1 名前、数字、略語

JavaScript の世界には一見同じに思えるものを指す用語がいくつもあって分かりにくいことがある。規格を定める組織の世界も同時に話をするとなると、この状況は悪化する。この世界では組織の単位や取り組みの結果を表すのに英数字を使った略称を多用するからだ。混乱を最小限にするために、最初に本稿で使われる用語と略語、それから慣習を最初に定義しておく。

「JavaScript」はウェブページでの利用を目的として Netscape Communications Corporation が開発したプログラミング言語を指す一般的な用語である。その利用はウェブおよびそれ以外の環境で Netscape を大きく超えて広まり、数百万人のプログラマーが連日この言語について「JavaScript」という言葉を使って考えたり会話したりしている。JavaScript というプログラミング言語は Java というプログラミング言語とは別物であり技術的に大きく異なるのだが、この二つの言語は名前が似ているので混同されることが多い。

JavaScript® は登録商標でもある。この商標を最初に登録したのは Sun Microsystems であり、本稿の執筆時点では Oracle Corporation が商標を所有している。この商標は Sun によって Netscape にライセンスされ、その後 Mozilla Foundation にもライセンスされた。Netscape と Mozilla は自身の JavaScript 実装の特定バージョンを指して「JavaScript 1.4」といった用語を使っている。Netscape/Mozilla 以外の JavaScript 実装者が商標の問題を避けるために別の名前を使う場合もあった。名前が複数ある、登録商標の問題がある、Java と混同されるという問題があるので、現代のユーザー、本の著者、ツール実装者の多くはこの言語を単に「JS」と呼ぶ。JavaScript ソースコードのファイル拡張子には「js」がよく使われる。本稿では特定のバージョン、ホスト環境、実装を念頭に置かない一般的な文脈でこの言語について話すとき「JavaScript」という単語を用いる。

この言語の標準仕様を作るとき「JavaScript」という名称は避けられ、代わりに仕様には「ECMAScript」という名前が付けられた。「JavaScript」と「ECMAScript」は本質的には同じものに対する異なる名前である。本稿では規格が定義する特定の言語ついて話すとき「ECMAScript」という単語を用いる。

ECMAScript の「ECMA」はスイスを拠点とする標準化組織 Ecma International から来ている。この組織は ECMAScript 規格の策定を後援した。元々「ECMA」は Ecma International の前身の組織 European Computer Manufacturers Association の頭字語だったものの、現在 Ecma は頭字語とみなされていない。Ecma International は「E」だけを大文字としているが、全て大文字で綴った時期も過去に何度かあった。ECMAScript が最初に策定された当時もそうであり、それが理由で ECMAScript の最初の四文字は大文字となっている。本稿では標準化組織 Ecma International を指して「Ecma」という単語を用いる。

Ecma はコンピューティングに関連する規格を数多く策定している。規格を策定する実際の作業は Ecma 技術委員会 (Technical Committee, TC) が行う。Ecma TC が新しく作られると、それを識別する連番の数字が割り当てられる。JavaScript を標準化するために作られた TC は TC39 である。一部の Ecma TC はさらに作業部会 (Task Group, TG) に分かれ、それぞれの TG に特定の責務が割り当てられる。2000 年から 2007 年にかけて TC39 の責務は拡張され、JavaScript 以外のプログラミング言語の規格策定も TC39 が担当した。この時期 ECMAScript の規格を策定する責務は TC39-TG1 に割り当てられた。本稿では TC39-TG1 を省略して「TG1」と表記する。

Ecma は TC が作成する規格のそれぞれに番号を割り当て、その番号を「ECMA-」に続けた文字列を規格の識別子とする。例えば ECMAScript 規格は「ECMA-262」という識別子を持つ。規格が改定されると、識別子の最後に版数を付けた文字列を識別子として新しい版が発行される。例えば ECMAScript 規格の第 3 版の正式な識別子は「ECMA-262, 3rd Edition」である。TC39 および最近の JavaScript コミュニティでは、形式張らないときに正式な識別子「ECMA-262, 3rd Edition」を「ES3」と省略する慣習が生まれている。ここで「ES」は「ECMAScript」を表す。図 1 に ECMA-262 の各版と本稿で使われる省略形を示す。

通称 発行日時 プロジェクト編集者 ページ数
ES1 第 1 版 1997 年 6 月 Guy Steele 95
ES2 第 2 版 1998 年 8 月 Mike Cowlishaw 101
ES3 第 3 版 1999 年 12 月 Mike Cowlishaw 172
ES3.1 第 5 版 第 5 版の作業中に内部で使われた通称
ES41 と ES42 第 4 版 未完成のまま放棄された
ES5 第 5 版 2009 年 12 月 Pratap Lakshman,
Allen Wirfs-Brock
245
ES5.1 第 5.1 版 2011 年 6 月 Allen Wirfs-Brock 245
ES6 (別名 ES2015) 第 6 版 2015 年 6 月 Allen Wirfs-Brock 545
ES2016 第 7 版 2016 年 6 月 Brian Terlson 546
図 1. ECMA-262 の各版 (1997–2016)

第 4 版を定義する試みは 10 年近く続き、設計の取り組みがほぼ独立した形で二度行われた。本稿ではこの二つの取り組みをそれぞれ「ES41」および「ES42」と呼ぶ3

第 6 版の公開と共に、TC39 は公開年を規格の通称に利用する慣習を採用した。例えば「ES6」と「ES2015」はどちらも「ECMA-262, 6th Edition」の形式張らない通称である (「ES2015」の方が好まれる)。ただし第 6 版の策定中に最もよく使われた通称は「ES6」だった。また TC39 のメンバーは第 6 版の策定プロジェクトを指して「Harmony」や「ES.next」といったコードネームも利用した。

本稿では JavaScript の概念を説明するときにインラインのコードスニペットを多用する。一部のスニペットは JavaScript/ECMAScript の特定のバージョンまたは版でしか正当でない。また提案されたものの言語の一部とはならなかった機能を説明するスニペットもある。本稿では JavaScript/ECMAScript の全バージョンで正当でないスニペットには適切なラベルが付けられる。


  1. ウェブ技術の仕様は単一の企業によって開発または管理されず、どんな企業あるいは組織も他の実装と協調動作する技術の実装を作成、配布できる。 ↩︎

  2. 技術進化のアプローチの一つ。技術を変更あるいは拡張する判断を下す権力を単一の人物あるいは組織が終身で持つ。一部のプロジェクト (特にオープンソースのプロジェクト) では、プロジェクトを開始した人物や技術を最初に開発した人物にこの権力が渡される。 ↩︎

  3. ES4 を設計する二度の取り組みおよび TC39 では「ES41」および「ES42」という通称は使われていない。 ↩︎

広告