~/VibeHandbook
無料 PDF

12 · 02

デバッグのチェックリスト

これらを順番に進めてください。いきなり「直して」に飛びつくと、AIは堂々巡りに陥ります。

  1. 確実に再現する。 バグが毎回起こる正確な手順を見つけます。再現できないバグは、直ったことを確認できないバグです — 消えたかどうか永遠に推測するしかなくなります。断続的に起こるなら、それを切り替える変数を狩りましょう。特定の入力、ログイン状態かログアウト状態か、遅いネットワークなど。
  2. エラーそのものを読む。 流し読みしないこと。エラーメッセージとスタックトレースの 先頭 は、たいてい問題が起きたファイルと行を示しています。初心者は、画面上で最も有用な一文を、怖そうに見えるという理由で読み飛ばしてしまいがちです。
  3. コンテキストを集める。 エラーのテキスト、スタックトレース、関連するコード、そして期待していた挙動の一行説明を集めます。
  4. AIに全体像を渡す。 上記すべてを1つのメッセージに貼り付けます。AIに仮説を立てさせましょう。
  5. 修正ではなく仮説を立てる。 「直して」より先に「これの原因は何か?」と尋ねます。間違った理論に基づく間違った修正は時間の無駄です — そして時には、最初のバグの上に 2つ目の バグを積み上げます。
  6. ログを追加して仮説を検証する。 コードを変える前に、コードが実際に何をしているのかを確認します。
  7. 問題を二分探索する。 怪しい範囲を繰り返し半分に切り分けて、どこで 壊れるのかを絞り込みます。
  8. 症状ではなく根本原因を直す。 修正が、目に見える不具合だけでなく なぜ 壊れたのかに対処していることを確認します。
  9. 修正を検証し、リグレッションをチェックする。 再現手順をもう一度実行します。それから、近くの機能がまだ動くことを確認します — リグレッションとは、修正がそれまで動いていた何かをこっそり壊してしまうことです。ある漏れをふさいだら、すぐ隣のパイプが破裂するように。

そのチェックリストは、実はバグが消えるまで回り続ける1つのループです。各ボックスが次に証拠を手渡し、検証に失敗すれば、学んだことを携えてもう一周します:

   ┌──────────────┐
   │     再現     │  毎回起こるように
   └──────┬───────┘
          ▼
   ┌──────────────┐
   │ エラー読取 + │  実際に何と言ってる?
   │     収集     │  トレース+コード+文脈
   └──────┬───────┘
          ▼
   ┌──────────────┐
   │     仮説     │  「原因は何か?」
   └──────┬───────┘
          ▼
   ┌──────────────┐
   │    ログで    │  ログ追加、証拠を得る
   │     確認     │
   └──────┬───────┘
    誤った│  正しい
   ┌──────┘ 推測    ▼
   │            ┌──────────────┐
   │ (新しい    │   根本原因   │  症状ではなく
   │  理論)     │     修正     │
   │            └──────┬───────┘
   │                   ▼
   │            ┌──────────────┐    失敗 / 回帰
   └────────────┤     検証     │──────────┐
                │  + 回帰確認  │          │
                └──────┬───────┘          │
                       │ 合格             │
                       ▼          ◀───────┘
                    ✔ 完了      (もう一周)

順番は恣意的ではありません。各ステップは、次のステップが必要とする証拠を生み出します。再現は読むものを与え、読むことは集めるコンテキストを与え、コンテキストはAIに仮説を立てる材料を与えます。ステップを飛ばせば、次のステップに穴を食わせることになります。

オフラインでも読みたい?

本編まるごとを PDF または EPUB で無料ダウンロード。