「AIにコードを直してもらったのに、なぜか同じバグが再発する…」
そんな経験、最近じわじわ増えてきていませんか? 🤔
海外の開発者コミュニティで、ちょうどそのテーマを扱った興味深い体験談が話題になっています。Claude Codeを使ってBlocklyベースの大学向けプログラミング演習プラットフォームを「エディタを一切開かずに」構築した開発者が、繰り返し同じバグが戻ってくるという不思議な現象に直面した話です。
今回はこの事例をもとに、AIコーディングツールあるある「バグの再帰」が起きる仕組みと、その対策を一緒に考えてみましょう!
🐛 「バグが戻ってくる」とはどういうこと?

まずこの現象をざっくり説明すると——
AIにバグを修正してもらう → 動く → 別の機能を追加してもらう → 最初のバグが復活する
…というサイクルのことです。
これ、なぜ起きるのかというと、AIは「会話の文脈」をベースにコードを生成するからなんですよね。コードベース全体の「意図」を完全に把握しているわけではなく、直近のやりとりや、手元にあるファイルのスナップショットをもとに判断します。
つまり、修正した内容が次の生成フェーズで上書きされてしまうことがあるわけです。
🔍 具体的に何が起きているか
よくある原因をまとめるとこんな感じです。
- ✅ AIが「以前の修正」を知らないまま古いパターンで生成する
- ✅ 修正がコメントや変数名に反映されておらず、AIが意図を読み取れない
- ✅ 複数ファイルにまたがる副作用を追えていない
- ✅ 「直して」という指示が曖昧で、根本原因ではなく症状だけ対処される
イメージとしては、「設計図を見せずに口頭で大工さんに頼む」みたいな感じです。毎回ちゃんと作ってくれるけど、前回の変更を覚えていないから同じところを削ってしまう、という状況ですね。
💡 再発バグを防ぐための実践テクニック
では、どう対策すればいいのでしょう?ポイントを3つに絞りました。
① バグ修正をコメントに明示的に残す
AIが次のタスクでも「この修正が存在する」と認識できるよう、コード内にコメントを必ず残しましょう。
# [FIXED 2025-06] ループ終了条件のオフバイワンバグを修正済み
# 以前: range(len(items)) → 現在: range(len(items) - 1)
# AIへの指示: この修正は意図的なものです。変更しないこと。
for i in range(len(items) - 1):
process(items[i], items[i + 1])
このひと手間で、AIが「あ、ここは意図して変えてあるんだな」と判断しやすくなります。
② 「制約プロンプト」をセットで渡す
新機能を追加してもらうときに、あわせて「触ってはいけない箇所」を明示するのが効果的です。
# AIへの指示テンプレート(例)
## 追加してほしいこと
- ユーザーのログイン状態をセッションで管理する機能
## 絶対に変更しないこと
- auth.py の validate_token() 関数(バグ修正済み)
- DB接続のリトライロジック(意図的な実装)
ポイントをまとめるとこんな感じです。
- 📌 「やること」と「やらないこと」を両方書く
- 📌 理由も一言添えると精度が上がる
- 📌 ファイル名・関数名レベルで具体的に指定する
③ 差分レビューを習慣にする
AIが生成したコードをそのまま採用するのではなく、git diff で変更箇所を必ず確認する習慣をつけましょう。「動いてるからOK」は、バグ再発の温床になりがちです。
まとめ
AIコーディングツールは強力ですが、「文脈を継承する仕組み」は人間が意識的に作る必要があります。コメントでの意図の明示・制約プロンプトの活用・差分レビューの徹底——この3つを意識するだけで、バグの再発はぐっと減らせるはずです。
「AIに任せたら楽になるはずなのに、デバッグで逆に時間をとられてる…」という状況、ぜひ今日から見直してみてください 🚀





