GRUNT とJSHintのコードチェックをビルドプロセスに組み込む

はじめに

JavaScript にはJSHintというコードチェッカーが存在する。このチェッカーの実行を、タスク実行ツールGRUNTを使ってビルドプロセスの中に組み込む方法を試してみた。

以下の英語のブログ記事を参考にした。 Let tools define JavaScript style

GRUNT とは?

GRUNT は、JSファイルのminifyやコンパイル、テスト、コードチェック等の様々なタスクを実行してくれるタスク実行ツール。用途に応じたプラグインを利用することができる。 プラグインの一覧はこちら

GRUNTとcontrib-jshintプラグインのインストール

まずgruntのCLIツールをインストール

npm install -g grunt-cli

次にプロジェクトのpackage.jsonにgruntとgrunt-contrib-jshintを記述してnpm installを実行。

  "dependencies": {
    "grunt": "*",
    "grunt-contrib-jshint": "*"
   }  

grunt-contrib-jshintはGruntでJSHintチェッカーを実行するためのプラグイン)。

.jshintrcの設定

.jshintrc はJS Hintのパラメータを指定するための設定ファイル。プロジェクト直下に配置。 以下サンプル

{
  "curly": true,
  "eqnull": true,
  "eqeqeq": true,
  "evil": false,
  "forin": true,
  "immed": true,
  "indent": 2,
  "latedef": true,
  "maxdepth": 5,
  "maxparams": 5,
  "maxlen": 80,
  "trailing" : true,
  "undef": true,
  "unused": true,
  "node": true,
  "jquery": true,
  "browser" : true,
  "globals": {
    "describe" : false,
    "it": false,
    "before": false,
    "after": false,
    "define": false
  }
}

パラメータの内容、記述方法は JSHintのドキュメントページ や、Qiitaの以下のページを参考にするとよい

JSHint入門 - JSHintを使ってJSコードの信頼性を高める

もしも対象外としたいファイル(ライブラリ等)が存在する場合は.jshintignoreファイルを記述してプロジェクト直下に配置する。

Gruntfile.js の作成

GRUNTの設定はプロジェクト直下にGruntfile.jsというファイルを配置して記述。

サンプル

module.exports = function (grunt) {

  grunt.initConfig({
    jshint: {
      files: [
        'Gruntfile.js',
        'routes/**/*.js',
        'package.json',
        'test/**/*.js',
        '*.js',
        '.jshintrc'
      ],
      options: {
        jshintrc: '.jshintrc'
      }
    }
  });

  grunt.loadNpmTasks('grunt-contrib-jshint');
  grunt.registerTask('build', ['jshint']);

};

この中の一番外側の以下記述はGruntfile.jsを記述するときの基本。

module.exports = function (grunt) {
  ...
};

initConfig()で各プラグインへの設定項目を指定する。jshint.filesはコードチェックの対象となるファイル。

loadNpmTasks()でプラグインをロードし、

grunt.loadNpmTasks('grunt-contrib-jshint');

registerTask()でタスクを登録している

grunt.registerTask('build', ['jshint']);

Gruntの実行

gruntコマンドで 登録したタスク名を指定してあげればOK.

grunt build
Running "jshint:files" (jshint) task
>> 11 files lint free.

Done, without errors.