ESモジュール(import, export)

Node.jsにおける「ESモジュール(ECMAScript Modules)」は、JavaScriptの標準的なモジュールシステムであり、ブラウザとNode.jsの両方で利用可能です。以下にESモジュールの仕組みとNode.jsでの使用方法について詳しく説明します。


1. ESモジュールの基本構文

エクスポート(export

ESモジュールでは、関数や変数、クラスなどを他のファイルから利用可能にするために export を使います。

js
// math.js export function add(a, b) { return a + b; } export const PI = 3.14;

1つのデフォルトエクスポートも可能です:

js
// greet.js export default function greet(name) { return `Hello, ${name}`; }

インポート(import

モジュールでエクスポートされたものを使うためには import を使います。

js
// app.js import { add, PI } from './math.js'; import greet from './greet.js'; console.log(add(2, 3)); // 5 console.log(PI); // 3.14 console.log(greet('Taro')); // Hello, Taro

2. Node.jsにおけるESモジュールの使用方法

Node.jsでは、従来のCommonJS(require, module.exports)に加えて、ESモジュールも公式にサポートされています。ただし、いくつかの条件があります。

2.1 .mjs拡張子を使う

ファイル名を .mjs にすると、Node.jsはそのファイルをESモジュールとして扱います。

bash
node app.mjs

2.2 package.jsontype: "module" を指定する

プロジェクト全体で.js拡張子を使いつつESモジュールとして扱いたい場合は、package.json に以下の設定を加えます:

json
{ "type": "module" }

この設定により、.jsファイルがESモジュールとして解釈されます。


3. ESモジュールとCommonJSの違い

比較項目 ESモジュール (import/export) CommonJS (require/module.exports)
読み込み方式 静的(事前に解析) 動的(実行時に読み込む)
非同期対応 import()関数で可能 requireは同期のみ
ファイル拡張子 .mjs または type: "module" .js(デフォルト)
対応環境 ブラウザ・Node.js Node.js専用

4. 注意点

  • import 文はファイルの先頭でのみ使用可能です(トップレベル)。

  • CommonJSのモジュールは import で直接読み込めないことがあります(逆も同様)。

  • ESモジュールでは __dirname__filename は使えません。代わりに以下のように記述します:

js
import { fileURLToPath } from 'url'; import { dirname } from 'path'; const __filename = fileURLToPath(import.meta.url); const __dirname = dirname(__filename);

5. まとめ

  • ESモジュールは、JavaScriptの標準的なモジュールシステムであり、モダンなコード開発に推奨されます。

  • Node.jsでは .mjs 拡張子か type: "module" を使うことで有効化できます。

  • 静的構文とトップレベルのimport/exportにより、パフォーマンスやツールによる最適化が可能です。

必要に応じてCommonJSとの互換性も考慮しながら使い分けるとよいでしょう。

ChatGPT4o 生成日:2025/06/25