モジュールバンドラーとは
モジュールバンドラーは、複数の JavaScript ファイル(モジュール)を1つまたは少数のファイルにまとめるツールです。ブラウザでの読み込みを最適化し、開発体験を向上させます。
なぜバンドラーが必要か
ES Modules をそのままブラウザで使用する場合、いくつかの問題があります。
モジュールごとにリクエストが発生し、特に深い依存関係があるとパフォーマンスが低下します。
node_modules のパッケージをブラウザで直接使用するのは困難です。
バンドラーはこれらの問題を解決し、最適化されたコードを生成します。
バンドラーの役割
複数のモジュールを1つ(または少数)のファイルに結合
依存関係を解決し、必要なコードだけを含める
トランスパイル(ES6+ → ES5 など)と最適化
コード分割で必要なタイミングで読み込み
主要なバンドラー
| ツール | 特徴 |
|---|---|
| Webpack | 高機能で設定の自由度が高い、大規模プロジェクト向け |
| Vite | 高速な開発サーバー、ESM ベース、モダン開発向け |
| Rollup | ライブラリ向け、Tree Shaking に優れる |
| esbuild | 非常に高速、Go 製 |
| Parcel | 設定不要で始められる |
Webpack の基本
// webpack.config.js
export default {
entry: './src/index.js',
output: {
filename: 'bundle.js',
path: '/dist'
},
module: {
rules: [
{
test: /\.js$/,
use: 'babel-loader'
}
]
}
};Vite の基本
Vite は開発時に ES Modules をそのまま使用し、本番ビルドでは Rollup でバンドルします。
// vite.config.js
import { defineConfig } from 'vite';
export default defineConfig({
build: {
outDir: 'dist'
}
});ES Modules をネイティブで使用、変更されたファイルのみ更新(HMR)
Rollup でバンドル、最適化、コード分割
バンドルの仕組み
バンドラーは依存関係グラフを構築し、必要なコードをまとめます。
// entry point: index.js
import { add } from './math.js';
import { format } from './utils.js';
console.log(add(1, 2));依存関係グラフ:
index.js
├── math.js
└── utils.js
└── helper.jsこのグラフに基づいて、すべてのコードが1つのファイルにまとめられます。
開発サーバーと HMR
モダンなバンドラーは、開発サーバーと HMR(Hot Module Replacement)を提供します。
バンドラーなしの選択肢
シンプルなプロジェクトでは、バンドラーなしで ES Modules を直接使用することもできます。
小規模なプロジェクト、プロトタイピング、Import Maps を使用する場合
npm パッケージを多用、本番環境での最適化が必要、レガシーブラウザ対応
バンドラーは現代のフロントエンド開発において重要なツールであり、プロジェクトの規模や要件に応じて適切なツールを選択することが重要です。