JavaScriptの起源
- 1995年 JavaScriptの開発、Netscape Navigator 2.0に実装
JavaScriptは、Netscape社のブレンダン・アイク(Brendan Eich)によって開発された。
当初はLiveScriptと呼ばれていた。その頃、Sun Microsystems(現Oracle)が開発していたプログラミングJavaが脚光を浴びていた。それにあやかってJavascriptとしたのだそうである。言語として、JavaとJavascriptはなんら関係はない。
Netscape社は、1994年にWebブラウザNetscape Navigatorを発表した。それまでにもいくつかのブラウザは存在したが、このNavigatorはHTML標準への準拠度が高かったこと、実質無料配布されたことにより、発表以来すぐに絶対的なシェアを獲得した。
Microsoftはこの分野でやや遅れたが、1995年にIE(Internet Exproler)を発表、ベストセラーWindows95に同梱したため、一挙に強力なライバルになった。
Javascriptは、1995にNetscape Navigator 2.0に実装され、その競争での優位性を確保しようとした。これがJavascriptの起源である。
- 1996年、Microsoft、JScript,VBScriptをIE3.0に実装
MicrosoftもすぐにIEにJavascriptを搭載しようとしたのだが、NetscapeはMicrosoftのライセンスを供与しなかった。それでMicrosoftは、Javascriptに似た言語として「JScript」を開発、同社のパソコン用言語Visual BASICのサブセットであるVBScriptと合わせて、1996年にIE3.0に実装した。
JScriptはJavascriptに似ているとはいえ、かなり非互換の部分があった。しかも、両者は優位性を示すために個別の機能を拡張した。そのため、Javascriptで作成したスクリプトはIEでは動かない、JScriptはNavigatorでは動かない。そのためWebページ開発者は、両方のブラウザで動かすために、面倒な工夫をする必要が生じた。
Javascriptの標準化
- Javascriptの仕様について
現在では、Javascriptの仕様は、ECMA(European Computer Manufacture Association)Internationalが、ECMAScript(ECMA-262)規格を策定し、それによる標準化されたJavaScriptを ECMAScript を示している。
個々のブラウザに搭載されているものがJavaScriptなのだが、ECMAScriptをJavascriptということが多く、ECMAScriptのバージョンはJavascriptバージョンと呼ばれている。
Javascriptはブラウザで実行される。ECMA仕様は、ブラウザへの実装は言語開発者に任されているし、解釈があいまいな部分もある。また、ブラウザ開発者は、ECMAの正式規格になる以前に、その機能を先取りして実装している。そのため、実際に流布しているJavascriptは(完全に)規格に準拠しているとはいえないし、ブラウザ間で非互換になる部分もある。
- Javascript標準仕様の経緯
1996 Javascript1.0, 1.1 これらをベースにECMA-262 初版が設定
配列サポートが強化され、複雑なデータ型の定義が可能
正規表現による文字列比較、switch~case文
1997 ECMA-262 初版
1998 Javascript1.3(ECMA-262初版準拠)
1998 ECMA-262 第2版(仕様は第1版と同じ、ISOとの対応を図る)
1999 ECMA-262 第3版(正規表現、try/catch、数値出力フォーマット)
2000 Javascript1.5(ECMA-262 第3版準拠)
ECMA-262 第4版は放棄
(Microsoft派とアンチMicrosoft派との思惑の対立が原因だといわれる)
2000 Javascript1.5
2005 Javascript1.6
2008 Javascript1.9
2009 ECMA-262 第5版(Strictモード、Object機能強化、JSONサポート)
2013? 開発コードHarmony(HTML5との関係?)
- ブラウザでの対応
その後、有力なブラウザが出現してきた。これらは当初からECMA準拠を重視しており、次第にIEの非互換性が問題視されるようになってきた。現在では、MicrosoftもECMA準拠を宣言している。
・Opera:1996年、Opera Software ASA (ノルウェー)
・Safari:2003年、Apple
・Firefox:2004年、Mozilla(Netscapeを元とする非営利団体)
・Chrome:2008年、Google
1990年代:Javascript軽視の時代
ブラウザ間での競争激化とは裏腹に、プログラミング言語としてのJavascriptの評価は低かった。一流のプログラマやWebデザイナーは、Javascriptを軽視していた。
- 初期のJavascript
1997年頃までの初期のJavascriptは、言語としての評価は低かった。
Web環境での言語として既にCやJavaがあった。これらの言語と比較すると、Javascriptは型の仕様がない、制御構造が不足しているなど、言語としては初心者用・入門用程度のレベルだとみなされていた。
HTMLの制約として、Javascriptの動作範囲は現在表示されているWebページ内に限定されていた。そのため、用途はformから入力されたデータを加工してformに表示する程度に限定されてしまう。当時既にCやJavaで作ったプログラムをHTMLからCGIを介して呼び出すことができていたので、それを使うほうが主流であった。
- DHTMLへの対応
静的なHTMLの内容(Webページ)をCSSとJavascriptなどを用いて動的に変更する技術の抽象概念をDHTML(dynamic HTML)という。DHTMLへのニーズは高く、それをJavascriptだけで実現できれば便利である。
そのため、Javascriptの拡張が行われ、1997年にNetscape Navigator 4.0とIE 4.0に実装された。しかし、ここでも独自拡張による非互換が多く、Web作成者を悩ませた。
むしろCGIを用いるほうが、重くはあっても、多様な機能を実現するのに便利だった。特に動画や音声の利用では、1996年にFlashが開発され、それを用いるのが主流になってしまった。
すなわち、DHTMLへの関心は高まったが、Javascriptとしての発展は限定的であった。
2000年代前半:Javascript受難の時代
この頃になると、Javascriptはかなりの機能をもち標準化も進んだ。そのため、、ほとんどのWebページになんらかの用途にJavascriptが使われるようになった。
しかし、ECMAが第3版以降中断されていたように、抜本的な変化は起こらず、特記する出来事はない。
むしろ、この頃から個人(素人)がWebページを作成するようになり、Webページの体裁に凝ってJavaScriptを使ったごてごてした重いページが氾濫するようになった。さらに、セキュリティへの考慮が不十分で、Javascriptの脆弱性をつくウイルスが出現した。そのため、ブラウザのJavascript機能を遮断する設定をする人も増えてきた。
2000年代後半:Ajaxの普及-Javascriptの復権
2005年になると状況が一変する。Javascriptが重要な技術として再認識され、急速な発展をするようになった。
Ajax(Asynchronous JavaScript+XML)とは、サーバから受け取ったデータを、サーバとの通信なしでパソコンのブラウザ内で操作できる非同期通信、サーバに存在する他のファイルを表示しているHTMLに動的に表示させるインターフェイスなどの技術の総称である。Javascriptだけでブラウザ表示画面を動的変化できる技術として広く用いられている。その代表的な例にGoogle Mapsがある。
- Ajaxの起源
Ajaxの基本となる技術(関数として利用する)は、XMLHttpRequestである。Microsoft ActiveX コントロールとして作成され、1999年IE5に実装された。
- 多ブラウザのAjax対応
2004年からFirefox(1.0)、Opera(7.6)、Safari(1.2)など多くのブラウザがAjax対応した。そして、2006年にW3CはXMLHttpRequestの標準仕様を策定し正式仕様にした。
これらのブラウザは、XMLHttpRequestオブジェクトをDOMとしてネイティブでサポートしたのであるが、IEは、これに先行してActiveXオブジェクトとして実装していたため、XMLHttpRequestを使うとき、ブラウザの違いを意識する必要があった(2006年のIE7からは他のブラウザと一致させた)。
- Ajaxへの注目
Ajaxが注目されるようになったのは、2005年に発表されたGoogle Mapsである。地図の移動や拡大縮小がスムーズにできる。これまでにも動的なWebページへの要望が多かったが、多様なアドインソフトを使う必要があった。それが従来からあったJavascriptを使うだけで、実現してみせたので、それを応用したアプリケーションが急増した。
- Ajaxの命名
当時は「Ajax」という言葉はなかった。2005年、ジェシー・ジェームス・ギャレット(Jesse James Garrett)が「Ajax: A New Approach to Web Applications」という記事で、Asynchronous JavaScript + XMLの短縮語として命名したのだという。
ギャレットは、Ajaxを次のように定義している(現在からみるXMLに限定しているが)。
・XHTMLとCSSを用いた、Web標準に基づく表示
・DOM(Document Object Model)によるダイナミックな表示と相互作用
・XMLとXSLTによる、データの変換や操作
・XMLHttpRequestによる、データの非同期的な取得
・それらをJavaScriptによって結びつける
- Ajaxの普及-ライブラリ
Ajaxの普及を促進した背景の一つは、Javascriptライブラリの提供である。代表的なものにPrototype.jsとjQueryがある。
Prototype.jsは2005年にステヘンソン(Sam Stephenson)、jQueryは2010年にジョン・レッシグ(John Resig)により開発されたJavascriptライブラリである。Ajax関連の多数の機能が収められており、Javascriptの記述を簡便にできるとともに、ブラウザ間における解釈の違いを吸収することができる。
オープンソースになっており、ダウンロードして使うこともできるし、それを保管しているWebサイトにリンクして使うこともできる(参照:「prototype」、「jQuery」)。
- Ajaxの機能拡大-JSONの標準仕様
JSON(JavaScript Object Notation)は、Javascriptで構造体データを定義したり外部ファイルから読み込むための標準形式である。同様な目的にはXMLがあるが、JSONは記述がしやすく受信が軽快な特長がある。
JSONは2002年にダグラス・クロックフォード(Douglas Crockford)により開発され公開された。2005年にYahoo!、2006年にGoogleがそれを用いたアプリケーションをサービスして注目された。そして、2006年にRFC 4627として策定され、2009年のECMA 5でJavascriptの標準仕様になった
- Webアプリ利用範囲の拡大-XMLHttpRequest Level 2
XMLHttpRequestは、他のファイルのアクセスを容易にしたが、セキュリティの観点から表示されているWebページと同一ドメインのサーバにあるファイルに限定されていた。しかし、Webアプリが高度化してくると、他のドメイン(他社サイト)へのアクセスが必要になってくる。
XMLHttpRequest Level 2は、セキュリティ機能を強化して他ドメインと通信できるようにしたものである。2009年にW3Cがドラフトを発表、多くのブラウザがこの機能を搭載するようになった。
2010年代:Javascriptの発展
- JavaScriptのJITコンパイラ
JavaScriptは、インタープリタ型言語、動的型付け、クラス・配列の概念などの特徴があり、実行速度が遅い代表的な言語である。
ところが、Ajaxの普及によりJavascriptを利用したWebアプリが急増したが、Ajaxでは多様な内部処理をしているので時間がかかる。そのため、Javascript高速化が大きな問題になってきた。
多様な高速化の工夫が行われてきたが、画期的なのがJavaScriptのJITコンパイラ(Just-In-Time Compiler)の出現であった。Mozillaは2008年のFirefox 3.1にJITコンパイラTraceMonkeyを搭載、2009年にはFirefox 3.5で改良した。
その後、他のブラウザも追従し、現在ではほとんどのブラウザがJITコンパイラを搭載している。
- HTML5でのJavascript
Webアプリが増加するのに伴い、HTMLの互換性や機能拡大が求められ、2004年頃からHTMLの新バージョンであるHTML5の検討が始まった。HTML5の正式版は2014年頃になるとされているが、多くのブラウザがそれを先取りして実装している。
HTML5はHTMLの仕様であるが、広義にとらえればCSSやJavascriptを含む新しいプラットフォームだともいえる。
Javascriptにより実現できる機能のうち主なものを列挙する(実例:「Javascript」)
・canvas:画像表示をするには、従来はgifなどの画像ファイルにしたりFlashを用いていた。それをJavascriptだけで簡単な画像を作成できるようになった。
・XMLHttpRequest:従来の仕様の明確化と関連機能の充実
・Web SQL Database API:簡易データベースへのアクセス。これまではCGIでプログラムを呼び出す必要があった。
・WebSocket:クライアント・サーバ間通信
参考URL