node.jsでデバッグ文の出力内容を環境変数で制御する

gruntで環境構築している際に、デバッグ文の出力内容を環境変数で制御するモジュールを見つけたので紹介します。

https://github.com/visionmedia/debug

せっかくなので、デバッグ用に新規タスクを用意して検証してみましょう。

新規タスク用のディレクトリを用意する

$ mkdir -p tasks/debug-test-tasks/

新規タスク用のpackage.jsonを用意する

$ vi tasks/debug-test-tasks/package.json

※他にもpackage.jsonの設定は多数ありますが、今回は省略しています。

{
  "name": "debug-test-tasks",
  "version": "0.0.1",
  "description": "debug test grunt tasks",
  "keywords": [
    "grunt",
  ],
  "dependencies": {},
  "devDependencies": {
    "grunt": "~0.4.1",
  },
  "main": "debug-test-tasks",
  "engines": {
    "node": ">=0.8.0"
  }
}

debug をインストールして、処理を実装する

$ cd tasks/debug-test-tasks

$ npm i debug -D

$ vi debug-test-tasks.js

'use strict';

var hoge = require('debug')('hoge'),
    moge = require('debug')('moge'),
    hogemoge = require('debug')('hogemoge');

module.exports = function (grunt) {
    grunt.registerTask('debug-test-tasks', 'debug-test-tasks task discription', function() {
        hoge('hogeのデバッグメッセージ');
        moge('mogeのデバッグメッセージ');
        hogemoge('hogemogeのデバッグメッセージ');
    });
};

ソースを見ればなんとなくわかると思いますが、

require('debug')('任意の環境変数名')

で変数として定義して、定義した変数(関数)にメッセージを指定して呼び出すだけです。

定義したタスクを登録して、タスクを呼び出せるようにする

Gruntfile.jsの設定をファイル分割するで紹介しているように、Gruntfile.jsをファイル分割しているので、grunt/debug-test-tasks.jsにタスクを定義します。

$ vi grunt/debug-test-tasks.js

'use strict';

module.exports = function(grunt) {

    grunt.config('debug-test-tasks', {
        all: {
        }
    });

    grunt.task.loadTasks("tasks/debug-test-tasks");
};

動作検証

とりあえず実行します。

$ grunt debug-test-tasks

Running "debug-test-tasks" task

Done, without errors.

デバッグ文は表示されません。

環境変数を「DEBUG=」で指定して実行してみましょう。

$ DEBUG=hoge grunt debug-test-tasks

Running "debug-test-tasks" task
  hoge hogeのデバッグメッセージ +0ms

Done, without errors.

環境変数hoge」として設定したデバッグ文が表示されました。

ワイルドカード「*」を指定して実行してみます。

$ DEBUG=* grunt debug-test-tasks

Running "debug-test-tasks" task
  hoge hogeのデバッグメッセージ +0ms
  moge mogeのデバッグメッセージ +0ms
  hogemoge hogemogeのデバッグメッセージ +0ms

Done, without errors.

全てのデバッグ文が表示されます。

前方一致、後方一致、部分一致の指定も可能です。

前方一致で実行してみましょう。

$ DEBUG=hoge* grunt debug-test-tasks

Running "debug-test-tasks" task
  hoge hogeのデバッグメッセージ +0ms
  hogemoge hogemogeのデバッグメッセージ +0ms

Done, without errors.

hoge」「hogemoge」のデバッグ文が表示されました。


各種nodeモジュールで今回紹介したdebugモジュールが利用されているものもあるので、gruntの各タスクを詳細にデバッグしたい場合などは

DEBUG=* grunt XXXX -v

で実行してみるとよいかもしれません。