はじめに
複雑なコードを追っているとき、「この関数、結局どこが起点で実行されているんだ?」と迷子になったことはありませんか?
console.log をあちこちに仕込む前に、ぜひ使ってほしいのが console.trace() です。
1. console.trace() とは?
実行した地点までのスタックトレース(関数の呼び出し経路)をコンソールに出力します。
const finalStep = () => {
console.trace("ここまでの経路を表示:");
};
const secondStep = () => finalStep();
const firstStep = () => secondStep();
firstStep();
これを実行すると、コンソールには firstStep → secondStep → finalStep という順序が、行番号付きでズラッと表示されます。
2. よく使うパターン
① 共通バリデーションの呼び出し元特定
「なぜかバリデーションエラーになるけど、どの画面のどの入力が原因?」という時に。
function validate(value) {
if (!value) {
console.trace("値が空です。呼び出し元を確認してください。");
}
}
② フレームワーク(React/Vueなど)のライフサイクル追跡
「コンポーネントが再レンダリングされた理由は、どの関数のせい?」という切り分けに便利です。
③ 条件付きデバッグ
特定の条件を満たしたときだけ経路を確認したい場合、if 文と組み合わせるのが実戦的です。
3. デバッグ効率を爆上げする console 兄弟
trace と一緒に紹介したい、現場でよく使うメソッドたちです。
| メソッド | 用途 |
|---|---|
console.table() |
配列やオブジェクトを表形式で表示。一気に読みやすくなる。 |
console.group() |
関連するログを折り畳んでグループ化。コンソールがスッキリする。 |
console.time() |
処理にかかった**時間(パフォーマンス)**を計測する。 |
① console.table()
配列やオブジェクトのリストを、見やすい表形式で出力します。
const users = [
{ id: 1, name: "田中", role: "Admin" },
{ id: 2, name: "佐藤", role: "User" }
];
console.table(users);
② console.group() / console.groupEnd()
大量のログを階層構造で折り畳めるようにします。
console.group("ユーザー更新処理");
console.log("通信開始...");
console.trace("呼び出し元確認");
console.log("通信完了");
console.groupEnd();
③ console.time() / console.timeEnd()
特定の処理に何ミリ秒かかったかを計測します。
console.time("ループ処理");
// ...重い処理
console.timeEnd("ループ処理");
おわりに
console.log だけで頑張るデバッグは卒業して、console.trace() を味方につけると、コードを読むスピードが格段に上がります。
他にも「これ便利だよ!」というデバッグ技があれば、ぜひコメントで教えてください!