CreaTools LogoCreaTools
Tips

console.log地獄から抜け出す方法

2025-10-08

結論:ブレークポイントを使え

console.logを大量に仕込む → どれがどこの出力かわからなくなる → さらに追加 → 地獄

ブレークポイントを1つ置けば、その場で全ての変数が見える。


console.logが向いているケース

状況向き
「この変数の値だけ確認したい」✓ console.log
「処理がどこまで進んだか追いたい」✗ ブレークポイント
「なぜこの値になったか調べたい」✗ ブレークポイント

1箇所だけならconsole.log。流れを追うならブレークポイント。


ブレークポイントの使い方

  1. DevTools → Sourcesタブ
  2. 止めたい行の行番号をクリック
  3. ページを操作して、その処理を通る
  4. 処理がそこで止まる

止まったら、右側のScopeパネルで全ての変数の値が見える。

操作ボタン

ボタン動作
▶️次のブレークポイントまで進む
⤵️ Step Over1行進む
⬇️ Step Into関数の中に入る
⬆️ Step Out関数を抜ける

私がやらかした失敗

APIから取得したデータが「なぜかundefined」になる問題。

console.logを20箇所に仕込んで、出力を眺めて、また追加して…1時間溶かした。

結局、ブレークポイントを1つ置いて5分で解決。非同期処理のawait忘れだった。

// ❌ awaitがない
const data = fetchUser();  // Promiseオブジェクトが入る

// ✓ 
const data = await fetchUser();

ブレークポイントで止めたら、dataPromise {<pending>}と表示されていた。console.logでは[object Promise]としか出ず、気づけなかった。


console.logを使うなら効率的に

変数名を一緒に出す

// ❌ 何の値かわからない
console.log(user);

// ✓ 変数名がわかる
console.log({ user });
// → { user: { name: "田中", age: 30 } }

波括弧で囲むだけ。

複数の値をまとめて出す

console.log({ name, age, email });
// → { name: "田中", age: 30, email: "..." }

条件付きブレークポイント

「1000回ループの500回目だけ止めたい」

  1. 行番号を右クリック
  2. 「Add conditional breakpoint」
  3. i === 500 と入力

条件を満たしたときだけ止まる。


debuggerステートメント

コードに直接書くと、DevToolsが開いていれば止まる。

function calculate(items) {
  debugger;  // ここで止まる
  return items.reduce((sum, item) => sum + item.price, 0);
}

**本番コードに残さないこと。**ESLintのno-debuggerルールを有効に。


エラーの読み方

Uncaught TypeError: Cannot read property 'name' of undefined
    at getUserName (app.js:15)
    at handleClick (app.js:8)

「undefined」に「.name」でアクセスしようとした。場所はapp.jsの15行目。

スタックトレースは下から上に読む。下が最初の呼び出し、上がエラー発生箇所。


まとめ

  • 1箇所確認ならconsole.log、流れを追うならブレークポイント
  • ブレークポイントなら全変数が一度に見える
  • console.log({ 変数名 })で変数名も出力
  • 本番にdebuggerを残さない
  • スタックトレースは下から上