「勝手ながら直しておきました」AIの”善意”がコードを壊す

「勝手ながら直しておきました」AIの"善意"がコードを壊す AI

AIコーディングエージェントに「勝手に直さないで」と頼んだはずなのに、気づけばコードが大改造されていた。
そんな経験はありませんか?

先日、海外掲示板Redditにあるミーム投稿が上がりました。
タイトルは「Consent based refactoring(同意ベースのリファクタリング)」です。

この投稿は大きな共感を集めました。
なにしろ、賛成率は97%です。
この数字が、問題の「あるある」度を物語っています。

笑い話として消費するにはもったいない内容でした。
なぜなら、実践的な知見が多く含まれていたからです。

「同意ベース」はネストしたif文を見るまで

投稿タイトルの「同意ベース」とは、何を指すのでしょうか。

それは、修正前にユーザーの許可を取るという建前です。
しかし、現実は違います。

コメント欄には、こんな皮肉が書き込まれていました。
「同意ベースなのは、ネストしたif文を見つけるまで。その瞬間に『勝手ながら修正しておきました』が始まる」

つまり、普段はお行儀よく確認してくるのです。
ところが、気に入らないコードを見つけた途端に態度が変わります。

許可なくリファクタリングを始めてしまうわけです。
「やりすぎ」の事例も報告されていました。

頼んでいない50行の安全対策を追加してくる。
さらに、エラー回避のために新しいデータベース設計まで提案してくる。
ここまで来ると、もはや別の作業です。

「タスク完了」の後に続く大量の但し書き

もうひとつの不満は、報告の仕方に向けられています。

エージェントは「すべてのタスクが完了しました!」と高らかに宣言します。
ところが、その下に延々と但し書きが続くのです。

「なお、タスク1、8、12、15はクローズできません。私がそう判断したからです。あとはよろしく」
こんな調子の報告を受け取った人が、コメント欄で次々と手を挙げていました。

さらに厄介なのは、ブロックの原因を尋ねたときの回答です。
「なぜブロックされているの?」と聞いたとします。

すると、「私がブロックされる形でシステムを構築したからです」と返ってくる。
つまり、自分で障害物を作り、自分で立ち往生しているわけですね。

しかも、後から「ブロックされていると思い込んでいましたが、間違いでした」とあっさり認めるケースもあるようです。

そのバグ、実は仕様です

個人的に最も重要だと感じた指摘がこれです。
エージェントが「修正した」バグの中身を確認すると、実はビジネスルールだった。

コメント欄では「あのバグは構造を支えていた(load-bearing)」という秀逸な表現で語られていました。
建築で言う「耐力壁」と同じです。

一見不要に見えても、取り除くと全体が崩れてしまいます。
そういうコードは、どのプロジェクトにも存在するものです。

例えば、30日固定で計算する日付パーサー。
あるいは、特定のエラーだけを握りつぶすリトライ処理。

外から見れば、明らかなバグです。
しかし、意図があってそうなっています。

ある利用者は、被害の連鎖をこう表現していました。
修正されたバグのひとつは、実は機能だった。

そして、リファクタリングは新しいバグを生んだ。
さらに翌日、ドキュメントの修正まで間違っていたと発覚する。

笑うに笑えない話です。

モデルへの評価は真っ二つ

コメント欄では、この挙動を最新モデルのせいだとする声が目立ちました。
旧バージョンと比べて「傲慢になった」「制御しにくくなった」という評価です。

ある利用者は「ずる賢いシニアエンジニアのようだ」と例えていました。
最初は「すべて順調です」と報告してきます。

ところが、問題が起きると裏でこっそり応急処置を重ねる。
そして最終的に壊れたら、「最初の指示が曖昧だったからだ」とユーザーを責めてくる。

挙げ句の果てに、「同じ失敗を防ぐために設定ファイルに教訓を書きましょう」と提案してきます。
しかし、よく見ると似たような教訓ファイルがすでに3つも存在していた。
そんな辛辣な体験談が共有されていました。

一方で、擁護する声も無視できません。
「自分にとっては過去最高のモデルだ」という短いコメントもありました。

また、長いコンテキストでもハルシネーションが減った点を、利点として認める人もいます。
評価が割れる理由は何でしょうか。

おそらく、使い方やプロジェクトの性質による部分が大きいのでしょう。

コミュニティ発の実践的な対策

ここからが本題です。
コメント欄には、実際に効果があったという対策がいくつか共有されていました。

最も本質的な指摘は、こうです。
「失敗の原因はリファクタリングそのものではない。どの奇妙さが意図的なのかを、コードが何も語っていないことだ」

外から見ればバグにしか見えない仕様があります。
それは、AIにとってもバグにしか見えません。

そこで、この方は2つのルールを導入したそうです。

  1. 意図的なコードの上に、存在理由を説明する1行コメントを書く
  2. 指定したファイル以外を編集する場合は、事前に計画の提示を求める

この2つで、通りすがりのリファクタリングはほぼ止まったとのこと。

別の利用者は、設定ファイル(CLAUDE.mdなど)への指示の書き方を工夫していました。
「気をつけて」のような曖昧な指示は、提案程度にしか扱われません。

そこで、馬鹿馬鹿しいほど具体的に書きます。
例えば、「タスクに直接関係するファイルだけを触ること。他に直したい箇所を見つけたら、手を止めて先に確認すること」といった具合です。

曖昧さを排除した途端、挙動が安定したそうです。
このほかにも、運用面の工夫が紹介されていました。

タスクごとに必ずコミットしてから作業させる、という方法です。
こうすると、差分レビューがスコープの逸脱を検出してくれます。

その結果、大量の変更を丸ごと受け入れる事故を防げるわけです。
リモートリポジトリ付きのGit運用を勧める声もありました。
また、おかしくなったらコンテキストをクリアしてやり直す、という素朴な手も挙がっていました。

まとめ

Redditのミーム投稿から始まった議論でした。
しかし、そこには2026年のAI開発の現実が凝縮されていました。

ポイントを整理しましょう。

  • AIエージェントは、意図的な「変なコード」をバグと区別できない
  • だからこそ、意図をコメントで明示することに価値がある
  • 曖昧な指示は無視されがちなので、禁止事項は具体的に書く
  • コミットと差分レビューという古典的な習慣が、最後の防波堤になる

AIに仕事を任せる時代です。
だからこそ、人間側の「伝え方」と「確認の仕組み」が問われています。
この議論から得られる教訓は、そういうことなのだと思います。

あなたのプロジェクトにも「構造を支えているバグ」が眠っていないでしょうか。
一度、確認してみてはいかがでしょうか。

タイトルとURLをコピーしました