JavaScript アドバンス

JS Modules インポート

1. インポート (Import)

モジュールのインポート(import)方法は、エクスポート側が名前付きエクスポート(Named Exports)か、デフォルトエクスポート(Default Exports)かに応じて、大きく2つのパターンに分かれます。

名前付きインポートは、波括弧 { } を使用して記述します。

import { name, age } from "./person.js";

対して、デフォルトエクスポートのインポートでは波括弧を使用しません。

import message from "./message.js";

2. 名前付きインポート (Named Imports)

名前付きインポート(Named Imports)は、モジュール内の名前付きエクスポートに対応するものです。これにより、モジュールから1つ以上の明示的に命名されたバリアブル(変数)やファンクション(関数)を個別にインポートできます。

名前付きインポートでは、必ず波括弧 { } で囲み、エクスポート名と正確に一致させる必要があります。

2.1 実装例

person.js ファイルから名前付きエクスポートである nameage をインポートする例:

import { name, age } from "./person.js";

math.js ファイルから名前付きエクスポートである addsubtract、および PI をインポートする例:

import { add, subtract, PI } from './math.js';

2.2 名前付きインポートのルール

  • 名前の一致: インポートする名前は、エクスポートされた際の名前と一致しなければなりません。
import { addd } from './math.js'; // ❌ エラー(名前の不一致)
  • 複数アイテムのインポート: 一度の宣言で複数のアイテムをインポート可能です。
import { add, PI } from './math.js';
  • リネーム:as キーワードを使用することで、任意の名称に変更してインポートできます。
import { add as addition } from './math.js';

3. デフォルトインポート (Default Import)

デフォルトインポート(Default Import)は、モジュールからメインとなるエクスポート値(export default でエクスポートされたもの)を取り込むための手法です。これは、デフォルトエクスポートと対になる機能です。

デフォルトインポートの場合、波括弧を使用せずに、インポート側で任意の名前を付けることができます。

3.1 実装例

message.js ファイルからデフォルトエクスポートをインポートする例:

// 'text' という任意の名前でインポート
import text from "./message.js";

// 'message' という名前でインポート
import message from "./message.js";

3.2 デフォルトインポートのルール

  • 単一エクスポート: 1つのデフォルトエクスポートをインポートします。
import message from "./message.js";
  • 命名の自由度: 特定の名前は強制されません。リネーム(別名の付与)は自由に行えます。
import text from "./message.js";

4. デフォルト + 名前付きの同時インポート

1つのモジュール内で、メインとなるファンクションといくつかのヘルパー・ファンクションが混在して提供されている場合、これらを同時にインポートできます。

モジュールファイル (parser.js):

export default function parse() { ... }

export function validate() { ... }
export function format() { ... }

モジュールスクリプト:

import parse, { validate, format } from './parser.js';

5. すべてを一括でインポートする

* シンボル(ワイルドカード)を使用すると、モジュール内のすべての名前付きエクスポートを単一のオブジェクトとしてインポートできます。

5.1 実装例

person.js からすべての名前付きエクスポートをインポートする場合:

// すべての名前付きエクスポートを 'person' オブジェクトとしてインポート
import * as person from "./person.js";

math.js からすべての名前付きエクスポートをインポートする場合:

// すべての名前付きエクスポートを 'math' オブジェクトとしてインポート
import * as math from "./math.js";

6. デフォルトインポート vs 名前付きインポート

特徴デフォルトインポート (Default Import)名前付きインポート (Named Import)
典型的なユースケース1モジュールにつき1つの主要機能1モジュールに複数の機能が存在する場合
エクスポート名との一致不要(自由に選択可能)必要(完全に一致させる)
自由なリネーム常に可能as キーワードを使用時のみ可能
エクスポート可能な数1つのモジュールにつき1つまで複数のエクスポートが可能