JavaScript
- なぜ生まれた?
- ページには動きを書く手段が無く、入力の確かめもサーバーへ送って結果を待つしかなかった。
- 何を解決した?
- HTML の中に数行で書け、型の宣言もクラスも要らない小さな言語をブラウザに入れた。
- 何を残した?
- 急いで固めた仕様の癖を、既存のページを壊さないよう残したまま直していくことになった。
- 登場
- 作者
- Brendan Eich
- 状態
- 現役
JavaScript が生まれる前
Section titled “JavaScript が生まれる前”1995年の初め、Netscape Navigator は NCSA Mosaic を急速に置き換えつつありました。 ただ、ブラウザが読む HTML は文書の見せ方を宣言的に書く言葉で、ページの中に処理を書く場所はありませんでした(Wirfs-Brock と Eich の HOPL 論文、2020年)。
電話番号や郵便番号を入れるフォームなら、桁の不足や数字以外の文字に気づけるのは、送信を受けたサーバー側のプログラム(CGI で動くものなど)だけです。 利用者は送信し、結果のページを待ち、誤りがあれば戻って入れ直します。 Navigator 2.0 の JavaScript の手引きは、まさにこの例を挙げ、ページに埋め込んだスクリプトなら “Without any network transmission”(ネットワークでの送信なしに)入力を確かめ、誤りをダイアログで知らせられる、と説明しています。 Eich 本人も2011年の講演のスライドで、最初の用途に “form validation”(フォームの検証)を挙げています。
なぜ Java だけでなく、別のスクリプト言語が要ったのか
Section titled “なぜ Java だけでなく、別のスクリプト言語が要ったのか”1995年5月23日、Sun が Java を発表し、Netscape は Java をブラウザに載せるライセンスを発表しました。 Netscape の Marc Andreessen と Sun の Bill Joy が実行できると考えたのは、Java を補う小さな言語を作ることでした。
Java でスクリプトも書けるのでは、という社内の疑問を、HOPL 論文はこう退けたと振り返っています。1995年春の Java は、本体を main という静的メソッドにしてクラスで包み、すべての変数に型を宣言する必要があり、初心者向けではなかった。
Microsoft がプロ向けの Visual C++ と片手間のプログラマー向けの Visual Basic を並べているように、部品を作る言語と、部品を「のり付け(glue)」する言語は別でよい、という考え方です。
Brendan Eich は「ブラウザで Scheme をやらないか」という誘いで Netscape に招かれ、1995年4月3日に入社しました。 しかし Scheme・Perl・Python・Tcl・Visual Basic は、事業上の事情や時間の都合で候補から外れます。 Andreessen はコード名を Mocha とし、HTML の中に直接数行書けるほどやさしくするよう求めました。Sun と Netscape の上層部は「Java に似せる(look like Java)」ことを求めました(HOPL)。 Eich 本人は2011年のスライドに “Engineering VP: ‘make it look like Java’ (I made it look like C and AWK)“(技術担当の副社長は「Java に似せろ」と言った。私は C と AWK に似せた)と書いています。
見た目のほかは Eich が選べました。クラスを入れると時間がかかり Java と競合するので、クラスの無い言語にすることでは皆が一致していました。 Eich は Self に感心していたことから、1本のプロトタイプのリンクで別のオブジェクトに処理を任せる形を選び、関数は Scheme のように値として渡せる第一級の関数にしました(HOPL)。
本当に「10日で作られた」のか
Section titled “本当に「10日で作られた」のか”10日でできたのは、社内で実演するための試作です。 HOPL 論文は、Eich が1995年5月の連続する10日間で Mocha の最初の実装を作ったと書き、日付の記録は無いが本人は5月6〜15日ごろと考えている、と注記しています。
中身は、手書きの構文解析器、単純で遅いバイトコードのインタプリタ、eval などで、関数式は後回し、プロトタイプのしくみも使える形にはできませんでした。
全エンジニアの前での実演は成功し、Navigator 2.0 に入れることが決まります。
Eich はその夏、Mocha をブラウザに組み込み、ページを操作する API を作りました(スライドでは “creating the DOM”)。
8月に機能が凍結され、JavaScript 1.0 はその時点で動いていたものの選り分けになりました。1996年8月の JavaScript 1.1 も、主に10日間の試作のコードのままでした(HOPL)。
公開は1995年9月、Navigator 2.0 の最初のベータ版に LiveScript の名前で載りました。この記事は HOPL の年表の9月18日を登場としています(同時代の TidBITS は10月初めとしています)。
なぜ Java と名前が似ているのか
Section titled “なぜ Java と名前が似ているのか”名前は、技術ではなく提携から来ています。Eich によると、Andreessen は Mocha と名付けたときから、いずれ JavaScript と改めることを望んでいました。 1995年12月4日、Netscape と Sun は共同で JavaScript を発表し、“The JavaScript language complements Java”(JavaScript は Java を補う言語である)と書きました。28社が支持を表明しています。
HOPL 論文は、設計は表面しか似ていないのに両社が Java と強く結びつけて売り出し、名前の近さがその後も混乱のもとになったとしています。 発表前の1995年11月1日の Internet World も、この言語を “a Java subset”(Java のサブセット)と紹介していました。 一方、Netscape の手引きは、JavaScript は精神的には HyperTalk や dBASE のような小さく動的な型の言語の系譜にある、と書いています。手引きの対比表をまとめると次のとおりです。
| Java | JavaScript(Navigator 2.0) | |
|---|---|---|
| 実行 | 事前にコンパイルしてからクライアントで実行 | クライアントが解釈して実行 |
| オブジェクト | クラスと継承 | 組み込みのオブジェクトを拡張して使い、クラスも継承も無い |
| HTML との関係 | アプレットは HTML とは別 | HTML の中に埋め込む |
| 変数の型 | 宣言する | 宣言しない |
Java から借りたのは、this、>>> 演算子、Java 1.0 の java.util.Date を不具合ごと写した Date などです(HOPL)。
名前と見た目は Java、中身の関数は Scheme、オブジェクトは Self から来ています。
コードで見る違い
Section titled “コードで見る違い”5桁の郵便番号(米国の ZIP コード)を入れるフォームで比べます。どちらもこの記事のための作例で、送信先の /cgi-bin/order は仮のものです。
<FORM ACTION="/cgi-bin/order" METHOD="post">ZIP code: <INPUT TYPE="text" NAME="zip" SIZE="5"><INPUT TYPE="submit" VALUE="Send"></FORM><!-- 5桁の数字かどうかは、送信を受けた /cgi-bin/order が確かめる。 誤りなら「入れ直してください」というページが返ってくる -->Navigator 2.0 では、フォームの部品がオブジェクトとして見え、入力欄に onChange のようなイベントハンドラを書けました。文字列の length と charAt は JavaScript 1.0 にあり(HOPL)、文字列どうしは < や > で辞書順に比べられました(Navigator 2.0 の手引き)。
<SCRIPT>function checkZip(field) { var s = field.value var ok = (s.length == 5) var i, c for (i = 0; i < s.length; i++) { c = s.charAt(i) if (c < "0" || c > "9") ok = false } if (!ok) alert("Please enter a 5-digit ZIP code.")}</SCRIPT><FORM ACTION="/cgi-bin/order" METHOD="post">ZIP code: <INPUT TYPE="text" NAME="zip" SIZE="5" onChange="checkZip(this)"><INPUT TYPE="submit" VALUE="Send"></FORM>この例は誤りを知らせるだけで、送信は止めていません。それでも誤りは送信の前に、その場のダイアログでわかります。書くのはページの中の十数行で、型の宣言もクラスも要りません。
なぜ広まったのか
Section titled “なぜ広まったのか”まず、載ったブラウザが広く使われていました。Eich は2011年のスライドで、1995年の Netscape のシェアを50〜80%と書いています。 Eich は製品版の直前のインタビューで、“I’d like to see it remain small, but become ubiquitous on the web”(小さいままで、Web のどこにでもあるものになってほしい)と述べています(HOPL の引用)。
次に、競合も同じ言語を載せました。Microsoft の Internet Explorer の担当者は Navigator 2.0 の公開ベータで LiveScript を見て、互換のインタプリタを作りはじめます。Netscape 3 との互換を目指すには JavaScript が欠かせず、1996年8月13日、JScript 1.0 を載せた Internet Explorer 3.0 が出荷されました。
なぜ W3C でなく Ecma で標準化したのか
Section titled “なぜ W3C でなく Ecma で標準化したのか”二つのブラウザが別々に実装すれば、ずれが出ます。12月4日のプレスリリースは、W3C と IETF に標準として提案する計画を書いていました。 しかし HOPL 論文によると、IETF はプロトコルとデータ形式が中心で、W3C の技術の指導者たちは命令型の言語を Web に加えることに関心がありませんでした。 Berners-Lee の協力者 Robert Cailliau は、のちに “It had to remain completely declarative.”(完全に宣言的なままでなければならなかった)と振り返っています。W3C に断られたという記録は、HOPL 論文にはありません。
Netscape と Sun は、Microsoft が標準を主導して Visual Basic 寄りに変えることを恐れていました。 求めたのは、Microsoft が参加はしても支配はできない場で、速く決められることです。 Netscape の標準化の専門家 Carl Cargill が Ecma の事務局長と知り合いで、Ecma は手続きが軽く、ISO への早い道もあり、Sun はすでに会員でした。
1996年11月21〜22日、TC39 の初会合に約30人が集まりました。Microsoft の Thomas Reardon の提案で、HTML を操作するオブジェクトの仕様は W3C に任せることになります。 ECMA-262 第1版は1997年6月の Ecma 総会で採択されました。名前の ECMAScript は、Sun が JavaScript の商標を Ecma に使わせず、Netscape も LiveScript の名を譲らなかったため、仮の名前がそのまま残ったものです(HOPL)。
残した課題と、次に来たもの
Section titled “残した課題と、次に来たもの”急いで固めた癖を、壊さずに直す
Section titled “急いで固めた癖を、壊さずに直す”Eich は10日の試作について、2011年のスライドに “Mistakes (some recapitulating LISP) were frozen early”(LISP の誤りをくり返したものも含め、いくつかの誤りが早くに固まった)と書いています。
たとえば == の型変換です。HOPL 論文によると、10日のあと社内の初期の利用者の要望で、文字列の "404" と数の 404 を等しいとみなす変換や、フォームの空欄に既定の値を与えるため空の文字列を 0 とみなす変換が入りました。
その結果、1 == '1' も 1 == '1.0' も真なのに '1' != '1.0' になります。
Eich は1997年の JavaScript 1.2 でこの変換をなくし、標準にも入れたいと考えました。しかし Microsoft の Shon Katzenberger が、既存の大量のページが壊れるので遅すぎると主張して通り、Eich は 1.3 で元に戻しました。
多くのページに書かれた振る舞いは、まちがいだとわかっても変えられなかったのです。
型を変換しない比較は、別の演算子 === として1999年12月の第3版に入りました(HOPL)。
第4版の行き詰まりと、年ごとの版
Section titled “第4版の行き詰まりと、年ごとの版”第3版のあと、TC39 では元の設計の誤りを正し、プロの開発者に向けた言語を第4版にする作業が進みましたが、まとまらず、2008年7月のオスロの会合で打ち切られました(HOPL)。 2009年12月の第5版は、ブラウザで事実上そうなっていた解釈を仕様に書き込み、strict モードや JSON を加えました。 2015年6月の第6版はモジュールやクラスの宣言などを加え、毎年の改訂に移るつもりで題名に年を入れ、ECMAScript 2015 と名乗りました。第17版の序文は、ECMAScript 2016 を年ごとの版と GitHub での公開の開発に移った最初の版としています。
後からの評価も変わりました。Douglas Crockford は2001年、見直すとブラウザの中に優れた言語が隠れていたと書き、Sun と Netscape が Java と競合しないよう多くの誤った説明をした、と評しています(HOPL の引用)。 その後の Ajax、サーバーで動かす Node.js、型を足した TypeScript などの広がりは、この記事では扱いません。
2026年10月時点の立ち位置
Section titled “2026年10月時点の立ち位置”2026年10月時点で最新の ECMA-262 は、2026年6月の Ecma 総会で採択された第17版 ECMAScript 2026 です。
| 指標 | 数字 | 出典 |
|---|---|---|
| クライアント側のプログラミング言語として JavaScript を使うサイト | 98.9%(2026年10月) | W3Techs |
| 使っている言語に JavaScript を挙げた回答者(全回答者) | 62.0%(2026年) | Stack Overflow Developer Survey 2026 |
- 1995年、フォームの誤りもサーバーに送らなければわからず、Netscape は Java を補って HTML に数行で書ける「のり付け」の言語を求めました。
- Eich が1995年5月の10日間で作ったのは試作です。名前と見た目は Java、関数は Scheme、オブジェクトは Self から来ています。
- Navigator に載って広まり、Microsoft も互換の JScript を出したため、1997年6月に Ecma で ECMA-262 第1版が採択されました。
- 急いで固めた
==の型変換などの癖は、既存のページを壊せないので残され、===が別に足されました。 - 第4版の打ち切りを経て2009年の第5版で立て直し、2015年からは年ごとの版です。2026年10月時点で最新は第17版、W3Techs ではサイトの 98.9% が JavaScript を使っています。
年表
Brendan Eich が連続する10日間で Mocha の試作を作る(本人は5月6〜15日ごろと考えている) cs.tufts.edu
Netscape Navigator 2.0 beta 1 が、LiveScript の名前でこの言語を載せて公開される cs.tufts.edu
Netscape と Sun が、Java を補う言語として JavaScript を共同で発表する web.archive.org
JavaScript 1.0 を載せた Netscape Navigator 2.0 の製品版が出荷される cs.tufts.edu
Microsoft が、互換の実装 JScript 1.0 を載せた Internet Explorer 3.0 を出荷する cs.tufts.edu
Ecma の TC39 が Netscape の社屋で初会合を開く(22日まで、約30人) cs.tufts.edu
Ecma 総会が ECMA-262 第1版(ECMAScript)を採択する ecma-international.org
第4版の作業を打ち切ったあと、ECMA-262 第5版が採択される ecma-international.org
第6版が ECMAScript 2015 の名で採択され、以後は年ごとの版になる ecma-international.org
第17版 ECMAScript 2026 が採択される ecma-international.org
系譜
前
- 影響元Java準備中
この技術が出てくる物語
同時代の出来事
出典
- 一次JavaScript: The First 20 Years(Allen Wirfs-Brock・Brendan Eich, HOPL IV, 2020) cs.tufts.edu
- 一次Splash(Brendan Eich の講演スライド, 2011-10-27) slideshare.net
- 一次Netscape and Sun announce JavaScript(プレスリリース, 1995-12-04) home.netscape.com 保存版
- 一次JavaScript Guide(Netscape Navigator 2.0 Handbook)Introduction home.netscape.com 保存版
- 一次JavaScript Guide(Netscape Navigator 2.0 Handbook)Navigator Objects home.netscape.com 保存版
- 一次JavaScript Guide(Netscape Navigator 2.0 Handbook)Event handlers home.netscape.com 保存版
- 一次ECMA-262 1st edition(1997年6月) ecma-international.org
- 一次ECMA-262 17th edition, ECMAScript 2026 Language Specification(2026年6月) ecma-international.org
- 一次ECMA-262(Ecma International) ecma-international.org
- 二次Netscape 2.0b1 Now Available(TidBITS, 1995-10-09) tidbits.com
- 二次Internet World: Netscape Unveils the Future(1995-11-01) tnl.net
- 二次Usage statistics of JavaScript as client-side programming language on websites(W3Techs, 2026年10月) w3techs.com
- 二次Stack Overflow Developer Survey 2026 — Technology survey.stackoverflow.co