ECMAScript 2015 (ES6) とそれ以降のバージョン
Node.js は V8 のモダンなバージョンに対して作られています。V8 を最新の状態に保つことで JavaScript ECMA-262 の新機能を開発者にすみやかに提供し、継続的なパフォーマンスと安定性の向上を保証しています。
すべての ECMAScript 2015 (ES6) の機能は shipping(リリース済み)、staged(ステージング) と **in progress(開発中)**の3つに分けられています:
- V8 が安定しているとみなす shipping(リリース済み) の機能は Node.js では標準で有効になっているので、ランタイムフラグは必要ありません。
- **staged(ステージング)**の機能は V8 チームによって安定しているとはみなされないほぼ完成した機能であり、ランタイムフラグを必要とします:
--harmony
。 - **in progress(開発中)**の機能は、それぞれのハーモニーフラグによって個別に有効にすることができますが、テスト目的以外の使用は避けてください。注:これらのフラグは V8 によって公開されており、廃止予定の通知なしで変更される可能性があります。
どの機能がどの Node.js のバージョンで標準で有効になってますか?
node.green は Kangax 氏の互換性テーブルに基づいて Node.js のさまざまなバージョンでサポートされている ECMAScript の機能に関する優れた概要を提供します。
どの機能が開発中なのか?
新しい機能は定期的に V8 に追加されています。一般的に、時期は未定ですが、将来の Node.js のリリースで有効になることを期待してください。
--v8-options
を引数に指定した実行結果を grep "in progress"
することで各 Node.js のリリースで利用可能なすべてのの **in progress(開発中)**の機能を列挙することができます。これらはV8の機能完全ではなく動かない可能性があるので、自己責任で使用してください:
node --v8-options | grep "in progress"
インフラ側で --harmony フラグを使うように設定しているんですが、フラグを除くべきですか?
Node.js の --harmony フラグの現在の動作は staged(ステージング) 機能のみを有効にすることです。つまるところ --es_staging
フラグと同じです。上記の通り、これらはまだ安定しているとは考えられていない完成した機能です。特に本番環境で安定して Node.js を使いたい場合は、このランタイムフラグが標準で V8 でリリースされ、その結果 Node.js でも標準になるまでランタイムフラグを削除することを検討してください。このフラグを継続的に利用する場合は Node.js のアップグレードの際に標準に準拠するために変更された V8 に挙動によってコードが動作しなくなる可能性を考慮して対策をする必要があります。
特定のバージョンの Node.js が組み込まれている V8 のバージョンを確認するにはどうすればよいですか?
Node.js は process
グローバルオブジェクトを通じて特定のバイナリに付属するすべての依存関係とそれぞれのバージョンを簡単に列挙する方法を提供します。 V8 エンジンの場合は、端末に次のように入力してバージョンを取得します:
node -p process.versions.v8