JavaScriptにおける「モジュール」の概念は、コードの整理や再利用性を高めるために非常に重要です。モジュールを使うことで、コードを複数のファイルに分けて、必要な部分を他の部分からインポートしたり、外部にエクスポートしたりすることができます。この記事では、JavaScriptにおけるモジュールの「エクスポート(export)」と「インポート(import)」について詳しく解説します。
モジュールとは?
JavaScriptでは、モジュールはコードの一部を分けて管理する仕組みです。これにより、異なるファイル間で関数や変数、クラスなどを共有することが可能になります。モジュールは、通常、export
とimport
キーワードを使って構成されます。

モジュールのエクスポート(export)
「エクスポート」は、あるモジュールから他のモジュールへコードの一部を公開するための手段です。export
を使うことで、他のファイルでそのコードを利用できるようになります。エクスポートの方法にはいくつかの種類があります。
1. 名前付きエクスポート(Named Export)
名前付きエクスポートでは、モジュール内で定義された特定の関数や変数をエクスポートします。エクスポートする際に、名前を指定することができます。
例:
javascript// math.js
export const add = (a, b) => a + b;
export const subtract = (a, b) => a - b;
上記の例では、add
とsubtract
という関数がエクスポートされています。これらの関数は、他のファイルでインポートして使用できます。
2. デフォルトエクスポート(Default Export)
デフォルトエクスポートは、モジュールで最も重要なものをエクスポートしたい場合に使います。一つのモジュールに一つだけデフォルトエクスポートを指定することができます。
例:
javascript// calculator.js
const multiply = (a, b) => a * b;
export default multiply;
この場合、multiply
関数がデフォルトでエクスポートされ、インポート時には任意の名前を使ってインポートすることができます。
3. まとめてエクスポート(Export All)
複数のエクスポートをまとめて行いたい場合には、export
をまとめて使用することもできます。以下のようにして、他のモジュールからエクスポートされたものを再度エクスポートすることができます。
javascript// math.js
const add = (a, b) => a + b;
const subtract = (a, b) => a - b;
export { add, subtract };
// calculator.js
export * from './math';
上記の例では、math.js
からadd
とsubtract
がエクスポートされ、calculator.js
でそれらをまとめて再エクスポートしています。
モジュールのインポート(import)
エクスポートしたコードは、他のファイルでインポートすることで利用できます。インポートの方法もいくつかのパターンがあります。
1. 名前付きインポート(Named Import)
名前付きインポートでは、エクスポート時の名前を使って特定の関数や変数をインポートします。
例:
javascript// app.js
import { add, subtract } from './math';
console.log(add(2, 3)); // 5
console.log(subtract(5, 2)); // 3
この例では、math.js
からadd
とsubtract
関数をインポートして、使用しています。
2. デフォルトインポート(Default Import)
デフォルトインポートでは、モジュールからデフォルトエクスポートされたコードをインポートします。インポート時には名前を任意に指定することができます。
例:
javascript// app.js
import multiply from './calculator';
console.log(multiply(2, 3)); // 6
この場合、calculator.js
のデフォルトエクスポートであるmultiply
関数をインポートしています。
3. 名前の変更(Alias)
インポート時に、エクスポートされた名前を変更することもできます。これを使うと、インポート時に別名を付けて使うことができます。
例:
javascript// app.js
import { add as addition, subtract as difference } from './math';
console.log(addition(3, 4)); // 7
console.log(difference(7, 3)); // 4
この例では、add
をaddition
として、subtract
をdifference
としてインポートしています。
4. まとめてインポート(Import All)
モジュール内でエクスポートされたすべてのものをインポートする場合、* as
を使ってインポートできます。
例:
javascript// app.js
import * as math from './math';
console.log(math.add(1, 2)); // 3
console.log(math.subtract(5, 3)); // 2
このように、math.js
の全てのエクスポートをmath
という名前空間でインポートし、各関数をmath.add
やmath.subtract
として使用しています。
モジュールの相互インポート
モジュール間でインポートとエクスポートを組み合わせて使うことで、複雑な依存関係を管理することができます。ただし、モジュール間で相互に依存する場合は注意が必要です。循環参照(circular reference)に注意し、適切にエクスポートとインポートを管理することが大切です。
結論
JavaScriptにおける「エクスポート」と「インポート」は、コードの再利用性と可読性を向上させる非常に重要な機能です。エクスポートを使って他のモジュールにコードを公開し、インポートを使って他のモジュールからコードを再利用することができます。適切な使い方を理解することで、より効率的で管理しやすいコードを作成することができるでしょう。