JavaScriptのバージョンがややこしい

# ES6ってなに?
「ECMAScriptってなんですか？？」とか「トランスパイラって何ですか？」とか「JavaScriptの勉強始めたものの，Webの記事が何かよくわからないんですよおおおおお」って感じの話を学生から聞くことが多くなってきたので，ざっくりとまとめたいと思った次第です。JavaScriptをちゃんと触りたいなんて考えている学生の助けになればと思います。

# 1995年に開発された言語
何回か名前が変わっているから余計ややこしくて，途中でJavaScriptって名前に変わりました。今から勉強を始めるなら，JavaScriptに名前が変わったあたりのことから知っていれば十分な気がします。時代に取り残されそうなのでできるだけ最近のことを書きたいと思います。

# Javaとは違う
当時注目を集めていたJavaと非常に似た名前なのに，言語としてはSelfとかに近かったりというあたりが，さらなる混乱を生む原因なのかもしれません。Javaがしっくり来ている学生にとってはカオスで，Javaがピンとこない学生にとってはJavaScriptの方がわかりやすいという話を学生から結構聞きます。基本を学んでいる段階での意見なので何とも言えないですが，相関関係とかちゃんと調べてみたら面白いかもしれないとぼんやり思ってみたり。

# 標準化という作業
JavaScriptという言語のはずなのにES2015とかいう名前が出てくるのは，標準化しているからと覚えておけばいいかと思います。言語は開発が進むと当然巨大なものになり，複数人で開発したり，バックボーンの異なる人たちが機能の追加を考えた場合，同じ機能でも実装の差異が生まれたりします。言語の設計から複数の実装が生まれる可能性があるわけです。「同じ商品でも地域によって味付けが違う」状態とでも言いますか。
食べ物なら，地域の特色ということで楽しめますが，同じ言語で開発しているはずなのに，その結果，実装次第で動く機能と動かない機能があるなんて言う状態は困るわけです。だから，「この言語はこういうものだよ！」って共通ルールが必要になってくるのだと思います。私は言語を作成したことがないので，このあたりは想像です。昔のWebブラウザはブラウザごとに独自実装が多かったのはこういった標準化がなされていなかったからですね。
で，この標準化案を非営利の標準化団体Ecmaに提出したため，ECMA-26（JavaScript）という存在が出来上がったようです（出来上がったというか，共通ルールが公開されたっていう表現の方が正しいかも）。

# EcmaScriptとJavaScript
この二つの関係はEcmaの仕様（これがECMAScriptと呼ばれているものです）を実装したもの（実際に動くようにしたもの）がJavaScriptという関係です。イデアと実体とでも言いましょうか。実際に使うときは同じものを指していると考えていいのではないかと思いますが，厳密にECMAScriptにはバージョンがあるわけで，けれど，JavaScriptにはバージョン表記が全然見当たらなくて何だこりゃってなるってのが実情なのかなと思います。

# ブラウザの対応
JavaScriptは当初Webブラウザ上で動くものでした。最近はNode.jsなどの人気でサーバサイドやデスクトップアプリなど，使える範囲が拡大しましたが，数年前はとにかくWebブラウザで動くものって認識でした。
とりあえずWebブラウザの話をしますが，今のほとんどのブラウザはECMAScriptのバージョン5.1に対応しています。これが「ES5」と言われてるものです。
その後に公開されたECMAScirpt 2015が「ES6」と呼ばれます。公表前にはHarmonyという名前で呼ばれていたため，呼び方が「Harmony」とか「ES6 Harmony」とか「ES6」「ES2015」「ECMAScript 2015」って感じで大量の呼び方が出てきたため，結局なんなんだよ状態になってしまったんだと思います。
そして，使用するときはJavaScriptなんだけど，できることはベースとなっているECMAScriptのバージョンによって厳密に異なるわけで，過渡期であるがゆえにみんなが積極的に情報発信をして，そんな新旧多くの情報に検索一発でアクセスできてしまうのがいい時代ではあるのですけど，荒波になっているのかもしれません。
昔からJavaScript追いかけている人には全然どうということない事態かもしれませんが，JavaScriptの勉強を始めたいと思っていて，しっかり調べてちゃんと使おうと思っている（そもそもプログラミングの勉強を始めたばかり）の人ほど「きぇええええええええ！」となってしまうのかなと想像しています。私もJavaScriptには明るくないので，よく「きぇええええええええええ！！」ってなります。

# ES2015
さて，そんなことを言っても，新しいバージョンが公開されればブラウザの対応も進み，そのうちES2015にもばっちり対応してくれるでしょう。私はES5を使い始めた当初は何だこれはとなりましたが，今では楽しい言語と感じています。ただ，現行のWebブラウザではES2015の仕様にのっとって書いたとしても，全然対応が進んでいない時期がどうしても出てきます。で，世の中の素敵な人たちが考えるのが，「新しい書き方で動かないなら，新しい書き方（JavaScriptでいえばES2015）のプログラムを現行（JavaScriptで言えばES5）の書き方に変換できるようにしたらみんなハッピーなんじゃないか」です。この変換を「トランスパイル」といい，トランスパイルを行うために作られ使われるものが「トランスパイラ（トランスコンパイラ）」という存在です。今回のES2015では「[Babel](https://babeljs.io/)」がよく話題にとして見つかるかなと思います。今回はES2015に関連する，何が何だかわからないを解決する記事なので，Babelを使ったトランスパイルの仕方などはこの記事には含みません。すいません。多くの方が記事にされているのでまあいいかなという思いもあります。
最先端とその利用を考える人がいて，その情報が発信されて，そして世間に浸透するまでにどうしてもラグがあります。だから，容易に検索にヒットするときにはラグを吸収しきれずになんだこれはって記事になってしまうこともあるかと思うと，ほんとに難しいです。こんな記事を今書いている私も私ですが，主要ブラウザもES2015の記述が90%以上が動作するようになってきているようです（[ここを見ました](http://kangax.github.io/compat-table/es6/)）。そのうちトランスパイルなしでそのままES2015の記述が100%動くようになるはずなので，楽しみですね。そして近々この記事も「なんだこれは」となるわけです。諸行無常。
[公式サイト](http://www.ecma-international.org/ecma-262/6.0/index.html)を見ている限り，「ECMAScriptの6番目のエディションをECMAScript 2015」と呼ぶという感じです。略称は「ES2015」でしょうか。今後，1年単位で更新されていく予定のようです。

# 結論
* ECMAScript 2015
* 仕様が決まっても，実行環境が整備されるには時間がかかる
* 実行環境が対応してくれるまではトランスパイラのお世話になろう（制作者への感謝を忘れずに）

# 心に誓ったこと
* ぼんやり使っているのはよくないので，できるだけ言語化する
* 世の中の速度が速いので，一緒に走る努力を忘れない
* いつかはトランスパイラみたいに，開発者を助けるものを作りたい