「バグの原因が分からない」と悩んでいませんか?
現役WEBエンジニアとして、日々デバッグを行っています。
この記事では、効率的なデバッグ方法を解説します。
目次
デバッグの基本姿勢
心構え
| 原則 | 説明 |
|---|---|
| 仮説を立てる | 闇雲に探さない |
| 再現する | まず再現手順を確認 |
| 1つずつ | 一度に複数変更しない |
| 記録する | 試したことを残す |
console.logの使い方
基本
// 値の確認
console.log('user:', user);
// オブジェクトを見やすく
console.log(JSON.stringify(user, null, 2));
// テーブル表示
console.table(users);
// グループ化
console.group('ユーザー処理');
console.log('開始');
console.log('user:', user);
console.groupEnd();
条件付きログ
// 特定条件でのみ
if (user.id === 123) {
console.log('対象ユーザー:', user);
}
ブラウザDevTools
Sources タブ
- ブレークポイント設置
- ステップ実行
- 変数の値を確認
- コールスタック確認
Network タブ
- APIリクエスト確認
- レスポンス確認
- タイミング確認
Console タブ
- エラー確認
- 実行時の値確認
- コード実行
VSCodeデバッグ
launch.json例
{
"version": "0.2.0",
"configurations": [
{
"type": "node",
"request": "launch",
"name": "Debug",
"program": "${workspaceFolder}/src/index.ts",
"preLaunchTask": "tsc: build"
}
]
}
ブレークポイント
- 行番号クリックで設置
- 条件付きブレークポイント
- ログポイント
バグの見つけ方
二分探索
問題が起きる最小のコードを特定
1. コードの半分をコメントアウト
2. 問題が起きるか確認
3. 起きる方を再度半分に
4. 繰り返し
最新のコミットから
# 問題が起きるコミットを特定
git bisect start
git bisect bad # 現在は問題あり
git bisect good abc123 # このコミットは問題なし
# 自動で二分探索
よくあるバグパターン
JavaScript
| パターン | 原因 |
|---|---|
| undefined | 初期化忘れ、API応答前にアクセス |
| NaN | 数値変換失敗 |
| 無限ループ | 終了条件の誤り |
| this参照 | アロー関数とfunction |
対処法
// undefinedチェック
const value = data?.user?.name ?? 'default';
// 型チェック
if (typeof value === 'number' && !isNaN(value)) {}
デバッグのコツ
やるべきこと
- まず再現手順を確認
- エラーメッセージを読む
- 仮説を立てて検証
- 最近変更した箇所を疑う
やってはいけないこと
- 闇雲に修正
- 一度に複数変更
- 記録を残さない
まとめ
デバッグのポイント:
- 再現手順を確認
- 仮説を立てて検証
- DevToolsを活用
- 1つずつ確認
