Gruntの使い方

Gruntを使い始めてから半年経った。Gruntは主にJavascriptとCSSファイルのminifyを自動化する目的で使用している。

Gruntとは

Gruntとは,JavaScriptで書いたタスクを実行してくれるアプリケーション(JavaScript Task Runner)である。面倒な作業として,以下のような作業があるが,Gruntを使うことでこれらを自動化することが出来る。

  • minify(圧縮)や結合
  • 単体テストの実行
  • JSLint(構文チェック)の実行
  • CoffeeScriptやTypeScriptを使用している場合にはコンパイル(JavaScript変換)の実行
  • SCSS(Sass)やLESSなどのCSS拡張メタ言語を使用している場合には,コンパイル(CSS変換)の実行

Gruntの使い方

GruntはNode.jsを使用して作られている。そのためGruntをインストールする際には,あらかじめhomebrewなどでNode.jsをインストールしておく必要がある。

Gruntのインストール

Gruntは,Grunt本体とgrunt-cliが組み合わさって動作する。そのため,Grunt本体とgrunt-cliを一緒にインストールするが,コマンドから直接インストールするのではなく,package.jsonというファイルを作成し,このファイルを介してインストールする。

package.jsonを作成し,以下のように記述する。

{
    "name": "my-project-name",
    "version": "0.1.0",
    "devDependencies": {
        "grunt": "~0.4.3",
        "grunt-cli": "~0.1.9"
    }
}

package.jsonが存在するディレクトリで以下のコマンドを実行することで,package.jsonに記述したnodeモジュールをインストールすることが出来る。今回の場合はGruntをインストールすることが出来る。

npm install

このpackage.jsonというファイルはNode.jsのプロジェクトにおいて,そのプロジェクトの名称やバージョン,依存するモジュールを書いておくためのファイルである。Grunt自体もこのpackage.jsonを使って利用するプラグインを管理し,そしてGrunt自体もこのファイルへ依存モジュールとして登録する。
Gruntが,このような回りくどい管理方法を取っている理由は,Gruntのバージョンが異なるプロジェクトを単体のGruntでは同時に管理できない為である。
例えば,プロジェクトAではバージョン0.3.1を使っているが、プロジェクトBでは0.3.16を使っていて、マシンにはGrunt 0.3.16がインストールされている……という場合,始めのプロジェクトがビルドできなくなってしまう可能性がある。

続いてGruntfile.jsというgruntの設定ファイルを作成する。一纏めにして実行出来る個々の設定を「タスク」と呼ぶ。以下の内容でGruntfile.jsを作成する。

module.exports = function (grunt) {
    grunt.registerTask('hello', 'description here', function() {
        grunt.log.writeln('hello World!');
    });
    grunt.registerTask('default', [ 'hello' ]);
};

この状態でgruntコマンドを実行する。

grunt

以下のように表示されればタスクが成功している。

Running "hello" task hello World! Done, without errors.

JavascriptとCSSを自動的にminifyしてみる

今回,冒頭で触れたJavascriptとCSSのファイルをminifyする方法を説明する。

プラグインを追加インストールする

{
    "name": "my-project-name",
    "version": "0.1.0",
    "devDependencies": {
        "grunt": "~0.4.3",
        "grunt-cli": "~0.1.9",
        "grunt-contrib-cssmin": "0.4.1",
        "grunt-contrib-uglify": "~0.4.0",
        "grunt-contrib-watch": "~0.5.3"
    }
}

上記のようにpackage.jsonに追記し,以下のプラグインを新たにインストールする。

  • grunt-contrib-cssmin: CSSファイルをminifyする。
  • grunt-contrib-uglify: JSファイルをminifyする。
  • grunt-contrib-watch: ファイルの変更を監視してタスクをトリガーする。

package.jsonへ記述後,以下のコマンドでプラグインをインストールする。

npm install

Gruntfile.jsを作成する

プラグインがインストール出来たので,Gruntfile.jsにタスクを記述する。
記述例としては以下のようになる。ファイル名は適宜書き換えてほしい。

module.exports = function(grunt) {
    grunt.initConfig({
        cssmin : {
            pc : {
                src : ['css/reset.css', 'css/styles.css'],
                dest : 'css/pc.min.css'
            },
            mobile : {
                src : ['css/reset.css', 'css/styles.css', 'css/mediaqueries.css'],
                dest : 'css/mobile.min.css'
            }
        },
        uglify : {
            build : {
                options : {
                    banner : grunt.file.read('js/License.js'),
                },
                src : ['js/BitmapData.js', 'js/GlowFilter.js'],
                dest : 'js/all.min.js'
            }
        },
        watch : {
            css_pc : {
                files : ['css/reset.css', 'css/styles.css'],
                tasks : ['cssmin', 'copy:css']
            },
            css_mobile : {
                files : ['css/mediaqueries.css'],
                tasks : ['cssmin:mobile', 'copy:css']
            },
            js : {
                files : ['js/BitmapData.js', 'js/GlowFilter.js', 'js/License.js'],
                tasks : ['uglify', 'copy:js']
            }
        },
    });
    grunt.loadNpmTasks('grunt-contrib-cssmin');
    grunt.loadNpmTasks('grunt-contrib-uglify');
    grunt.loadNpmTasks('grunt-contrib-watch');
};

CSSファイルとJSファイルの変更を監視し,変更があったファイルを自動的にminifyする。
エラーなどが出ずにminifyが正常に行われていれば成功である。

また,ファイルの変更を監視(grunt-contrib-watchを使用)しない場合はgruntコマンドを実行することでminifyを行うことが出来る。

grunt

各プラグイン毎の設定方法は以下のページに詳しく載っていた。
Plugins – Grunt: The JavaScript Task Runner

参考
現場で使えるGrunt入門 – Gruntを試そう | CodeGrid
「今どきのGruntを使ったフロントエンド開発(HTML/CSS編)」HTML5 Conference 2013 セッションレポート | HTML5Experts.jp
Gruntで始めるWeb開発爆速自動化入門(1):ブラックなWeb開発現場の救世主、Gruntのインストールと使い方 (1/2) – @IT