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
で実行してみるとよいかもしれません。