JavaScript
Node.js

(初心者向け) Node.js コンソール (console) の使い方

v8.9.1LTS 対応

概要

console はグローバルなオブジェクトで、デバッグのためのシンプルなコンソール機能を提供する。

  • new Console(stdout[, stderr]) : 新しい Console オブジェクトを作成する。
  • console.assert(value[, message][, ...args]) : シンプルな Assertion テストを提供する。
  • console.clear() : 可能ならコンソール画面をクリアする。
  • console.count([label]) : label の内部カウンターを管理する。
  • console.countReset([label = 'default']) : label の内部カウンターをリセットする。
  • console.dir(obj[, options]) : util.inspect() を使って obj の文字列表現を表示する。
  • console.error([data][, ...args]) : stderr に出力する。
  • console.group([...label]) : 出力のときに、インデントを増やす。groupCollapsed() も同様。
  • console.groupEnd() : 出力のときに、インデントを減らす。
  • console.info([data][, ...args]) : console.log() と同じ。stdout へ出力する。
  • console.log([data][, ...args]) : stdout へ出力する。
  • console.time(label) : label に対応するユニークなタイマーを起動する。(実行時間の計測に使用)
  • console.timeEnd(label) : label に対応するユニークなタイマーを停止し、停止までの時間を表示する。
  • console.trace([message][, ...args]) : stderr に 'Trace : ' に続けてメッセージとスタックトレースを表示する。

使用例

変数の値を表示するには

console.log(data, arg1, arg2, ...) で data 部分にフォーマットを指定できるので、変数 arg1, arg2, ... を見やすくフォーマット化して stdout へ出力できる。console.info() も同様に使用可能。

書式化文字列の指定方法は util.format(format[, ...args]) と同様。よく使うものを下に示す。

  • %s : 文字列
  • %d : 数 (浮動小数点数なども含む)
  • %i : 整数
  • %f : 浮動小数点数
  • %j : JSON
  • %o : オブジェクト (JavaScript の標準オブジェクト表現)
const count = 5;
console.log('count: %d', count);
// stdout へ出力: count: 5
console.log('count:', count);
// stdout へ出力: count: 5
console.info('count:', count);
// stdout へ出力: count: 5

標準エラー出力に文字列を表示するには

console.log() の代わりに console.error() を使うと stderr に文字列が出力される。

const code = 5;
console.error('error #%d', code);
// stderr へ出力: error #5
console.error('error', code);
// stderr へ出力: error 5

インデントを付けて表示するには

/* インデントを付けて表示 */
console.log('console.group(string)');
console.group('group() ..');
// インデント中
console.log('1 indented');
// インデント中
console.log('2 indented');
console.groupEnd();
// インデント解除
console.log('.. groupEnd()');

実行例
PS C:\Console> node group.js
console.group(string)
group() ..
1 indented
2 indented
.. groupEnd()
PS C:\Console>

変数の値をチェックするには (Assert テスト)

console.assert() を使うと変数の値が期待通りかをチェックできる。期待値と異なる場合は、AssertionError 例外が発生する。

/* console.assert() : シンプルな Assert テスト */
var n = 0;
console.assert(n > 0, 'Error: n は正でなければならない。n = %d', n);
n++;
console.assert(n > 0, 'Error: n は正でなければならない。n = %d', n);

