はじめに
本記事では webpack を利用したフロントエンド開発環境の構築手順や、なぜ webpack を使うのか?などまとめています。
使用するのは webpack5 系を使用します。
webpack とはフロントエンド開発用のモジュールバンドラーです。モジュールバンドラーとは、複数のモジュールをまとめるツールのことを言います。
扱うモジュールは、
- CSS
- JavaScript
- 画像ファイル
などがあり、webpack とはこれらの複数のファイルをまとめるツールです。
webpack の機能
ローダー
webpack は、読み込んだモジュールを JavaScript のファイルに変換します。そのため、CSS や画像ファイルなどはそのまま扱うことが出来ません。JavaScript のファイル以外も webpack で扱うようにするためにはローダー(Loader)を利用する必要があります。
変換するファイルによって使用するローダーも異なるので、その都度インストールする必要があります。
因みに、JavaScript 用のローダーのBabel ローダーなどもあります。Babel ローダーは最新の書き方の JavaScript を古い JavaScript の書き方に変換し、古いブラウザでも読み込めるようにするローダーです。
また、ESLint ローダーなどのコードを検証するローダーもあります。
プラグイン
プラグインとは webpack を拡張させるためのプログラムのことで、下記のような機能を持ったプラグインがあります
- clean-webpack-plugin
- 実行時に出力ディレクトリ内のファイルを一度クリーンアップしてから新しいファイルを出力する
- html-webpack-plugin
- HTML テンプレートからバンドルフ ァイルを読み込んだ HTML ファイルを出力する
- mini-css-extract-plugin
- js ファイルと css ファイルを分割するためのプラグイン
プラグインの実行は、ファイルがバンドルされる前後で実行されます(プラグインによって異なる)
公式ページにプラグインの一覧が掲載されています。
なぜ webpack を使うのか?
これまで webpack の機能について簡単に説明してきましたが、なぜ webpack などのモジュールバンドラーを使用する必要があるのでしょうか。
モジュールバンドラーを使うメリットとして、
- ファイルを分割して開発ができる
- 外部モジュールを簡単に利用できる
- 依存関係を解決したファイルを出力できる
- 最適化したファイルを出力できる
などが挙げられます。
ファイルを分割して開発ができる
ファイルを分割する開発のメリット
-
可読性の向上
- 一つのファイルに複数の機能や、数百行・数千行のコードが書かれているより、ファイルが分割されていたほうが読みやすく理解しやすい
-
開発作業の分担やテストがしやすくなる
- 機能ごとにファイルを分割していれば作業分担やテストがし易い
- 同じファイルを触らなくて済むので、Git などのバージョン管理システムを利用したときにコンフリクトが 発生する可能性も減る
- 誤って本来編集する箇所と別の箇所を更新してしまった、という事故も防げる
-
名前空間を生成出来る
- 変数の競合やグローバル汚染を防げる
- 異なるファイル間で変数の名前が被ったり、予期せぬ変数の上書き発生しないように出来る
-
モジュールの再利用性を高められる
- 汎用性の高いモジュールを開発することでその他のモジュールで使い回すことが出来る
- モジュールを再利用することで複数のファイルに同じロジックをコピペする必要が無くなる
- 修正が発生した場合も、一つのモジュールを修正すれば良いのでモジュールの読み込み先を更新する必要がない
外部モジュールを簡単に利用できる
フロントエンド開発では、Vue や React・jQuery など外部モジュールを利用して開発するのが殆どで、webpack を利用するれば外部モジュールも簡単に利用できます。
依存関係を解決したファイルを出力できる
webpack を使用せずにモジュールを読み込んだ場合、依存関係によっては正常に動作しないことがあります。
<body>
<script src="js/modules/module1.js"></script>
<script src="js/modules/module2.js"></script>
<script src="js/modules/jquery.js"></script>
<script src="js/modules/module3.js"></script>
<!--
↑app.jsはライブラリに依存していた場合、
読み込む順番を間違えると正常に動作しない場合がある
-->
<script src="js/app.js"></script>
</body>
依存関係が増えれば増えるほどコードが分かりにくくなり、ライブラリ同士が依存している場合があるので迂闊にモジュールの読み込み順を変更したり削除したりすることが出来ません。その結果、メンテナンスに多大な労力が掛かってしまいます。
また、依存関係を知っている人はコードを書いた人であり、後からチームに参画したプログラマーが依存関係を理解するのは困難であり余計な工数が掛かってしまいます。
webpack を使用した場合、自動で依存関係を解決したファイルを出力してくれるので、モジュールの読み込み順などを気にせずに済みます。
<body>
<!-- 依存関係を解決してまとめられたファイル -->
<script src="js/bundle.js"></script>
</body>
最適化したファイルを出力できる
webpack を利用することで、ファイルを圧縮したり不要なコードを削除したりして無駄なファイルサイズを削減させたファイルを出力できます。
ファイルサイズが少ないほど読み込み速度が早くなったり、全体の通信量を削減できるので、最適化したファイルを利用することで Web サイトパフォーマンスの向上が期待できます。
実際に webpack を使ってみる
今回は以下の環境で動作させています。webpack はバージョン 5 系を使用しています。
- OS: Windows11
- WSL: Ubuntu-20.04 Version 2
- Node.js: v16.17.0
- Yarn : v1.22.19