[まとめ]Webpackの使い方2

以前、Webpackの使い方を学びましたが、復習がてらもう一度学びましょう。

前回のWebpack

Webpack学習の前提条件

Webpackを使用するのには、Node.jsが必要です。

私の環境だと、以下のバージョンで動作しています。

Webpackプロジェクトの作成

以下のディレクトリ上で作業しましょう。

Webpackのインストール

Webpackをインストールします。

terminal上で以下のコマンドを実行してください。

ちなみにコマンドの「–save-dev」は、ローカルの開発用の設定を意味します。

オプション名 内容
-g グローバルに設定(共通設定)
–save ローカル、かつ、公開用の設定
–save-dev ローカル、かつ、開発用の設定

Webpackのビルド

Webpackを使って、ビルドを行いましょう。

ビルド対象のファイルを作成します。

Webpackは、ビルド時にsrcディレクトリを見に行きます(デフォルト)。

以下のコマンドで、ビルドしましょう。

ビルドが成功すると「dist」ディレクトリとその配下に「main.js」ファイルが作成されます。

ちなみに、先ほどコマンド実行した時にWARNINGが出たと思います。

実は、Webpackはmode(production or development)をオプションとして選択することが推奨されています。

main.jsを確認すると以下のように見やすくなっていました。

引数なしだとproduction扱いになり、ファイルを圧縮することでファイルの読み込み速度を上げているっぽいですね。

本番用で使うときは、オプションを無しにするか、「production」を指定してあげると良さそうです。

Webpack -自作ファイルのビルド-

今度は、他のファイルを読み込んだ形で、Webpackの機能を試します。

このファイルを、indexjsから読み込みます。

この状態でビルドします。

main.jsを確認します。

問題なく取り込まれていることがわかります。Webpackはこのように依存関係のあるファイルを一纏めにしてくれる便利ツールです。

Webpack View

distフォルダ配下にindex.htmlを作成して、先ほどビルドしたmain.jsファイルを取り込んで見ましょう。

ブラウザを立ち上げてコンソールを確認すると、処理が動いていることがわかると思います。

F12を押下してコンソールを出そう!

Webpack – HTML/CSS設定 –

Webpackの設定方法を学びましょう。

package.jsonと同階層に以下のファイルを作成してください。

ファイル名は、「webpack.config.js」である必要があります。このファイルをWebpackが自動的に選出してくれます。

Webpack – エントリポイントと出力先の指定

最初は簡単に、ファイルのエントリー先と、出力先を定義します。

出力先は、絶対パスで指定しないとwebpackコマンド実行時にエラーになりますので、ご注意ください。

尚、filenameには、特定のディレクトリ配下も指定できます。

これで、dist/js配下にmain.jsが生成されます。

Webpack – css-loader

css-loaderを追加してください。

これは、他ファイルにインポートされたcssファイルを読み込むためのモジュールです。

Webpackの設定を追加します。

上記は、moduleの中にrulesを設定し、testで検知した拡張子に対するloaderをcss-loaderにするように指定しています。

cssファイルを作成してください。

このファイルをindex.js内で読み込みます。

index.jsからcssファイルを読み込むことができるので、上記でOKです。

webpackコマンドを実行します。

Webpack – style-loader

先ほど、cssのモジュールを読み込めるようにしましたが、スタイルを適用させるためにはstyle-loaderが必要になります。

webpackの設定を書き換えます。

loaderを追加しました。

注意する点としては、loaderは下から順に適用されていくので、css-loaderより上位にstyle-loaderを適用する必要があります。

webpackコマンドでビルドしましょう。

OKですね。

Webpack – mini-css-extract-plugin

適用されたcssをよく見ると、HTMLの中に直接埋め込まれていました。

cssは、別ファイルを分けてインポートした方が良いです。

mini-css-extract-pluginを導入して、この問題を回避しましょう。

設定ファイルを書き換えます。

ビルドします。

main.cssが生成されました。

このファイルを、dist/index.htmlから読み込みましょう。

OKですね。

ちなみに、main.cssから別のファイル名にしたい場合は、設定を変更します。

dist配下にaddin.cssが出力されるはずです。