実行例
最初の assert() で条件を満足しないので AssertionError 例外が発生する。最初の assert() をコメントアウトすると、条件を満足するため、例外は発生しない。
PS C:\Console> node assert.js
assert.js:42
throw new errors.AssertionError({
^

AssertionError [ERR_ASSERTION]: Error: n は正でなければならない。n = 0
at Console.assert (console.js:188:23)
at Object. (C:\workspace\node\NodeAPI\Console\assert.js:3:9)
at Module._compile (module.js:635:30)
at Object.Module._extensions..js (module.js:646:10)
at Module.load (module.js:554:32)
at tryModuleLoad (module.js:497:12)
at Function.Module._load (module.js:489:3)
at Function.Module.runMain (module.js:676:10)
at startup (bootstrap_node.js:187:16)
at bootstrap_node.js:608:3
PS C:\Console>

ログをファイルに出力するには

console.Console(out, err) クラスを使うと独自のコンソールオブジェクトを作成できる。この出力先をファイルにすることで、ファイルへログを出力できる。

/* ログをファイルへ出力する。*/
const fs = require('fs');
// 標準出力をリダイレクト
const out = fs.createWriteStream('info.log');
// 標準エラー出力をリダイレクト
const err = fs.createWriteStream('error.log');
// カスタマイズされた独自コンソールオブジェクトを作成する。
const logger = new console.Console(out, err);
// 実際にログを出力してみる。
logger.log('アプリ開始');
logger.log('初期化成功');
logger.error(new Error('障害検出'));
logger.log('アプリ終了');

上のサンプルで info.log と error.log へ出力された内容 (コードは UTF-8 になる) は次のようになる。

info.log

アプリ開始
初期化成功
アプリ終了


error.log
Error: 障害検出
at Object. (C:\workspace\node\NodeAPI\Console\logging.js:8:14)
at Module._compile (module.js:635:30)
at Object.Module._extensions..js (module.js:646:10)
at Module.load (module.js:554:32)
at tryModuleLoad (module.js:497:12)
at Function.Module._load (module.js:489:3)
at Function.Module.runMain (module.js:676:10)
at startup (bootstrap_node.js:187:16)
at bootstrap_node.js:608:3

ループ回数を調べるには

console.count() を使うとループ回数を確認できる。下のサンプルでは使っていないが、カウンタのリセットは、countReset() で行うことができる。

/* ループ回数の確認 */
console.log('count 開始');
var i = 10;
while (i >= 0) {
    i--;
    console.count('while');
}
console.log("count 終わり");

実行例
PS C:\Console> node count.js
count 開始
while: 1
while: 2
while: 3
while: 4
while: 5
while: 6
while: 7
while: 8
while: 9
while: 10
while: 11
count 終わり
PS C:\Console>

実行時間を調べるには

console.time() と console.timeEnd() を使うと、時間のかかる処理の実行時間を調べることができる。

/* ループの時間を計測 */

// 測定開始
console.time('time1000000');
var i = 1000000;
while (i != 0) {
    2**10;
    i--;
}
// 測定終了
console.timeEnd('time1000000');

実行例

PS C:\Console> node timer.js
time1000000: 12.399ms
PS C:\Console>

スタックトレースを表示するには

console.trace() を使うと、スタックトレースを表示できる。

/* スタックトレースの表示 */
console.trace('Show me');

実行例

PS C:\Console> node trace.js
Trace: Show me
at Object. (C:\Console\trace.js:2:9)
at Module._compile (module.js:635:30)
at Object.Module._extensions..js (module.js:646:10)
at Module.load (module.js:554:32)
at tryModuleLoad (module.js:497:12)
at Function.Module._load (module.js:489:3)
at Function.Module.runMain (module.js:676:10)
at startup (bootstrap_node.js:187:16)
at bootstrap_node.js:608:3
PS C:\Console>

オブジェクトの内容を表示するには

console.dir() を使うと、オブジェクトの内容を見やすく表示できる。

/* オブジェクトの表示 */
console.dir(module, {depth:3});

実行例

PS C:\Console> node dir.js
Module {
id: '.',
exports: {},
parent: null,
filename: 'C:\\Console\\dir.js',
loaded: false,
children: [],
paths:
[ 'C:\\Console\\node_modules',
'C:\\workspace\\node\\NodeAPI\\node_modules',
'C:\\workspace\\node\\node_modules',
'C:\\workspace\\node_modules',
'C:\\node_modules' ] }
PS C:\Console>

終わり