0Pricing
Frontend Academy · レッスン

モジュール:import と export

名前付きエクスポートとデフォルトエクスポートを使ってコードを ES モジュールに分割し、必要なものだけをインポートし、モジュールバンドラーが依存関係グラフを解決する仕組みを理解します。

「モジュール:import と export」はCoddyKit上の無料Frontend Academyレッスンです。 これはレッスン4/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはFrontend Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Frontend Academyコースには全4レッスンが含まれています。

なぜモジュールを使うのか

モジュールが登場する前は、すべてのJavaScriptがグローバルスコープで実行されていました。変数が衝突し、コードの順序が重要で、ファイルも順番に読み込む必要がありました。ES Modulesでは、各ファイルが独自のスコープ、明示的なインポート、tree-shaking可能なエクスポートを持ちます。

名前付きエクスポート

exportキーワードを使って、特定の値をエクスポートします。1つのファイルに複数の名前付きエクスポートを定義できます。利用側では必要なものだけをインポートします。

// utils.js
export const PI = 3.14159;

export function add(a, b) {
  return a + b;
}

export class Vector {
  constructor(x, y) { this.x = x; this.y = y; }
}

名前付きインポート

波括弧を使って名前付きエクスポートをインポートします。1つの文で、1つのモジュールから複数のエクスポートをインポートできます。

import { PI, add, Vector } from './utils.js';

console.log(PI);        // 3.14159
console.log(add(2, 3)); // 5

デフォルトエクスポート

各モジュールには、通常そのモジュールが提供する主な機能となるデフォルトエクスポートを1つ定義できます。波括弧なしでインポートし、任意の名前を付けられます。

// Button.js
export default function Button({ label }) {
  return `<button>${label}</button>`;
}

// Importing:
import Button from './Button.js';
import MyButton from './Button.js'; // any name works

再エクスポート

モジュールは他のモジュールから再エクスポートして、barrelファイルを作成できます。barrelファイルは、複数の機能を再エクスポートする単一のエントリーポイントです。

// components/index.js
export { default as Button } from './Button.js';
export { default as Input } from './Input.js';
export { default as Modal } from './Modal.js';

// Consumer:
import { Button, Input, Modal } from './components';

名前空間インポート

import * as nameを使うと、モジュールのすべてを名前空間オブジェクトにインポートできます。多くのエクスポートが必要な場合や、どのモジュール由来かを明示したい場合に便利です。

import * as utils from './utils.js';

console.log(utils.PI);        // 3.14159
console.log(utils.add(1, 2)); // 3

副作用のみのインポート

一部のモジュールは、副作用(ポリフィルやイベントハンドラーの登録)だけを目的にインポートします。バインディングなしでインポートしてください。

import './polyfills.js'; // runs the code, imports nothing

Dynamic import() — コード分割

動的なimport()関数はPromiseを返します。必要なときだけモジュールを遅延読み込みするために使用してください。バンドラーは、動的にインポートされるモジュール用に別のチャンクを自動的に作成します。

// Load a heavy module only when the button is clicked:
button.addEventListener('click', async () => {
  const { processFile } = await import('./fileProcessor.js');
  processFile(data);
});

import.meta

import.metaは、モジュール内で利用できる特別なオブジェクトです。import.meta.urlはモジュールのURLです。Viteでは、環境変数にimport.meta.envを使用します。

// Vite environment variables:
console.log(import.meta.env.VITE_API_URL);
console.log(import.meta.env.MODE); // 'development' or 'production'

モジュール解決

Viteなどのバンドラーは、ファイルシステム('./utils'のような相対パス)、node_modules('lodash')、またはパスエイリアス(vite.config.jsで設定した'@/components')からモジュールを解決します。

CommonJSとES Modulesの比較

Node.jsはもともとCommonJS(require / module.exports)を使用していました。ブラウザーではES Modules(import / export)を使用します。現在のNode.jsは、package.jsonのtype: "module"によってES Modulesもサポートしています。

// CommonJS (Node.js, older tooling):
const fs = require('fs');
module.exports = { myFunc };

// ES Modules (modern):
import fs from 'fs';
export { myFunc };

確認問題

静的インポートではなくdynamic import()を使用する主な利点は何でしょうか。

まとめ:ES Modules

名前付きエクスポートとインポートは複数の値に使用します。デフォルトエクスポートとインポートは主な機能に使用します。再エクスポートでbarrelファイルを作成できます。Dynamic import()によって遅延読み込みとコード分割が可能になります。import.metaはモジュールのメタデータを提供します。バンドラーはエイリアス、node_modules、相対パスを解決します。

よくある質問

「モジュール:import と export」レッスンは無料ですか?

はい。「モジュール:import と export」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Frontend Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Frontend Academyコースには全4レッスンが含まれています。

「モジュール:import と export」で何を学びますか?

名前付きエクスポートとデフォルトエクスポートを使ってコードを ES モジュールに分割し、必要なものだけをインポートし、モジュールバンドラーが依存関係グラフを解決する仕組みを理解します。 ブラウザで直接実行するハンズオンコードでFrontend Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

Frontend Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのFrontend Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン4/4です。

「モジュール:import と export」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このFrontend Academyレッスンでコードを書いて実行できますか?

はい。すべてのFrontend Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. 配列メソッド:map・filter・reduce・find
  2. オブジェクトの分割代入とスプレッド
  3. テンプレートリテラルとオプショナルチェーン
  4. モジュール:import と export
← Frontend Academyに戻る