SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

HTML/JavaScript開発作業を効率化する便利ツールの活用

Webページの構成ファイルをまとめる、モジュールバンドラー「webpack」入門

HTML/JavaScript開発作業を効率化する便利ツールの活用 第9回

  • X ポスト
  • このエントリーをはてなブックマークに追加

webpackをコマンドラインで利用する

 ここでは、webpackをコマンドラインから実行して、複数のJavaScriptファイルをまとめる例を説明します。事前に前述した「必要な環境の準備」を実行して、webpackをインストールしておいてください。

サンプルの構成

 本記事のサンプルは共通して、表1のファイルで構成されています。ファイル名の「***」は、モジュールの記述形式によって「common」「amd」「es6」となっています。

表1 サンプルを構成するファイル
No. ファイル名 説明
1 index.html JavaScript実行結果を表示するHTMLファイル
2 index.js greet-***.jsのモジュールを実行するJavaScript
3 greet-***.js あいさつ文を返す関数(sayHello、sayBye)を含むJavaScriptオブジェクトを返すモジュール
4 str-***.js モジュール形式名の文字列を含むモジュール
5 func-***.js 文字列の後ろに「モジュール」を付加する関数を含むモジュール

 No.2~5のJavaScriptファイルには、図2のような参照関係があります。

図2 サンプルに含まれるJavaScriptファイルの参照関係
図2 サンプルに含まれるJavaScriptファイルの参照関係

CommonJS形式のサンプルでwebpackを試す

 まず、CommonJS形式のサンプル(001-commonjs)を例に説明していきます。後述のwebpackの処理を行った後でindex.htmlをブラウザーで表示すると、sayHello、sayByeメソッドで取得したあいさつ文が画面に表示されます。

図3 サンプルコードの実行結果(001-commonjs)
図3 サンプルコードの実行結果(001-commonjs)

 CommonJS形式では、モジュールとして公開したいオブジェクトをmodule.exports変数に代入します。文字列を公開するstr-common.jsはリスト3の通りになります。

リスト3 文字列を公開するCommonJS形式モジュール(001-commonjs/str-common.js)
// 文字列をモジュールとして公開
module.exports = "CommonJS";

 同じ方法で、func-common.jsでは、リスト4の通りに、引数の文字列の後ろに「モジュール」という文字列を付加する関数を公開します。

リスト4 関数を公開するCommonJS形式モジュール(001-commonjs/func-common.js)
// 関数をモジュールとして公開
module.exports = function(input) {
  return input + "モジュール";
}

 モジュールで公開された変数や関数を参照するには、リスト5の通りにrequireメソッドを利用します。

リスト5 ほかのモジュールを参照するCommonJS形式モジュール(001-commonjs/greet-common.js)
// モジュールとして公開された文字列と関数を参照 ...(1)
var formatName = require("./str-common");
var suffixFunc = require("./func-common");
// 関数を含むJavaScriptオブジェクトをモジュールとして公開 ...(2)
module.exports = {
  sayHello:function(){
    return suffixFunc(formatName) + "からこんにちは!";
  },
  sayBye:function() {
    return suffixFunc(formatName) + "からさようなら!"
  }
}

 (1)のrequireメソッドで、リスト3、4のモジュールから文字列と関数を参照して、変数formatName、suffixFuncに格納します。それらを利用して、文字列「~からこんにちは!」を返すsayHelloメソッドと、「~からさようなら!」を返すsayByeメソッドを含むJavaScriptオブジェクトを記述して(2)のmodule.exportsに代入することで、モジュールとして公開します。

 リスト5のモジュールを利用する記述はリスト6です。(1)のrequireメソッドでモジュールを参照して、(2)でモジュールのsayHello、sayByeメソッドを実行しています。

リスト6 リスト5のモジュールを参照する実装(001-commonjs/index.js)
// greet-commonモジュールを参照 ...(1)
var module = require("./greet-common");
window.addEventListener("load", function(){
  // モジュールのメソッドを実行 ...(2)
  document.getElementById("output1").textContent
  = module.sayHello();
  document.getElementById("output2").textContent
  = module.sayBye();
}, false);

 リスト3~6はそのままではブラウザーで実行できません。ここでwebpackの出番です。リスト7のコマンドで、リスト3~6の内容をまとめたJavaScriptファイルを作ります。

リスト7 webpackでJavaScriptファイルをまとめる
webpack index.js bundle.js

 コマンドの第1引数は入力ファイル名、最後の引数はまとめた結果を出力するファイル名です。index.js以外のファイル(greet-common.js、str-common.js、func-common.js)はコマンド引数に指定されていませんが、webpackが依存関係を自動的に検出して、bundle.jsに含めるように処理します。なお、「webpack <入力ファイル名1> <入力ファイル名2> ... <出力ファイル名>」のように、入力ファイルを複数指定することもできます。

 生成されたbundle.jsを、HTMLファイルで参照するように記述してWebページを表示すると、bundle.jsに含まれるリスト3~6の内容が実行されて、図3のように表示されます。

 ここで、生成されたbundle.jsをエディターで開くと、リスト3~6の内容のほかに、ブラウザーで実行するためのコードが追加されていることが確認できます。

図4 webpackが生成したJavaScriptファイルの一部(001-commonjs/bundle.js)
図4 webpackが生成したJavaScriptファイルの一部(001-commonjs/bundle.js)

次のページ
webpackが対応するモジュール形式の説明

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
HTML/JavaScript開発作業を効率化する便利ツールの活用連載記事一覧

もっと読む

この記事の著者

WINGSプロジェクト  吉川 英一(ヨシカワ エイイチ)

WINGSプロジェクトについて> 有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。2018年11月時点での登録メンバは55名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂きたい。著書記事多数。 RSS Twitter: @yyamada(公式)、@yyamada/wings(メンバーリスト) Facebook

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

山田 祥寛(ヤマダ ヨシヒロ)

静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for Visual Studio and Development Technologies。執筆コミュニティ「WINGSプロジェクト」代表。主な著書に「独習シリーズ(Java・C#・Python・PHP・Ruby・JSP&サーブレットなど)」「速習シリーズ(ASP.NET Core・Vue.js・React・TypeScript・ECMAScript、Laravelなど)」「改訂3版JavaScript本格入門」「これからはじめるReact実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/10408 2017/09/11 14:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング