新春特別企画
2010年のJavaScript:「これまで」と「これから」
2010年のJavaScriptと題しまして,JavaScript周辺の「これまで」と「これから」についてまとめてみたいと思います。
2009年までのJavaScript
JavaScriptは各ブラウザベンダなどが個別に実装するという特殊性から,ブラウザ(実装)ごとの非互換性の問題に悩まされ続けてきた言語です。まず,そのJavaScriptの歴史を簡単に振り返ってみます。
ECMA-262 3rd editionとスピードコンテスト
JavaScriptはNetscape社によってLiveScriptという名前で誕生し,その後ECMAScriptとして標準化が進みました。1999年12月にECMA-262 3rd editionが策定されてから,Internet ExplorerのJScript,MozillaのSpiderMonkey(TraceMonkey),SafariのJavaScriptCore,OperaのLinear A/Linear B/Futhark,そしてGoogle ChromeのV8と,いくつものJavaScriptエンジンが誕生し,現在も改良が加えられ続けています。
JavaScriptの言語としての仕様は10年前から変わっていないにも関わらず,各エンジンが更新を続けているのは,多く分けて2つの理由があります。1つはDOMサポート,もう1つは高速化です。特には2008年の6月頃から各エンジンの競争が白熱化しました。JavaScriptCoreとSpiderMonkeyにはJITコンパイラが搭載され,従来のインタプリタ方式に比べて大幅な高速化を実現しました。また2008年9月にGoogle Chromeが登場し,スピードコンテストを盛り上げました。
この流れには遅れてしまいましたが,Operaも2009年12月に10.50のプレアルファ版を公開し,新しいJavaScriptエンジンのCarakanを搭載しました。このCarakanはSunSpider,Peacekeeper,V8 Benchmark Suite,Dromaeoなどの各種ベンチマークで軒並みトップかそれに近いスコアを叩きだしています。また,Internet Explorerも「Professional Developer Conference(PDC) 2009」において,開発初期段階のInternet Explorer 9のJavaScriptエンジンが大幅に高速化していることを発表しています。
HTML5周辺技術のサポート
HTML5周辺技術として,以下の仕様がJavaScriptと連携する部分として策定が進められています(それぞれの進捗はJavascript Interfaces Current Status - W3Cを参照してください)。
- Web Storage
- Web Workers
- The Web Sockets API
- Web SQL Database
- Selectors API Level 1
- Server-Sent Events
- XMLHttpRequest(Level 2)
- File API
- WebSimpleDB API
- DataCache API
- API for Media Resource 1.0
- Geolocation API Specification
- Cross-Origin Resource Sharing
- Web Forms 2.0
これらの仕様に対して,2009年年末時点での各ブラウザのサポート状況は下記の表の通りです。
2009年末時点でのHTML5周辺技術のサポート状況
| HTML5周辺技術 | Internet Explorer | Firefox | Safari | Google Chrome | Opera |
|---|---|---|---|---|---|
| Selectors API | △ IE8以降。かつ,サポートしていないセレクタも多い | ○ Firefox 3以降 | ○ Safari 3.1以降 | ○ | ○ Opera 9.5以降 |
| Web Storage | ○ IE8から | ○ Firefox 3.5から正式サポート。3.0までは独自実装となっていた | ○ Safari 4以降 | △ Google Chrome 4以降 | △ Opera 10.5 pre-alphaより |
| Web Workers | - | ○ | ○ | ○ | - |
| Geolocation API | - | ○ Firefox 3.5より | - モバイル版ではサポートしているので,近いうちにサポートされる見込み | - Chrome 5でサポート予定 | △ サポートしたバージョンは公開されているが,正式なリリースには組み込まれていない |
| Cross-Origin Resource Sharing (XMLHttpRequest Level 2) | ○ IE8から,一部独自仕様 | ○ Firefox 3.5から | ○ Safari 4から | ○ Chrome 2から | - |
| Web Sockets | - | - パッチは存在する Bug 472529 | - Chrome側で実装されたので,WebKitにもすぐに実装される見込み | ○ Chrome 4.0.249.0より正式に対応 | - |
| Web Forms 2.0 | - | - | △ 一部のみ | △ Safariに同じ | ○ 完全ではないが最もサポートが進んでいる |
| Server-Sent Events | - | - | ○ WebKit nightlyのみ | - | △ Opera 9.0から実装はしているが,仕様が新しくなったのに追いついていない |
| File API | - | ○ Firefox 3.6より | △ 一部サポートしている | - Chrome 5でサポート予定 | - |
| WebSimpleDB API (Indexed Database API) | - | - | - | - Chrome6でサポート予定 | - |
| DataCache API | - | - | - | - | - |
| API for Media Resource | - | - | - | - | - |
| Web SQL Database IE,Firefoxなどがこの仕様に対して否定的なため,標準化はストップする可能性が高い | - | - | ○ Safari 3.1以降 | △ Chrome 4より | △ Opera 10.5 pre-alphaより |
この表で下に行くほど仕様・実装が進んでいない項目になっています。最後のWeb SQL DatabaseはSafariを筆頭に実装こそ進んでいますが,標準化に当たって各ベンダの意見がまとまらず,Indexed Database APIにその機能・役割が託されたこともあり,このまま策定がストップする見込みが強くなっています。


