配列やオブジェクトの中身を console.log() で出すと、入れ子が折りたたまれて見づらいことがあります。そんなとき console.table() を使うと、データを見やすい表形式でコンソールに出力できます。デバッグ効率がぐっと上がる、知っておきたいメソッドです。
この記事の結論:
console.table(配列やオブジェクト) と書くだけで表形式になります。第2引数に列名の配列を渡すと表示する列を絞り込めます。ブラウザのDevToolsでは列クリックで並べ替えもできます。console.table() の基本(オブジェクトの配列)
もっとも代表的な使い方が、オブジェクトの配列を渡すケースです。各オブジェクトが行に、プロパティ名が列の見出しになります。
オブジェクトの配列を表示
const data = [
{ name: "John", age: 30 },
{ name: "Jane", age: 25 },
{ name: "Bob", age: 40 },
];
console.table(data);
出力(コンソール)
┌─────────┬────────┬─────┐ │ (index) │ name │ age │ ├─────────┼────────┼─────┤ │ 0 │ 'John' │ 30 │ │ 1 │ 'Jane' │ 25 │ │ 2 │ 'Bob' │ 40 │ └─────────┴────────┴─────┘
左端の
(index) 列には配列のインデックス(0始まり)が入ります。文字列の値は 'John' のようにクォート付きで表示され、数値はそのまま表示されるので、型の違いもひと目で分かります。表示する列を絞り込む(第2引数)
列が多いときは、第2引数に表示したいプロパティ名の配列を渡すと、その列だけに絞れます。
name と age の列だけ表示
const data = [
{ name: "John", age: 30, city: "NY" },
{ name: "Jane", age: 25, city: "LA" },
];
console.table(data, ["name", "age"]); // city は表示されない
出力(コンソール)
┌─────────┬────────┬─────┐ │ (index) │ name │ age │ ├─────────┼────────┼─────┤ │ 0 │ 'John' │ 30 │ │ 1 │ 'Jane' │ 25 │ └─────────┴────────┴─────┘
2次元配列を表示する
配列の配列(2次元配列)を渡すと、内側のインデックス(0, 1, …)が列見出しになります。
2次元配列を表示
console.table([ ["HTML", "CSS"], ["JS", "TS"], ]);
出力(コンソール)
┌─────────┬────────┬───────┐ │ (index) │ 0 │ 1 │ ├─────────┼────────┼───────┤ │ 0 │ 'HTML' │ 'CSS' │ │ 1 │ 'JS' │ 'TS' │ └─────────┴────────┴───────┘
単一のオブジェクトを表示する
配列でなく1つのオブジェクトを渡すと、プロパティ名が (index) 列に、値が Values 列に入ります。
オブジェクトを表示
console.table({ apple: 120, banana: 80, cherry: 300 });
出力(コンソール)
┌─────────┬────────┐ │ (index) │ Values │ ├─────────┼────────┤ │ apple │ 120 │ │ banana │ 80 │ │ cherry │ 300 │ └─────────┴────────┘
ブラウザ(DevTools)とNode.jsの違い
console.table() はブラウザとNode.jsの両方で使えますが、見た目が少し異なります。
- ブラウザのDevTools:罫線のない見やすい表で表示され、列の見出しをクリックすると並べ替えができます
- Node.js(ターミナル):上記のような罫線文字(
┌─┬┐)のテキスト表として出力されます
DevToolsでは表の右上のフィルタ欄で絞り込んだり、列見出しのクリックで昇順・降順に並べ替えたりできます。APIのレスポンス配列やDOM要素のリストを確認するときに特に便利です。
本番環境ではログを残さない
console.table() はあくまでデバッグ用です。本番のコードに残すと情報漏えいやパフォーマンス低下につながるため、リリース前に削除するか、ESLintの no-console ルールで検知できるようにしておくと安心です。
ESLintで console を検知(.eslintrc)
{
"rules": {
"no-console": "warn"
}
}
よくある質問(FAQ)
Qconsole.table() はどんなときに便利ですか?
Aオブジェクトの配列や2次元配列を表形式で見やすく表示できます。APIから取得したデータの一覧や、DOM要素のリストをデバッグするときに特に役立ちます。入れ子が折りたたまれる
console.log() よりも一覧性が高いのが利点です。Q表示する列を絞り込むには?
A第2引数にプロパティ名の配列を渡します。例えば
console.table(data, ["name", "age"]) とすると、name と age の列だけが表示されます。QブラウザとNode.jsの両方で動きますか?
A両方で動作します。ブラウザのDevToolsでは並べ替え可能な視覚的な表、Node.jsのターミナルでは罫線文字によるテキストの表として出力されます。
Q本番環境でも使って大丈夫ですか?
Aデバッグ用途のため、本番では削除するのが基本です。ESLintの
no-console ルールを設定しておくと、消し忘れを警告で検知できます。まとめ
console.table() のポイントを整理します。
- 基本は
console.table(配列やオブジェクト)だけで表形式に - オブジェクト配列・2次元配列・単一オブジェクト(
Values列)に対応 - 第2引数に列名の配列を渡すと表示列を絞り込める
- DevToolsでは列クリックで並べ替え、Node.jsは罫線文字で出力
- 本番では削除。
no-consoleルールで消し忘れを防ぐ
関連として、同じくデバッグに役立つassert関数でコードの正確性を確認する方法(console.assert)や、テーブル表示と相性のよい配列から要素を削除する方法もあわせて確認すると、データの確認・整形がはかどります。
