ES Modules: コードの分割と再利用
import/export でコードを整理。現代JSの標準。
モジュール
独自スコープを持つJSファイル。
export
他のモジュールに公開。
import
他のモジュールから取り込む。
モジュール基礎
ES Modules (ESM) は JavaScript 純正のモジュールシステムです。ファイルごとにスコープが閉じているため、`var` のようなグローバル汚染の心配がありません。必要な機能だけを明示的に読み込むことで、コードの見通しと保守性が劇的に向上します。
// math.js - エクスポートexport const PI = 3.14159;export function add(a, b) { return a + b; }export default class Calculator { /* ... */ }
// app.js - インポートimport Calculator, { PI, add } from './math.js';import * as math from './math.js';
console.log(PI); // 3.14159console.log(add(2, 3)); // 5Bad
// ❌ Bad: グローバル変数var total = 0;function add(x) { total += x; }// 他のスクリプトと衝突する可能性Good
// Good - Module Scopelet total = 0; // Module scope onlyexport function add(x) { total += x; }export function get() { return total; }パターン
// 名前付きエクスポートexport { foo, bar };export { foo as myFoo };
// 再エクスポート(バレルファイル)// components/index.jsexport { Button } from './Button';export { Modal } from './Modal';export { Card } from './Card';
// 使用側import { Button, Modal, Card } from './components';
// ダイナミックインポートconst module = await import('./heavy-module.js'); Tip: バレルファイル(index.js)で複数エクスポートをまとめると便利。
合格ライン
名前付きエクスポートとデフォルトエクスポートを使い分けられる
ダイナミックインポートを使える
演習課題
課題1: ES Modules
import/export でモジュールを分割してください。
課題2: 動的インポート
動的インポートでコード分割を実装してください。