ECMAScript 6はその目的を達成しつつあるが,ブラウザの実装レベルがあまりにも多様であるため,開発者は目標を絞ることができていない。そのために最近では,JavaScriptトランスパイラの6to5に注目が集まっている。その開発チームが先頃,競合するesnextの開発陣がプロジェクトに参加することを発表した。
2014年9月のSebastian McKenzie氏による最初のコミット以降,6to5は,実行環境の互換性問題に悩まされずにES6構文でコードを記述したいと願う開発者にとって,格好のツールになった。ある互換性チャートによれば,6to5はES6の機能を最も数多く実装したソフトウェアである。
6to5を使用すると,次のES6コードは,
class User extends Model { constructor() { super(); this.sayHello(); } sayHello() { alert("Hello World!"); } }
このように有効なES5コードにコンパイルされる。
var User = function User() { Model.call(this); this.sayHello(); }; _inherits(User, Model); User.prototype.sayHello = function () { alert("Hello World!"); };
Brian Donovan氏の開発したesnextのコミュニティはもっと小さく,ember.jsの開発関係者が大部分を占めている。開発に参加する理由をInfoQが尋ねたところ,ember.jsのメンバであるStefan Penner氏は次のように答えてくれた。
esnextと6to5の両方が継続すれば,非常によく似たソリューションが重複して存在することになります。これら2つのコミュニティは,解決しようとする問題も同じであることから,同じような努力を必要とする上に,ユーザの選択もさらに難しくなります。
Penner氏はES6のトランスパイルに関して,さらに“仕様準拠性の洗練と改良,処理時間の改善,ドキュメントの充実,理想的にはデファクトソリューションとなることに注力する”必要がある,と述べている。
Mckenzie氏によれば,esnextのコードを6to5のコードベースに取り入れる予定はないが,プロジェクトには貴重な才能が加わることになる。
6to5のコードベースは変わりません。esnextからは何も継承しません。リーダのBrian Donovanは,6to5のコア開発に参加します。Stefan Pennerは開発プロセスに関与する他,Emberのインテグレーションなどにも参加する予定です。
6to5はGoogleのTraceurに大きな影響を受けているが,採用しているアプローチは異なる。6to5ではターゲットとする環境の互換性の違いに応じて,開発者が個々の変換を無効にすることができる。polyfillが必要な機能はいくつかあるが,ランタイムは必要ではない。
6to5を使用している開発者たちは,そのセットアップガイドや生成するコードの品質を称賛している。Node.jsやgrunt,gulpといった数多くのビルドシステムにも統合されている。
Durandalは,Aureliaと呼ばれる次世代バージョンから6to5の利用を開始する予定だ。Durandalを開発したRob Eisenberg氏は,数多くのオプションを検討したが,コンパイル結果,ランタイムが不要であること,ES6仕様への準拠性から,自身にとって6to5が適切な選択だった,と述べている。
6to5の開発チームのレスポンスはとても迅速でした。彼らは頻繁に,時には一日に何回もリリースしています。本当に一生懸命なのです。プロジェクトに対して大きな熱意を持っているのが,こちらにも伝わってきます。[Aureliaは]単純なES6プロジェクトではありませんが,現在は6to5で順調に開発を進めています。SystemJSやRequireJSのような,さまざまなモジュールローダで使用するための,複数のモジュールフォーマットへのコンパイルなどでも問題ありません。
プロジェクトの名前からは,ES6をES5にトランスパイルするだけのように思われるが,最終的には名前も変更して,“JavaScript/ECMAScriptの今後の全バージョン”をサポートしたい,とMckenzie氏は言う。
6to5という名前のせいで,ES6が広くサポートされるまでの,短期間のソリューションであるという印象を持たれています。すべてのブラウザと環境がES6をサポートするまで,まだかなりの時間が掛かるでしょうから,必ずしもこれは事実ではありません。
訂正: この記事の初期版では,Stefan Penner氏をesnextの開発者として紹介していた。正しくは,Penner氏はember-cliの開発者である。ember-cliはesnextを使用していて,現在はember.jsコアチームの一部となっている。esnextを開発したのは,Brian Donovan氏である。