メインコンテンツまでスキップ

第14章:デバッグとログ(観測してから触る)🔍🪵

ねらい🎯

Concept: Checklist

  • 「怖いコード」でも、まず状況を観測して安心して触れるようになる👀✨
  • ブレークポイントで止めて見る/ログで流して見るを使い分けられるようになる🧠🧷
  • 直す前に「どこが変」かを、根拠つきで説明できるようになる📝✅

今日のゴール🌸(できたら勝ち!)

  • 1回はブレークポイントで止めて、変数の中身を見られる🛑🔍
  • 「ここにログ置けば原因が見える」ポイントを3つ言える🪵✨
  • ログポイント(Logpoint)でコードを汚さず観測できる🙌🧼 (Visual Studio Code)

1) デバッグとログの違い🤔(ざっくりでOK!)

デバッグ🛑🔍(止めて見る)

  • 実行を一時停止して、その瞬間の状態(変数・呼び出し順)をチェックできる
  • VS Code は JavaScript/TypeScript/Node のデバッグを標準でサポートしてるよ🧑‍💻✨ (Visual Studio Code)

向いてる場面✅

  • 「この行で何が入ってる?」を確実に見たい
  • ループの途中とか、条件分岐の中で止めたい

ログ🪵📣(流して見る)

  • 実行は止めずに、通った道を記録する 向いてる場面✅
  • 再現が難しい・タイミングが絡む・何回も通る処理
  • 本番環境っぽい状況で観測したい

2) ブレークポイントの基本🛑✨(まず1回止めよう)

見るべき場所はこの4つ📌

  • Variables:今の変数の中身🧺
  • Watch:気になる式を固定で監視👀
  • Call Stack:どこから呼ばれたか(道のり)🧗‍♀️
  • Debug Console:その場で式を評価できる🧪

「TypeScriptで止まらない…😭」の最重要ポイント

TypeScriptは実行時にはJavaScriptになるので、**ソースマップ(source map)**で「TSの行」と「実行中のJS」を対応づけるのが超大事だよ🗺️🧷 (Visual Studio Code)


3) 便利ブレークポイント3点セット🧠🧷

① 条件付きブレークポイント(特定の時だけ止める)🚦

「この時だけ止めたい!」ができる✨ 例:userId === "A001" の時だけ止める、みたいな感じ🧩 (Stack Overflow)

② ヒットカウント(10回目だけ止める)🔁

ループで毎回止まるのを回避できる🌀

③ ログポイント(Logpoint)🪵✨(止めないのに観測できる)

ブレークポイントの仲間で、止まらずにログだけ出すやつ! 「ログ入れたいけどコードは変えたくない…」時の救世主🦸‍♀️ (Visual Studio Code)


4) ログの置き方:最小で効く🪵🎯

ログの“置きドコロ”はここ!

  1. 入口:入力(引数・リクエスト)📥
  2. 分岐:どっちルートに入った?🔀
  3. 出口:結果(戻り値・レスポンス)📤
  4. 例外:catchした時は「何が起きたか」⚠️

“良いログ”の型🧩✨

  • 「何の処理?」+「重要なID」+「重要な値」
  • 文字列を並べるより、オブジェクトで出すと読みやすい(検索もしやすい)🧠🔍

5) コード例(ビフォー/アフター)🧩➡️✨

題材:割引計算がたまにおかしい…という想定💸😵‍💫

Before:何が起きてるか見えない😶‍🌫️

// src/checkout.ts
export function calcTotal(price: number, coupon?: { percent: number }, shippingFee = 500) {
// たまに合計が変に見える…という想定
const discounted = coupon ? price - price * (coupon.percent / 100) : price;
const total = Math.round(discounted) + shippingFee;
return total;
}

After:観測ポイントを追加🪵🔍(直す前に「事実」を集める)

// src/checkout.ts
export function calcTotal(price: number, coupon?: { percent: number }, shippingFee = 500) {
console.debug("[calcTotal] input", { price, coupon, shippingFee });

const discounted = coupon ? price - price * (coupon.percent / 100) : price;
console.debug("[calcTotal] discounted", { discounted });

const total = Math.round(discounted) + shippingFee;
console.debug("[calcTotal] total", { total });

return total;
}

