はじめに
Node.jsでオブジェクトや配列をconsole.log
でデバッグ表示した際の[Object]
や[Array]
に辟易していませんか?inspect
関数はオブジェクトやデータ構造を可読性の高いフォーマットで出力できる、デバッグやロギングに活用できる非常に強力なツールです。本記事では、inspect
関数の使用方法、便利なオプションをいくつかのコード例を交えて解説します。
Node.jsのinspect
関数とは?
Node.jsのutil
モジュールに含まれているinspect
関数は、オブジェクトを文字列として表示する際にその内容を詳細に確認できるように設計されています。console.log
と比べて、inspect
を使うと以下のような利点があります。
- ネストされたオブジェクトの深さを指定できる(無限も可)
- 色付きで出力することができ、見やすい
- 配列やマップなど特殊なデータ型にも対応
inspect
関数の基本的な使い方
まず、基本的な使用方法を見てみましょう。以下のコードは、inspect
を使ってオブジェクトの内容を表示する例です。
const util = require('util');
const user = {
name: 'Yamada Taro',
age: 30,
address: {
city: 'Tokyo',
zip: '100-0001'
}
};
// 標準のconsole.log
console.log(user);
// util.inspectを使用
console.log(util.inspect(user, { depth: null, colors: true }));
console.log
では通常のオブジェクトの出力となりますが、inspect
を使用すると、色付きで、ネストされたオブジェクトも全て表示されます。特に、depth: null
オプションによりオブジェクトの深さが無制限となり、全ての階層が表示されます。
inspect
関数のオプション
inspect関数には、様々なオプションが用意されており、用途に応じて柔軟に設定できます。以下は主なオプションの一覧です。
-
depth
: ネストされたオブジェクトをどの階層まで表示するか(nullで無制限) -
colors
: 色付きで表示するか(trueで色付き) -
showHidden
: Symbolプロパティや非列挙プロパティも表示するか -
compact
: コンパクトな形式で表示するか -
sorted
: オブジェクトのキーをソートして表示するか -
numericSeparator
: 数値をアンダーバー「_」によって3桁単位で区切って表示するか
depth
オプションの活用例
デフォルトではinspect
は2階層までしか表示しませんが、depth
オプションを使うことで深い階層まで表示できます。
const util = require('util');
const data = {
level1: {
level2: {
level3: {
level4: '4階層目'
}
}
}
};
// デフォルトの深さ(2)
console.log(util.inspect(data));
// 深さを指定して表示(nullで無制限)
console.log(util.inspect(data, { depth: null }));
showHidden
オプションの活用例
デフォルトでは表示されない非列挙プロパティやシンボルもshowHidden
オプションで表示可能です。
const util = require('util');
const obj = {};
Object.defineProperty(obj, 'hidden', {
value: 'console.logだと見えないよ',
enumerable: false
});
// {}
console.log(obj);
// { [hidden]: 'console.logだと見えないよ' }
console.log(util.inspect(obj, { showHidden: true }));
まとめ
util.inspect
はNode.jsでデバッグを行う際に非常に強力なツールです。特に、ネストされたオブジェクトや特殊なデータ型を扱う際には、inspect
のオプションを活用することで、デバッグ作業を効率的に進めることができます。素敵なデバッグライフを!
参考