ECMAScript 2015 (ES6) 以降
Node.jsは、V8の最新バージョンをベースに構築されています。このエンジンの最新リリースに対応し続けることで、JavaScript ECMA-262仕様の新しい機能がNode.js開発者にタイムリーに提供されることを保証し、パフォーマンスと安定性の継続的な向上も実現しています。
すべてのECMAScript 2015 (ES6) の機能は、shipping (リリース済み)、staged (ステージング)、in progress (進行中) の3つのグループに分類されます。
- shipping の機能は、V8が安定していると判断したものであり、すべてNode.jsでデフォルトで有効になっており、いかなる実行時フラグも必要ありません。
- Staged の機能は、ほぼ完成しているものの、V8チームによってまだ安定しているとは見なされていない機能であり、
--harmonyという実行時フラグが必要です。 - In progress の機能は、それぞれのharmonyフラグによって個別に有効化できますが、テスト目的でない限りは強く非推奨です。注意: これらのフラグはV8によって公開されており、非推奨の通知なしに変更される可能性があります。
どの機能がどのNode.jsバージョンにデフォルトで搭載されていますか?
ウェブサイト node.green は、kangaxのcompat-tableに基づき、Node.jsの様々なバージョンでサポートされているECMAScript機能の優れた概要を提供しています。
どの機能が進行中ですか?
新しい機能は常にV8エンジンに追加されています。一般的に、それらの機能は将来のNode.jsリリースに搭載されることが期待されますが、時期は未定です。
各Node.jsリリースで利用可能なすべてのin progress機能を、--v8-options引数をgrepすることでリストアップできます。これらはV8の不完全で壊れている可能性のある機能であるため、自己責任で使用してください。
node --v8-options | grep "in progress"
--harmonyフラグを活用するようにインフラをセットアップしています。このフラグは削除すべきでしょうか?
Node.jsにおける現在の--harmonyフラグの振る舞いは、staged機能のみを有効にすることです。結局のところ、これは現在--es_stagingの同義語です。前述の通り、これらは完成しているものの、まだ安定しているとは見なされていない機能です。特に本番環境で安全を期したい場合は、V8で、ひいてはNode.jsでデフォルトでリリースされるまで、この実行時フラグを削除することを検討してください。このフラグを有効にし続ける場合、V8が標準に近づけるためにセマンティクスを変更した場合、将来のNode.jsアップグレードでコードが壊れる可能性があることに備えるべきです。
特定のNode.jsバージョンにどのバージョンのV8が搭載されているかを確認するにはどうすればよいですか?
Node.jsは、processグローバルオブジェクトを通じて、特定のバイナリに搭載されているすべての依存関係とそれぞれのバージョンをリストアップする簡単な方法を提供しています。V8エンジンの場合、ターミナルで以下のように入力してバージョンを取得します。
node -p process.versions.v8