ポイント🌸:この段階では「直す」じゃなくて「見える化」! そして可能なら、ログは Logpoint で代用してコード変更を減らすのもアリだよ🧼🪵 (Visual Studio Code)


6) 「落ちた時の手がかり」を強くする🧷🗺️(スタックトレース編)

Nodeのソースマップ対応で、エラーの行が読みやすくなる📍

Node には --enable-source-maps があって、トランスパイル後のJSじゃなく元のソース位置に寄せたスタックトレースを出せるよ🧭 (Node.js) ※ただし Error.stack を頻繁に触るケースでは性能影響がありえる、という注意も公式にあるよ⚠️ (Node.js)


7) サクッと始めるデバッグ方法2つ🚀

方法A:launch.json で“いつもの起動”を固定する📌

VS Codeは Run and Debug から launch.json を作って、デバッグ起動の設定をプロジェクトに置けるよ🧷📁 (Visual Studio Code)

方法B:Auto Attach(ターミナル実行に自動でくっつく)🧲

VS Code の Auto Attach を有効にすると、統合ターミナルから起動した Node プロセスにデバッガが自動で付いてくるよ🧑‍💻🧲 (Visual Studio Code)


8) 2026っぽいデバッグ小ネタ🤏✨(知ってると楽)

tsx を使うと、TSをそのままデバッグしやすい💡

tsx 側も VS Code でのデバッグ手順を案内していて、デバッグの選択肢として「tsx」を使う流れがまとまってるよ🧷🚀 (tsx)


手順(小さく刻む)👣✅:バグっぽい挙動を観測する👀

  1. 再現手順を1行で書く(例:「クーポン30%で合計が想定よりズレる」)📝
  2. 怪しい場所を3つだけ予想する(入口/分岐/出口)🔮
  3. まずはブレークポイントを1つ置いて、price / coupon / discounted / total を見る🛑🔍
  4. 次に Logpoint で「止めずに」同じ情報を出してみる🪵✨ (Visual Studio Code)
  5. 取れた事実から「原因候補」を1つに絞る(まだ直さない)🧠✅

ミニ課題✍️🌼(10〜15分)

課題1:条件付きで止めてみよう🚦

  • coupon.percent === 30 の時だけ止まるように条件付きブレークポイントを設定して、discounted を確認してね🛑🔍 (Stack Overflow)

課題2:Logpointで観測しよう🪵✨

  • discounted 計算の行に Logpoint を置いて、price/coupon/discounted をログに出してね(コードは変更しない)🧼 (Visual Studio Code)

AI活用ポイント🤖✅(お願い方+チェック観点)

お願い方テンプレ🪄

  • 「この関数のバグ調査で、観測すべき変数と置き場所を3案出して。入口/分岐/出口に分けて」🤖📝
  • 「ログメッセージを短く、検索しやすい形式(固定プレフィックス+JSON)で提案して」🤖🔍
  • 「ブレークポイントで見るべき順番(Watch候補も)を手順化して」🤖👣

チェック観点✅

  • ログに 個人情報・秘密情報 を入れない(メール、トークン、パスワード系)🔒⚠️
  • “何を見たいログ?”が1行で説明できるか📝
  • そのログは「原因特定」に効く?ただの雑談ログになってない?🪵😵‍💫

よくあるつまずき🐣💥(ここだけ見ても助かる)

  • ブレークポイントが灰色:ソースマップ設定や、実行してるファイルと開いてるTSがズレてることが多い🗺️🧷 (Visual Studio Code)
  • ログだらけで逆に迷子:入口/分岐/出口の3点に絞ると勝ちやすい🧭✨
  • 何回も止まってしんどい:条件付き or ヒットカウント or Logpoint へ切替🪄🧠 (Visual Studio Code)

まとめ🎀✅

  • 止めて見る=デバッグ流して見る=ログ🛑🪵
  • まずは「入口/分岐/出口」を観測して、直す前に事実を集める👀🧠
  • Logpoint と Auto Attach を覚えると、観測が一気にラクになるよ🪄✨ (Visual Studio Code)