SHOEISHA iD

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

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

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

Web作成の定形作業を自動化できるJavaScriptタスク実行環境Grunt

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


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

Gruntを使ってみよう

 それではGruntを使ってみましょう。本記事ではcontrib-uglifyプラグインの機能でJavaScriptの最小化を行う例を紹介します。今回利用するHelloGruntサンプルは本記事のサンプルコードとしてダウンロードできます。Webページのボタンが押された時に現在時刻を表示したり背景色を変更したりする単純なサンプルです。

図4 今回使用するサンプルプログラムの実行例
図4 今回使用するサンプルプログラムの実行例

 サンプルのファイル構成は表2のような構成になっています。

表2 HelloGruntサンプルの構成
フォルダ ファイル ファイル内容
HelloGrunt index.html Webページファイル
HelloGrunt/js_src color.js 背景色を変更する処理のJavaScriptファイル
HelloGrunt/js_src timer.js 現在時刻を表示する処理のJavaScriptファイル

 ここではtimer.jsの内容をリスト3に示します。ボタン押下によりsetInterval/clearIntervalメソッドで時刻表示処理の開始/停止を行う内容ですが、ここでは処理内容そのものよりも、コメントやスペース・改行で整形されている(=最小化されていない)ことに注目してください。これ以外のソースファイルについてはダウンロードできるサンプルコードを参照してください。

リスト3 サンプルコードに含まれるJavaScript(timer.js)
// jQueryの初期化処理
$(function(){
    // setIntervalのID
    var intervalID = null;

    // ボタンハンドラ
    $("#toggle-timer").on("click", function(){
        // タイマーが実行されていない場合はタイマー開始
        if (intervalID == null) {
            startTimer();
        }
        // タイマー実行中の場合はタイマー終了
        else {
            stopTimer();
        }
    });

    /**
     * タイマー開始
     */
    var startTimer = function(){
        if (intervalID == null) {
            intervalID = setInterval(function(){
                $("#now-time").text(new Date().toLocaleString());
            }, 1000);
        }
    };

    /**
     * タイマー終了
     */
    var stopTimer = function(){
        if (intervalID != null) {
            clearInterval(intervalID);
            intervalID = null;
        }
    };
});

 以下で、HelloGruntサンプル内のcolor.jsとtimer.jsを、Gruntのcontrib-uglifyプラグインで最小化するよう設定していきます。

サンプルプロジェクトの設定

 以下の操作を行う前に「必要な環境の準備」に従ってGruntコマンドラインのインストールを完了させておいてください。

 まずHelloGruntプロジェクトを初期化します。コマンドプロンプトでHelloGruntフォルダに移動してリスト4のコマンドを実行します。

リスト4 HelloGruntプロジェクトを初期化しpackage.jsonを生成するコマンド
npm init

 コマンドプロンプトでプロジェクト名やバージョンなどを聞かれますが、ここでは全て改行キーを押して完了させます。結果として生成されるpackage.jsonは、プロジェクト名や依存ライブラリなど、HelloGruntプロジェクトに関連する情報が記述されるファイルです。今回の操作には不要な情報も含まれるので、プロジェクト名とバージョンだけを残してリスト5のようにします。

リスト5 package.jsonの初期値
{
  "name": "HelloGrunt",
  "version": "1.0.0"
}

 次にGrunt自身と、JavaScriptファイルを最小化するcontrib-uglifyプラグインをHelloGruntプロジェクトにインストールします。リスト6のコマンドを実行します。

リスト6 HelloGruntプロジェクトにGruntとプラグインをインストールするコマンド
npm install grunt --save-dev
npm install grunt-contrib-uglify --save-dev

 コマンドを実行するとプロジェクトフォルダ内にnode_modulesフォルダが生成され、Gruntとプラグインが格納されます。ここでコマンドに指定している--save-devオプションは、開発に使用するライブラリの情報をdevDependenciesとしてpackage.jsonに追加することを意味しており、package.jsonはリスト7のように変化します。

リスト7 package.jsonにGruntとプラグインの情報が追加される
{
  "name": "HelloGrunt",
  "version": "1.0.0",
  "devDependencies": {
    "grunt": "^0.4.5",
    "grunt-contrib-uglify": "^0.7.0"
  }
}

 リスト7のdevDependenciesにはGrunt本体("grunt")とcontrib-uglifyプラグイン("grunt-contrib-uglify")を使用することが記載されます。「^0.4.5」「^0.7.0」はバージョン指定で、先頭の「^」はパッケージのマイナーアップグレードを許容する(指定バージョンよりも新しいマイナーアップグレードがあった場合はそちらをインストールする)ことを表しています。「~0.4.5」のように「~」を指定すると不具合修正などのパッチのみがインストールされ、マイナーアップグレードはインストールされなくなります。

 なお別の方法として、リスト7のpackage.jsonをプロジェクトフォルダに配置してリスト8のコマンドを実行すると、package.jsonに記載された内容を解釈してGruntとプラグインがインストールされます。

リスト8 package.jsonに記述されたGruntとプラグインをインストールするコマンド
npm install

次のページ
まとめ

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

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

もっと読む

この記事の著者

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

静岡県榛原町生まれ。一橋大学経済学部卒業後、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編 」他、著書多数

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

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

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

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

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

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/8556 2015/06/15 13:56

おすすめ

アクセスランキング

アクセスランキング

イベント

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

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

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

メールバックナンバー

アクセスランキング

アクセスランキング