Grunt ハンズオン (活用編)

目次

A. JSHintを実行する (jshint)

grunt-contrib-jshint を利用すると JSHint を使ったコードチェックを行うことができます。

  1. インストール
  2. Gruntfile.js の記述
  3. 実行してみる

1. インストール

npm install grunt-contrib-jshint --save-dev

2. Gruntfile.js の記述

module.exports = function(grunt) {
  grunt.initConfig({
    jshint: {
      files: ['Gruntfile.js', 'src/**/*.js', 'test/**/*.js']
    }
  });
  grunt.loadNpmTasks('grunt-contrib-jshint');
}
  • この設定では Gruntfile.jssrc, test フォルダの下にある *.js ファイルを対象にしてコードチェックを行う
  • jshint でエラーが出るようにするため、わざと最終行にセミコロンを付けていない

3. 実行してみる

以下のコマンドを実行する

grunt jshint
  • コンソールにエラーが出力されることを確認する

B. ファイル保存時に自動実行(watch)

grunt-contrib-watch を利用するとファイルの変更をトリガーにしてタスクを起動することができます。

  1. インストール
  2. Gruntfile.js を作る
  3. 実行してみる

1. インストール

  1. 以下のように grunt-contrib-watch をインストールする

    npm install grunt-contrib-watch --save-dev
  2. この例では、grunt-contrib-jshint を使用するため、 もしまだインストールしていない場合は、インストールする

    npm install grunt-contrib-jshint --save-dev

2. Gruntfile.js を作る

module.exports = function(grunt) {
  grunt.initConfig({
    jshint: {
      files: ['gruntfile.js', 'src/**/*.js', 'test/**/*.js']
    },
    watch: {
      files: ['gruntfile.js', 'src/**/*.js', 'test/**/*.js'],
      tasks: ['jshint']
    }
  });
  grunt.loadNpmTasks('grunt-contrib-jshint');
  grunt.loadNpmTasks('grunt-contrib-watch');
};
  • files には変更監視対象のファイルを記述する。 この設定では、src, test フォルダの下の *.js ファイルの修正を監視する
  • tasks には変更時に実行するタスクを指定する。 この設定では JSHint を実行している。 複数のタスクを指定することも可能

3. 実行してみる

  1. grunt watch で起動する

    grunt watch
  2. *.js ファイルを修正して、タスクが自動実行されることを確認する

C. Webサーバを起動する (connect)

grunt-contrib-connect を利用すると Web サーバを起動することができます。

  1. プラグインをインストールする
  2. Gruntfile.js を作る
  3. 実行してみる
  4. サーバ起動時にブラウザ起動させる

1. プラグインをインストールする

以下のように grunt-contrib-connect をインストールする

npm install grunt-contrib-connect --save-dev

2. Gruntfile.js を作る

Gruntfile.js に以下のように記述する

module.exports = function(grunt) {
  grunt.initConfig({
    connect: {
      target1: {
        options: {
          hostname: 'localhost',
          port: 9898,
          base: 'dist',
          keepalive: true
        }
      }
    }
  });
  grunt.loadNpmTasks('grunt-contrib-connect');
};
  • hostname でサーバが利用するホスト名を指定する
  • port でサーバのポート番号を指定する
  • base で html ファイルを格納したフォルダを指定する
  • keepalive: true を指定しない場合、Gruntのタスク終了時にサーバも停止する

3. 実行してみる

  1. dist フォルダに以下のような HTML ファイルを index.html という名前で作成する

    <html>
      <body>hello</body>
    </html>
  2. grunt connect でWebサーバを起動する

    grunt connect
  3. ブラウザで http://localhost:9898 にアクセスする

4. サーバ起動時にブラウザ起動させる

以下のように open: ture をオプションに指定すると、 サーバ起動時にブラウザも自動起動する

module.exports = function(grunt) {
  grunt.initConfig({
    connect: {
      target1: {
        options: {
          hostname: 'localhost',
          port: 9898,
          base: 'dist',
          keepalive: true,
          open: true
        }
      }
    }
  });
  grunt.loadNpmTasks('grunt-contrib-connect');
};

D. 自動リロード (livereload)

grunt-contrib-connectgrunt-contrib-watchlivereload オプションを設定すると、 「HTMLファイルやJavaScriptファイルを修正すると同時にブラウザのリロードを行う」 ということができるようになります。

  1. プラグインのインストール
  2. Gruntfile.js を作る
  3. 実行してみる

1. プラグインのインストール

npm install grunt-contrib-connect --save-dev
npm install grunt-contrib-watch --save-dev

2. Gruntfile.js を作る

module.exports = function(grunt) {
  grunt.initConfig({
    connect: {
      server: {
        options: {
          hostname: 'localhost', port: 9898, base: 'dist', open: true,
          livereload: 35730
        }
      }
    },
    watch: {
      files: ['dist/**/*.html'],
      options: {
        livereload: '<%= connect.server.options.livereload %>'
      }
    }
  });
  grunt.loadNpmTasks('grunt-contrib-connect');
  grunt.loadNpmTasks('grunt-contrib-watch');
  grunt.registerTask('default', ['connect', 'watch']);
};
  • watchを実行すると grunt は終了しなくなるため、connect に keepalive オプション指定は不要

3. 実行してみる

  1. dist フォルダに以下のような HTML ファイルを index.html という名前で作成する

    <html>
      <body>hello</body>
    </html>
  2. grunt コマンドを実行する (ブラウザに index.html の内容が表示される)

    grunt
  3. テキストエディタで index.html ファイルの内容を修正して保存し、 ブラウザのリロードが自動的に行われることを確認する

Z. 参考資料

クリエイティブ・コモンズ・ライセンス
Grunt ハンズオン』 by Ototadanaクリエイティブ・コモンズ 表示 4.0 国際 ライセンスで提供されています。