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