Node.js 23.8.0がリリース、require()によるESM読み込みがデフォルトで有効化
Node.jsの開発チームは、最新のマイナーアップデートとなるNode.js 23.8.0をリリースしました。今回のアップデートにおける最大の変更点は、これまで実験的機能として提供されていた「require(esm)」の挙動がデフォルトで有効化されたことです。これにより、CommonJSモジュールからECMAScriptモジュール(ESM)を同期的に読み込む際、コマンドラインフラグを指定する必要がなくなりました。ただし、読み込まれるESM側にトップレベルのawaitが含まれていないことが条件となります。
技術的には、これまで開発者が直面していたモジュール形式の混在による相互運用性の課題が解消されます。Node.js 22.12.0 LTSでも既にフラグ付きで利用可能でしたが、最新ラインである23系において標準化されたことで、ライブラリ作者はCommonJSとESMの両対応をより少ないコード量で実現できるようになります。また、依存関係の解決においてモジュールの種類を厳密に区別する手間が軽減され、エコシステム全体のモダン化が加速することが期待されます。
実務への影響として、既存のCommonJSプロジェクトから最新のESMパッケージをインポートする際の障壁が下がります。一方で、トップレベルawaitを含むESMをrequireしようとするとエラーが発生する制約は残っているため、全てのモジュールが即座に同期的に読み込めるわけではない点に注意が必要です。開発者は、自身のプロジェクトが依存するパッケージの構造を再確認し、必要に応じてパッケージ構成の最適化を検討すべき段階にあります。
フェレット記者の用語メモ
esm
ESM(ECMAScript Modules)はJavaScriptの標準モジュールシステムで、`import`/`export`構文を使うよ。CommonJSの`require`/`module.exports`と違って、静的解析が可能でツリーシェイキングなどの最適化がしやすいのが特徴。Node.js環境でESMを使う場合、パッケージの`type`フィールド設定やファイル拡張子(`.mjs`)の扱いで混乱しやすく、特に既存のCommonJSベースのコードと混在させると、モジュールの解決順序やスコープの違いでエラーが出やすいのが落とし穴だね。
比較: CommonJS
出典: Node.js Open Source Project
要点を短く整理して掲載しています。詳細は出典を確認してください。


