4. Microsoft JScript

Netscape と Sun が一般に JavaScript を発表したのと同じ週に Microsoft も発表を行い、「Visual Basic Script を通じて、ワールドワイドウェブベースのアプリケーションを作成するときの標準」を Visual Basic にする意思を表明した1 [Wingfield 1995]。それに先立つ 1996 年 5 月 29 日、Microsoft は Internet Explorer 3.0 Beta のプレスリリース [Microsoft 1996] で JavaScript のサポートを発表している:

ActiveX Script. Visual Basic® Script と JavaScript のネイティブサポートにより、Microsoft Internet Explorer 3.0 は最も包括的かつ言語非依存なスクリプト機能を提供する。Microsoft Internet Explorer は REXX, CGI, PERL といった追加のスクリプト言語をサポートするよう拡張できる。ウェブページの設計者は好きなスクリプト言語を HTML コードに組み入れ、ActiveX コントロールや Java Applets などのソフトウェアコンポーネントを繋ぎ合わせる対話的なページを作成できる。

後に JScript となるスクリプト言語の開発が始まったのは 1995 年 10 月、Robert Welland が Microsoft の Internet Explorer (IE) チームに加わったときである。Welland は以前 Apple で Newton という携帯コンピューターと NewtonScript という言語に取り組んでいた [Smith 1995]。NewtonScript はプロトタイプベースのオブジェクト指向言語であり、その設計は Self 言語の影響を受けている。Welland は NewtonScript の主任設計者 Walter Smith とプロジェクトのコンサルタント David Ungar と密接に連携して働いたため、Ungar が持っていたプロトタイプベースの言語に関するアイデアと Self 言語に関する深い理解を持っていた。Apple を去った後 Welland はブラウザにスクリプティングを追加する方法を思案していたので、IE にスクリプティングを載せるために雇われることになった。

Microsoft に加わった Robert Welland は Visual Basic を IE に載せるべきだと伝えられたものの、Microsoft の開発ツール部門 (DevDiv) の Visual Basic チームに話を聞くとその開発には二年かかるという。そこで彼は Sam McKelvie と共に Visual Basic for Application2 を IE2 で実行させるための作業を簡単に進めたが、結局この言語はブラウザのオブジェクトモデルと統合させるには複雑すぎることが判明した。Welland は Netscape 2 のパブリックベータに含まれる JavaScript (LiveScript) を発見し、JavaScript の簡単なバイトコードインタープリタを書く実験を開始した (このインタープリタは後に McKelvie によって改善される)。さらに Welland は DevDiv の Peter Kukol がバイトコードを生成できる JavaScript パーサー3を書いていることを発見する。Welland と McKelvie は彼らのインタープリタと Kukol のパーサー、そして Patrick Dussud が書いたガベージコレクタを繋ぎ合わせ、JScript の基礎となるプログラムを作成した。

Microsoft で行われるプログラミング言語と開発ツールの開発は全て DevDiv が担当していたので、Windows 部門の IE チームに所属する Robert Welland と Sam McKelvie が新しい言語の実装に関わることは社内政治的に微妙なことだった。また IE が JavaScript をサポートすべきかどうかについては内部で論争があった。DevDiv はスクリプト用の VisualBasic とアプリケーション用の Java に集中することを望んだのに対して、IE チームが IE3 に向けて立てていた目標は Netscape 3 との互換性であり、そこには JavaScript のサポートが含まれていた。JavaScript をサポートしなければならないことに Microsoft は感心しなかったが、無視するには遅すぎると判断していた。妥協案として、IE と Microsoft は全体として JavaScript と Visual Basic の両方をスクリプト用にサポートし、スクリプト言語の開発は DevDiv が担当することが決定された。IE と Windows のチームはスクリプト機能とブラウザなどの製品の統合を担当することになった。

1996 年 1 月に Sam McKelvie は DevDiv に異動し、Robert Welland は IE チームに残った。同じく 1 月には Shon Katzenberger がスクリプト言語に取り組むために Microsoft Word チームから DevDiv に異動した。Katzenberger は Welland らが開発したインタープリタの担当を引き継ぎ、Visual Basic チームの助けを借りながら、Visual Basic のスクリプト用サブセットを同じインタープリタで動作させることに成功した。この言語は後に Visual Basic Script (VBS) として知られるようになる。

Welland と McKelvie はこのスクリプティングシステムを組み込み可能コンポーネントとしてパッケージ化した。これは後に Active Script と呼ばれるコンポーネントであり、JScript と VBS の両方をサポートする。このコンポーネントは 1996 年に IE3 および IIS の一部として出荷された。IIS は Microsoft のウェブサーバー製品であり、Active Server Pages 用のサーバーサイドスクリプティング技術を提供する。その後 Active Script は Microsoft Windows の標準コンポーネントとなり、レガシーアプリケーションをサポートするために 2019 年時点でも利用可能となっている。

IE チームは Netscape との競争に非常に集中していた。Active Script に付属するスクリプトデバッガは Netscape に無いものだったので、これがあれば JavaScript 開発者を IE に引き付けられるだろうという期待があった。一方で IE チームは Netscape と IE の間でウェブサイトを相互に運用できることが IE のシェアを伸ばす上で不可欠であるとも理解していた。Shon Katzenberger らは開発バージョンの IE3 で JavaScript を使う数千のウェブサイトを開き、Netscape 2 および Netscape 3 の結果との比較を行った。違いが見つかれば、Katzenberger は Netscape が実装する JavaScript の振る舞いをリバースエンジニアリングし、異なる振る舞いをしている原因を特定しなければならない。驚くような振る舞いが発見されることもあった。特にチームを驚かせたのが、Netscape の実装において全ての HTML フレームが同一のオブジェクト空間を共有しており、自由にオブジェクトをやり取りできることだった。IE は孤立した環境としてフレームを実装していたので、フレームとのオブジェクトのやり取りを可能にするために大きなリエンジニアリングが必要とされた。

JScript の開発プロセス全体を通して、正式な言語仕様がないことが常に問題になった。Welland の追憶によると、IE3 の開発を統率した Thomas Reardon は JScript の開発中、JavaScript に言語仕様が無いことについて Netscape の開発者たちを事あるごとに非難していたという。


  1. 本節の記述の多くは Allen Wirfs-Brock が 2018 年 3 月 22 日に行った録音済みインタビュー [Welland et al. 2018] に基づいている。このインタビューには Robert Welland, Shon Katzenberger, Peter Kukol が参加した。 ↩︎

  2. Visual Basic for Applications は Microsoft Office アプリケーションに組み込まれた Visual Basic 6 の亜種である。 ↩︎

  3. 2018 年のインタビューで Kukol が語ったところによると、最近 Microsoft の JavaScript チームを訪問したとき、彼は自身が書いたオリジナルのパーサー (を拡張したもの) が当時 Microsoft の JavaScript 実装でいまだに使われていることを発見したという。 ↩︎

関連書籍 (Amazon アソシエイト)
プロを目指す人のためのTypeScript入門 安全なコードの書き方から高度な型の使い方まで
JavaScript Primer 迷わないための入門書
JavaScript 第7版
「ものづくり」の科学史 世界を変えた《標準革命》