webpackでビルドしてみよう
早速, Webpackを使ってビルドしていきましょう!
目次
構成の準備
ファイル位置
まずは、元となるソースが入っている場所と、出力場所を分けましょう。ここでは、src/
ディレクトリに元となるファイルを、dist/assets/
にはビルド後のファイルが入るようにします。
project/ ├ dist/ │ ├ assets/ │ └ index.html ├ node_modules/ │ └ ... ├ src/ │ └ index.js ├ package-lock.json └ package.json
node_modulesは今後省略します。
ビルドしたjsを読み込むHTMLの準備
次に、ブラウザで動作させるため、HTMLファイルを作成します。
<!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <!-- 読み込みはビルド後のファイル --> <script src="assets/main.js"></script> <title>Document</title> </head> <body> <div id="app"> <p>Hello, World!!</p> </div> </body> </html>
とりあえずブラウザで表示するための前準備は整いました。
ビルドするjsの準備
srcディレクトリ内にindex.js
を作り、適当なコードを書きましょう。
console.log("Hello, World!!");
webpackの軽い設定
次に、ビルドのための設定を書きます。プロジェクトのpackage.json
と並べてwebpack.config.js
を用意してください。
project/ ├ dist/ │ ├ assets/ │ └ index.html ├ src/ │ └ index.js ├ package-lock.json ├ package.json └ webpack.config.js <- これ
以下のような設定を作りましょう。
const dist = "/dist/assets/"; module.exports = { entry: { main: "./src/index.js" }, output: { filename: "[name].js", path: __dirname + dist, } }
entry
はコンパイルするファイルの原点です。ここで指定したファイルを基準として依存関係を解決していきます。C言語だとmain
関数があるファイルを指定している感じです。
output
は出力先を指定します。path
はファイル名ではなくディレクトリを指定します。ここで、path
は絶対パスです。__dirname
を付けることで実行中のディレクトリが指定されます。
output
で[name].js
とすることで、entry
にある連想配列のキー (main: "..."
のmain
という名前) がファイル名に利用されます。
entry
のデフォルトはmain: "./src/index.js"
らしいのですが、明記されていないのでしっかり書くほうが無難です。
しばしばpath.resolve("./src/...")
のような書き方を見ますが、それはpath
というパッケージを利用しており、相対パスを絶対パスに変換したりできます。npm i path
で導入できます。
ビルドコマンドの設定
Webpackのビルドについて検索すると、しばしば
npm run dev npm run watch
のようなコマンドが登場します。しかし、設定をしないとこれらは使えません。この設定は、package.json
に書く必要があります。
{ // ... "scripts": { "dev": "webpack --mode development", "build": "webpack --mode production", "watch": "webpack --mode development --watch --color --progress", "watch-poll": "npm run watch -- --watch-options-poll=1000", "test": "echo \"Error: no test specified\" && exit 1" }, // ... }
scripts
にdev
、build
、watch
が増えました。この設定がない場合。
npx webpack --mode development
のような長いコマンドを打つ必要が出てきます。scripts
に書いたものは、npm run コマンド名
で実行できるようになります。コマンド名は、scripts
内のキーがコマンド名になります。
npxは、npmで導入したパッケージのコマンドを実行するためのものです。webpackを導入すると、npx経由でwebpackというコマンドが使えるようになります。
ビルドする
早速ビルドしましょう!
npm run dev
を実行してください。ここで、webpack-cli
を導入していなければ導入するか聞かれるので、yes
としてください。
赤色のエラーっぽいのがなく、./dist/assets/
にmain.js
が作成されていたら成功です!
早速ブラウザで開いて動作しているか確認してみましょう。

これで完了です!
更新時に自動でビルド (watch)
これまでの設定でビルドはできるようになりました。しかし、ちょっと更新するたびにビルドを手動で走らせるのは面倒です。そこで、自動でビルドされるようにします。
{ // ... "scripts": { "dev": "webpack --mode development", "build": "webpack --mode production", // この2行 "watch": "webpack --mode development --watch --color --progress", "watch-poll": "npm run watch -- --watch-options-poll=1000", "test": "echo \"Error: no test specified\" && exit 1" } }
dev
等と同様に、npm run watch
を実行します。
npm run watch
これで、ビルド対象のファイルを更新した際に、自動でビルドされるようになります。今までと比べると圧倒的にテストが楽になりましたね!
ただ、webpack.config.js
を更新したり、新しいパッケージを導入した際は必ずnpm run watch
し直しましょう。
Docker環境など, 一部ではwatch
でうまく検知してくれない場合があります。その場合はwatch-poll
の方を使うとうまくいく可能性があります。
poll
では、一定時間ごとに状態を確認してくれて、差分があればビルドしてくれます。
まとめ
webpackでは、とりあえずentry
とoutput
、コマンドを整備すればひとまずビルド環境は完成します。しかし、ファイル更新のたびにビルドを走らせるのは面倒です。
次はファイル更新時に自動でビルドされるような方法を見ていきましょう。
