(初心者向け) 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 の標準オブジェクト表現)

```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 に文字列が出力される。

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

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

```JavaScript
/* インデントを付けて表示 */
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 例外が発生する。

```JavaScript
/* 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) クラスを使うと独自のコンソールオブジェクトを作成できる。この出力先をファイルにすることで、ファイルへログを出力できる。

```JavaScript
/* ログをファイルへ出力する。*/
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() で行うことができる。

```JavaScript
/* ループ回数の確認 */
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() を使うと、時間のかかる処理の実行時間を調べることができる。

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

// 測定開始
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() を使うと、スタックトレースを表示できる。

```JavaScript
/* スタックトレースの表示 */
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() を使うと、オブジェクトの内容を見やすく表示できる。

```JavaScript
/* オブジェクトの表示 */
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>
`

終わり