io.jsにおけるES6

io.jsは新しいバージョンのV8エンジンを対象にビルドされています。V8エンジンを最新版に保つことで、io.js開発者はECMA-262 specificationで定義されたJavaScriptの新機能をすぐに利用することができます。

io.js 3.3.1はV8 4.4.63.30を利用しています。これはNode.js™ 0.12.xが利用しているV8 3.28.73よりもES6サポートが進んだバージョンです。

--harmonyフラグは不要になります

Node.js™ 0.12.x (V8 3.28+)においては、--harmonyランタイムフラグを使うと実装済みステージング段階開発中のすべてのES6機能(--harmony-proxiesでのみ有効なproxiesを除く)をまとめて有効にします。つまり、Arrow Functionsのような極めてバグの多いもしくは壊れた機能も、ほとんど問題なく使えるgeneratorsなどと同様に有効になるということです。そういった事情から、ほとんどの開発者はharmony featureフラグ(例: --harmony-generators)を使って特定の機能のみを有効にしがちです。

io.js (V8 4.1+)では、こういった複雑なことをする必要は一切ありません。すべてのharmony featuresはshippingstaged、そしてin progressの三つのグループに分けられました。

io.jsでデフォルトで利用可能なES6の新機能

ほかのエンジンとの比較を含むより詳細な一覧が、compat-tableプロジェクトのページで閲覧できます。

--es_stagingフラグで使えるES6の機能

開発段階のES6の機能

V8エンジンには絶えず新機能が追加されています。一般的に、それらの機能は将来的にはio.jsでも使えるようになると言えます。ただし、具体的な時期はまだお伝えできません。

io.jsに--v8-optionsフラグを渡した結果をgrepすることで、どのin progressな機能が利用可能かを一覧表示できます。ただし、それらは未完成で壊れている可能性のある機能であることに注意してください。各自の責任のもとに使用してください。

iojs --v8-options | grep "in progress"

--harmonyフラグを利用したインフラがあります。フラグを無効にすべきですか?

現在のio.jsにおける--harmonyフラグの挙動はstaged featuresのみを有効化するものです。--harmonyフラグはio.jsにおいては--es_stagingフラグと全く同じ作用をします。上述の通り、それらの機能は完成されてはいるものの、まだ安定しているとは言えません。安全を重視すべき場面、特にプロダクション環境であれば、V8、ひいてはio.jsでデフォルトで利用可能になるまでフラグを無効にすることを検討してください。有効化したまま運用するのであれば、V8の動作が仕様に近づくことでセマンティクスに変更があった場合、io.jsのアップグレード時に使用中のコードが意図通りに動作しなくなる可能性に備えてください。

io.jsがどのバージョンのV8を使っているか調べるには?

io.jsは、使用中のio.jsのすべての依存ソフトウェアとそのバージョンを一覧できる簡単な方法を、processグローバルオブジェクトを介して提供しています。例えば、V8エンジンのバージョンを調べるには、ターミナルで以下のコマンドを入力します。

iojs -p process.versions.v8