完成までに長い時間がかかりましたが、JavaScript の次期バージョンである ECMAScript 6 はついに現実のものとなりました。
次のセクションでは、ES6 の世界で重要な概念について説明します。
TC39 (Ecma 技術委員会 39) は、JavaScript を進化させる委員会です。そのメンバーは企業です (とりわけ、すべての主要なブラウザベンダー)。 TC39 は定期的に会議を開催し、メンバーが派遣する代表者と招待された専門家が会議に出席します。会議の議事録は オンラインで入手可能 で、TC39 の活動内容がよくわかります。
ECMAScript 6 の設計プロセスは、機能の *提案* を中心としています。提案は、多くの場合、開発者コミュニティからの提案によって引き起こされます。委員会による設計を避けるため、提案は *チャンピオン* (1~2 人の委員会代表) によって管理されます。
提案は、標準になる前に次の手順を経ていきます。
[このセクションの情報源: David Herman による「The Harmony Process」。]
ECMAScript 2016 (ES7) 以降、TC39 はリリースをタイムボックス化します。ECMAScript の新しいバージョンは毎年リリースされ、その時点で準備が整った機能が含まれます。つまり、これからは、ECMAScript のバージョンは比較的小規模なアップグレードになります。新しいプロセス、完了した機能提案、今後の機能提案の詳細については、GitHub リポジトリ `ecma262` を参照してください。
JavaScript は誰もがその言語と呼ぶものですが、その名前は商標登録されています (Sun から商標を継承した Oracle によって)。したがって、JavaScript の正式名称は *ECMAScript* です。その名前は、言語標準を管理する標準化団体 Ecma に由来します。ECMAScript の開始以来、組織の名前は頭字語「ECMA」から正式名称「Ecma」に変更されました。
JavaScript のバージョンは、言語の正式名称を冠した仕様によって定義されています。したがって、JavaScript の最初の標準バージョンは ECMAScript 1 で、「ECMAScript 言語仕様、第 1 版」の略です。ECMAScript x は、しばしば ESx と略されます。
Web 上の利害関係者は以下のとおりです。
これらのグループは、互いにほとんど制御できません。そのため、Web 言語のアップグレードは非常に困難です。
一方、エンジンのアップグレードは、Web 上のあらゆる種類のコード (その中には非常に古いものもあります) に対応する必要があるため、困難です。また、エンジンのアップグレードは、ユーザーにとって自動的かつ気付かれずに実行されるようにしたいと考えています。したがって、ES6 は ES5 のスーパーセットであり、何も削除されていません1。ES6 は、バージョンやモードを導入することなく、言語をアップグレードします。strict モードと sloppy モードの亀裂を深めることなく、strict モードを事実上のデフォルトにすることさえできます (モジュールを介して)。採用されたアプローチは「One JavaScript」と呼ばれ、別の章 で説明されています。
一方、コードのアップグレードは、ターゲットオーディエンスが使用するすべての JavaScript エンジンでコードを実行する必要があるため、困難です。したがって、コードで ES6 を使用したい場合は、2 つの選択肢しかありません。ターゲットオーディエンスに非 ES6 エンジンを使用している人がいなくなるまで待つことができます。それには何年もかかります。主流のオーディエンスは、2015 年 6 月に ES6 が標準になったとき、ES5 に関してはその時点にいました。そして、ES5 は 2009 年 12 月に標準化されました! または、ES6 を ES5 にコンパイルして、今すぐ使用できます。その方法の詳細については、オンラインで無料で読むことができる「ES6 のセットアップ」という本に記載されています。
ES6 の設計では、目標と要件が衝突します。
Harmony/ES6 の元のプロジェクトページ には、いくつかの目標が記載されています。以下のサブセクションでは、そのいくつかを見ていきます。
目標は、次のようなものを記述するためのより良い言語になることです。
サブ目標 (i) は、JavaScript で記述されたアプリケーションが巨大になっていることを認めています。この目標を達成する ES6 の主要な機能は、組み込みモジュールです。
モジュールは、目標 (ii) への回答でもあります。ちなみに、DOM は JavaScript で実装するのが非常に難しいことで有名です。 ES6 プロキシ は、ここで役立つはずです。
JavaScript へのコンパイルを容易にするために、いくつかの機能が主に追加されました。2 つの例を挙げます。
どちらも、たとえば Emscripten を介して C/C++ を JavaScript にコンパイルする場合に役立ちます。
目標は、相互運用性を向上させ、可能な限り事実上の標準を採用することです。
例を挙げます。
目標は、バージョニングをできるだけシンプルかつリニアに保つことです。
前述のとおり、ES6 は「One JavaScript」によってバージョニングを回避しています。ES6 コードベースでは、すべてが ES6 であり、ES5 固有の部分はありません。
ES6 仕様の紹介では、すべての新機能がリストされています。
[ECMAScript 6 の] 主な機能強化には、モジュール、クラス宣言、レキシカルブロックスコープ、イテレータとジェネレータ、非同期プログラミングのための Promise、分割代入パターン、適切な末尾呼び出しなどがあります。ECMAScript の組み込みライブラリは、マップ、セット、バイナリ数値の配列などの追加のデータ抽象化と、文字列と正規表現の Unicode 補足文字の追加サポートをサポートするように拡張されました。組み込み関数は、サブクラス化によって拡張できるようになりました。
機能には、大きく分けて 3 つのカテゴリがあります。
このセクションでは、ECMAScript 6 に至るまでの経緯について説明します。
ES4 の作業は、1999 年に ES3 がリリースされた後に開始されました。2003 年に中間報告書がリリースされ、その後 ES4 の作業は一時停止されました。中間報告書に記載されている言語のサブセットは、Adobe (ActionScript) と Microsoft (JScript.NET) によって実装されました。
2005年2月、Jesse James Garrettは、JavaScriptで動的なフロントエンドアプリケーションを実装するために、いくつかの技術の組み合わせが普及していることに気づきました。彼はこれらの技術をAjaxと呼びました。Ajaxは全く新しいクラスのWebアプリケーションを可能にし、JavaScriptへの関心の高まりにつながりました。
これが、2005年秋にTC39がES4の作業を再開するきっかけとなった可能性があります。彼らはES4を、ES3、暫定ES4レポート、そしてActionScriptとJScript.NETでの経験に基づいて開発しました。
将来のECMAScriptバージョンに取り組んでいるグループが2つになりました。
2つのグループはJavaScriptの将来について意見が一致せず、両者の間の緊張は高まり続けました。
2008年7月末、オスロでTC39会議が開催されました。その結果はBrendan Eichによって以下のように説明されました。
JavaScript標準化団体であるEcmaのTechnical Committee 39が1年以上分裂しており、一部のメンバーはES4 […] を支持し、他のメンバーはES3.1 […] を支持していることは周知の事実です。今、私は喜んで報告しますが、分裂は終わりました。
会議で作成された合意は、4つのポイントで構成されていました。
したがって、ES4グループはHarmonyをES4ほど急進的にしないことに同意し、TC39の残りのメンバーは物事を前進させ続けることに同意しました。
ECMAScriptの次のバージョンは以下のとおりです。