また、特定のディレクトリ配下に格納したい場合は、以下のようにします。

Webpack – html-webpack-plugin

先ほど、dist/index.htmlファイルを手動で変更しましたが、html-webpack-pluginを使って自動化することができます。

Webpackの設定ファイルを書き換えます。

srcフォルダ配下にindex.htmlを作成します。

ビルドをします。

index.htmlが生成されました。

dist/index.htmlのファイルの中身は以下のようになっています。

今度から、src/index.htmlを修正していけばOKです。

Webpack – ファイル構成設定 –

distの中身を整える方法を学んでいきましょう。

Webpack – clean-webpack-plugin

dist内で不要になったファイルを削除するために、clean-webpack-pluginを導入します。

Webpackの設定ファイルを書き換えます。

distに不要のファイルを追加します。

ビルドします。

先ほど追加したhoge.htmlが消えたと思います。

Webpack – srcとdistの構成を合わせる

srcとdistのファイル構成に乖離が見られるので、整理します。

srcの中身を以下のようにします。

main.jsのimportを書き換えます。

Webpackの設定を変更します。

ビルドします。

distのファイル構成を確認しましょう。

srcとdistのファイル構成が限りなく近くなりました。このようにするとメンテナンス性が上がっていい感じですね。

Webpack – 画像関連 –

Webpackの画像関連操作を学びましょう。

上記のフォルダに読み込み用の画像ファイルを格納します。私は、demo.pngファイル(以下のファイル)を格納しておきました。

demo.png

Webpack – url-loader

url-loaderを使って、画像の読み込みを行います。

Webpackの設定を変更します。

src/templates配下のindex.htmlに先ほど用意した画像を読み込む処理を記述します。

注意する点は、通常のimgタグの書き方と異なっている点です。

これは、loadershのtemplateの構文です。

ビルドしましょう。

ブラウザを確認すると画像が読み込めていることがわかります。

Webpack – file-loader

url-loaderでは、HTMLファイルの中に直接画像情報を書き込むので、ファイルがかなり肥大化されます。

画像は別ファイルに保存される方が望ましいので、file-loaderを使ってみましょう。

Webpackに先ほど設定したurl-loaderの設定をfile-loaderに変更します。

ビルドします。

ビルドに成功したらdistフォルダを確認してください。

「images/background.png」が生成されました。

ちなみに、別の拡張子、複数ファイルを扱いたい時は、以下のようにします。

その他の設定は、公式を参考にしてください。

Webpack – image-webpack-loader

image-webpack-loaderを用いて画像ファイルを圧縮しましょう。

Webpackの設定ファイルを変更します。

この設定を追加した状態でビルドし直すと、ファイルが圧縮されます。

Webpack – HTML生成

Webpackを使ったHTMLの効率的な生成方法について学びましょう。

Webpack – pug-html-loader / html-loader

pug-html-loader / html-loaderを使って、HTMLを効率的に作成します。

Webパックの設定を変更します。

上記は、pug-html-loaderで最初にHTMLを処理し、次にhtml-loaderで処理を行う設定です。

次に、templatesディレクトリ配下に次のファイルを作成します。

公式を参考に、pubを書いてみます。

Webpackの設定では、htmlを処理するようにしていたので、これをpugに変更します。

ビルドします。

Webpack – PUGの複数ファイル設定

pugでは複数のファイルを扱うことも可能です。

Webpackの設定を変更します。

demo.htmlを作成します。

ビルドします。

Webpack – PUGのtemplate

pugで共通している部分はtemplate化したいところです。

以下のファイルを作成してください。

これを、index.pugとdemo.pugに「include」を使って読み込みます。

ビルドします。

ブラウザを表示します。

OKですね。

Webpack – PUGの継承

Djangoのように他のpubファイルからの継承も可能です。

index.pugを編集します。

demo.pugを編集します。

ビルドします。

Webpack – PUGと変数

PUGには、変数を設定できます。

「args」とつけましたが、この名前は何でも良いです。

このブロックに変数化したい要素(ここではtitle)を入れて、#{変数}にて設定を行なっています。

設定した変数は、継承先で書き換えることも可能です。

Webpack – ローカルサーバー

Webpack – webpack-dev-server

