2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

「この関数、どこから呼ばれた?」を1秒で解決する console.trace() とデバッグ効率化 Tips

2
Posted at

はじめに

複雑なコードを追っているとき、「この関数、結局どこが起点で実行されているんだ?」と迷子になったことはありませんか?
console.log をあちこちに仕込む前に、ぜひ使ってほしいのが console.trace() です。

1. console.trace() とは?

実行した地点までのスタックトレース(関数の呼び出し経路)をコンソールに出力します。

const finalStep = () => {
  console.trace("ここまでの経路を表示:");
};

const secondStep = () => finalStep();
const firstStep = () => secondStep();

firstStep();

これを実行すると、コンソールには firstStepsecondStepfinalStep という順序が、行番号付きでズラッと表示されます。

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() を味方につけると、コードを読むスピードが格段に上がります。
他にも「これ便利だよ!」というデバッグ技があれば、ぜひコメントで教えてください!

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?