現代的JavaScriptおれおれアドベントカレンダー2017 – 24日目

昔はES5とかES6とか言ってたはずなのに気付いたらES2015とか呼ばれるようになってて、なんかマリオが64になって急に数字が増えたなあみたいなのに近い感覚だったんですが、そんなことありませんでしたかそうですか。

概要

  • ES6とES2015は同じもの
  • わかりやすいからES2015と呼ぼうぜ
  • ES2015以降は毎年更新
  • 正式名称は “ECMA-262 edition 6” とかそういうの

ES vs JS

JavaScript (JS) はプログラミング言語ですが、その大本の仕様となるのがECMAScript (ES) です。JSはESの一種であり、ESの仕様で定められたものはJSで動きます。(あるいは、動くことが期待される。)

JSは各ブラウザが環境を用意していますが、ESの方はEcma Internationalという団体の中のTC39という委員会が仕様策定を行っています。

ベンダーはESの仕様通りにJSの動作を実装することになります。ES側は、逆にベンダーの提案と先行実装から仕様をまとめてる感じです。(たぶん。ここらへん怪しい。) 二つ以上の実装が存在するまで正式な仕様にはなりません。

ECMAScriptの仕様

ESも、具体的には “ECMA-262” という名前の仕様です。

Ecma International

色々と仕様策定を行ってる団体みたいです。ES以外にもC#とか。

E-C-M-A

前はECMA = European Computer Manufacturers Association(欧州電子計算機工業会)という団体でしたが、なんか国際化した現状に合わせて1994年に名前を変えたそうです。Windows 95より前だ。

なので “ecma” という英単語が存在するわけではないですが、かといって現在は略語というわけでもありません。

ES6 vs ES2015

この二者は同じものを指します。一般には後者の呼び方が推奨されます。

ES6

本来はESの第6版のことです。仕様の正式名称としては “ECMA-262” で、その “Edition 6” と。 class やアロー関数 => 等、「いまどき」の機能が多数追加されました。

前身のES5が2009年の発表で、2011年のES5.1を挟んで久しぶりに、かつ大きく更新されました。その発表年が、2015年です。

ES2015

というわけで、ES6こと “ECMA-262 Edition 6” のことです。

ウェブ界隈の進みが早いのでもっと細かく、毎年仕様を策定していこうという話になりました。それなら連番はわかりづらいよね、と。(ES7, ES8, ES9, ES10, …) そこで連番よりも発行年で、ES6ならES2015と呼ぶことが推奨されるようになりました。

ES2016, ES2017

それぞれ公開されています。

ES2015に比べて影が薄いけど、都度新機能なりが追加されます。

年で呼ぶことを推奨

ESの5、5.1、6版の仕様策定を引っ張ったAllen Wirfs-Brock氏のブログから。

So, why the year-based designation? The 6th edition of ECMA-262 took a long time to develop, arguably 15 years. As ES6 was approaching publication, TC39 (the Technical Committee within Ecma International that develops the ECMAScript specifications) already knew that it wanted to change its process in a way that enabled yearly maintenance updates. That meant a new edition of ECMA-262 every year with a new edition number. After a few years we would be talking about ES6, ES7, ES8, ES9, ES10, ES11, etc. Those numbers quickly loose any context for people who aren’t deeply involved in the standards development process. Who would know if the current standard ES7, or ES8, or ES9? Was some feature introduced in ES6 or ES7? TC39 couldn’t eliminate the actual edition numbers (standards organizations love their document numbers) but it could change the document title. We decide that TC39 would incorporate the year of release into the documents title and to encourage people to use the year when referring to a specific edition. So, the “newest version of JavaScript” is ECMA-262, Edition 8 and its title is ECMAScript 2017 Language Specification. Some people still refer to it as ES8, but the preferred shorthand name is ECMAScript 2017 or just ES2017.

では、何故年ごとの呼称になるのでしょうか。 ECMA-262の第6版は長い時間がかかりました。 15年ですよ。 ES6の公開が近づいていますが、その作業工程を変更し毎年更新することが望まれていると、TC39 (Ecma International内のECMAScript仕様策定の専門委員会)はわかっていました。 そう、毎年新しいECMA-262、そして新しい版番号です。 数年後、私たちは ES6, ES7, ES8, ES9, ES10, ES11, etc. について会話することになります。 標準化作業に明るくない方々にとって、これらの番号はすぐわけがわからないものになってしまうでしょう。 現在の標準がES7なのかES8なのか、それともES9なのか、誰が知っているというのでしょうか。 ある機能が追加されたのはES6? それともES7?  TC39は実際の版番号を消し去ることはできませんでしたが(標準化組織は文書番号が好きなのです)、文書のタイトルを変えることはできました。 TC39は発行年を文書タイトルへ組み込み、また特定の版へ言及する場合はこの年を使うことを推奨することにしました。 ですので、「JavaScript最新版」はECMA-262の第8版であり、そのタイトルはECMAScript 2017 Language Specificationとなります。 (訳注: 2017/08/31当時)  これをES8と呼ぶ人もいますが、簡略化する場合はECMAScript 2017、あるいはただES2017とするのが良いでしょう。

(訳注: “edition number” を日本語で「版次」というらしいんだけど、あんまり一般的じゃなさそうなので「版番号」としました。いやまあおれが知らないだけかもしらんけど。)

そもそもESではなくJSと呼んだ方が

JSはESではありますが、本当にES自体についての文脈でなければJSの名前で呼んだ方が良いだろう、との提言もしておいでです。(前項引用箇所の次の段落。) 同感です。

「現代的なJavaScript」という呼び方

版番号が関係する場合でも、単純に新旧で分けるなら、ES2015以前を「古いJS (legacy JavaScript) 」、以後を「現代的JS (modern JavaScript) 」と呼びましょう、と。

ES2015は大きな変更でしたから、そこで分けるのは妥当だと思います。

まだIE 11(2013年リリース)とか対応しなきゃとかってのはあると思うんだけど、そこはBabelを使う等して、できるだけ現代的な書き方でやっていきたいっすねー。便利だもの。

その他

他のもさー

ついでにIE 9とかIE 11とかじゃなくて、IE2009とかIE2013とか呼びたくない?

あとAndroid 4.4じゃなくてAndroid 2013とか。iOSは……まあいいか。いいか?

おしまい

というわけで「現代的JavaScriptおれおれAdvent Calendar」全24回でした。ここまでお付き合い頂きありがとうございました。

良いお年を!

(でもいくつか触れ損ねた話題もあるので、もうちょっとだけ続くんじゃ。既存記事も少し書き足したりします。)

参考