webpack-dev-serverでローカルサーバーを立てて、開発を効率的に行いましょう。

以下のコマンドで立ち上げます。

デフォルトのポートは8080番であるため、「localhost:8080」でアクセスできます。

このローカルサーバーを立ち上げている状態で、ファイルの編集を行うと自動的に変更分が画面に反映されるので便利です。

Webpack – SASS

Sassは、CSSを効率的にかけるようにしたCSSを拡張した言語です。

モダンなWebシステム開発では重宝される技術であるため、これをWebpackを用いて開発に導入してみましょう。

Webpack – node-sass / sass-loader

node-sass / sass-loaderを導入しましょう。

node-sassは、Sass自体を取り扱い、sass-loaderはSassファイルをの拡張子ファイルをロードします。

Webpackの設定ファイルの「rules」にsassの設定を追加しましょう。

以前説明しましたが、loaderは書き込み順序の下から読み込まれます。

src配下を確認してみましょう。

main.cssをmain.scssに変更しましょう。

また、src/js配下のmain.jsのimportを変更します。

ローカルサーバーを立ち上げます。

コンパイルは成功しましたね。「localhost:8080」にアクセスしてみましょう。

OKですね。

Webpack – JavaScript(ES6)

Webpack – Babel

Babelは、JavaScriptのコンパイラです。ES6など最新のバージョンで書かれたJavaScriptをコンパイルし、古いバージョンのブラウザでも問題なくJavaScriptをできるようにしてくれます。

Babelをインストールしましょう。

Webpackの設定ファイルの「rules」にBabelの設定を追加しましょう。

ローカルサーバーを立ち上げます。

コンパイルも成功してますね。

Webpack – デバッグ

devtoolを用いたデバッグ方法を確認しましょう。

Webpack – JavaScriptのソースマップ

Webpackの設定に以下の設定を追加すると、JavaScriptなどデバッグしやすい形式に変換してくれるようになります。

ローカルサーバーを立ち上げなおします。

設定前
設定後

Webpack – SASSのソースマップ

Webpackの設定ファイルにSASSのソースマップ設定を追加しましょう。

ローカルサーバーを立ち上げなおします。

SASSのファイルをブラウザ上で確認できるようになります。

この設定は開発の時に有効にすれば良いと思います。

Webpack – pcakage.jsonへコマンド登録

package.jsonにWebpackのコマンドを登録してみましょう。

次のようにコマンドを実行します。

Webpack – React

モダンなフレームワークであるReactもWebpackを使って、開発していくことが可能です。

Webpack – preset-react

preset-reactは、reactを扱うためのパッケージのようなものです。React本体は後ほどインストールしますが、まずはpreset-reactをインストールします。

Webpackの設定ファイルを変更しましょう。

以前追加したJS設定の中に、present-reactを追加してます。

ビルドしましょう。

Webpack – react / react-dom

react / react-domをインストールします。

Webpack – Reactのコンポーネント

reactのコンポーネントを書いてみましょう。

main.jsも書き換えます。

また、index.pubに「div#root」を追加します。

コンパイルします。

画面を確認してみましょう。

問題なく表示されました。

Webpack – TypeScript

最後にTypeScriptの導入方法を学びましょう。

Webpack – typescript / ts-loader

Webpackの設定を変更します。

また、TypeScriptの設定ファイルを作成します。

TypeScriptの設定は、公式サイトを参考にします。

src/jsディレクトリ配下にTypsScriptのファイルを作成します。

数値(number)を引数に持つ関数を定義しました。

これをmain.jsから呼び出します。

「Sum: {add(1, 2)}」を追加しました。画面を表示してみます。

OKですね。

Webpack – @types/react

ReactをTypeScriptで書くことが可能です。

@types/reactをインストールしましょう。

React用のファイルを作成します。

main.js内でDemoコンポーネントを読み込みます。

ビルドしましょう。

OKですね。

まとめ

長くなりましたが、Webpackの使い方が何となくでも分かったのではないでしょうか。

こういった便利ツールは、積極的に取り入れて、モダンな開発環境を構築していきたいですね^^

それでは、また!

Webpack設定

package.jsonの設定

コメントを残す