AIコーディングツールを使っていると、なぜか同じような処理が何度も書かれていることに気づきます。
どうも、最初の処理がうまくいかなかったときのために、2つ目、3つ目の似たような別の方法が用意されている。
でも本番環境で動かしてみると、実際には最初の処理しか実行されていませんでした。
残りのコードは一度も使われていない。
それなのに、コードベースはどんどん膨らんでいきました。
1. AIが「念のため」を重ねる理由
なぜこんなことが起きるのか。
これはAIコーディングツール特有の構造的な問題なのかもしれません。
人間の開発者なら、こんな流れで考えます。
「まずAという方法でやってみよう。動いた。よし、完成」。
もしAが動かなければ、そこで初めて「じゃあBを試そう」となります。
結果を見て判断するわけです。
ところがAIは違います。
AIは自分が書いたコードの実行結果を直接見ることができません。
だから、
「Aが動くかわからない。念のためBも書いておこう。Bも不安だな。Cも追加しておくか」
となってしまうのです。
これは推測ですが、AIの学習過程にも関係していると思います。
コードの成功率を上げるためには、複数の方法を用意しておいた方が確実です。
学習データの中で「フォールバック付きのコード」の方が成功率が高かったため、AIはそのパターンを学習してしまったのではないでしょうか。
1.1. 具体的にどんなコードになるのか
たとえば、ユーザーのプロフィール画像を取得する機能で
function getUserImage(userId) {
// まずAPIから取得を試みる
const imageUrl = fetchImageFromAPI(userId);
if (imageUrl) {
return imageUrl;
}
// APIがダメならキャッシュから
const cachedImage = getFromCache(userId);
if (cachedImage) {
return cachedImage;
}
// キャッシュもなければデータベース
const dbImage = queryDatabase(userId);
if (dbImage) {
return dbImage;
}
// 全部ダメならデフォルト画像
return DEFAULT_IMAGE;
}
Code language: JavaScript (javascript)
一見、ちゃんとしています。
でも実際に調べてみると、APIは常に正常に動作していました。
つまり、下の3つの処理は、本番環境で一度も実行されていなかったのです。
問題は、これには気づきにくいことです。
動作確認では問題なく動く。
だから誰も疑問に思わなかった。
2. 使われないコードが残り続ける怖さ
「使われていないなら、まあいいか」と思うかもしれません。
でも実際には、かなり厄介な問題を引き起こします。
たとえば、3ヶ月後、画像のサイズを変更する機能を追加するとします。
担当者は真面目に4つすべての処理を修正することになります。
もっと困るのは、バグ調査のときです。
「画像が正しく表示されない」という報告があったとき、開発者は4つの処理すべてをチェックしなければなりません1。
半年後には、誰もこのコード全体を理解できなくなっていました。
「何かしらの理由があって4つの方法が用意されているんだろう」という前提で、さらに5つ目の方法を追加する人まで現れることになります。
2.1. コードが増え続ける悪循環
この問題の厄介なところは、時間とともに悪化していくことです。
Googleの調査では、AI活用が90%増加した企業で、バグ率が9%上昇し、コードレビューの時間が91%増加したそうです2。
コード量は増えているのに、品質は下がっている。
これが現実です。
技術的負債という言葉がありますが、これはまさにその典型例だと思います。
短期的には開発が速くなるように見えます。
でも長期的には、理解不能で修正不能なコードが積み上がっていく。
2.2. なぜレビューで見逃されるのか
コードレビューで気づけばいいじゃないか、と思うかもしれません。でも実際には、かなり見逃しやすいのです。
まず、AIが生成するコードは表面的にはとても自然です。
変数名も適切だし、コメントもついている。構文エラーもない。
だから「ちゃんと書かれている」と感じてしまいます3。
それに、フォールバックがあること自体は悪いことではありません。
システムの堅牢性を高めるための正当な設計手法です。
だからレビュアーは「念入りに作られているな」と好意的に受け取ってしまう4。
問題は、そのフォールバックが本当に必要かどうか、です。
最初の処理が十分に安定しているなら、後続の処理は不要なはずです。
でもコードを見ただけでは、それが判断できません。
GitClearという会社の調査によると、2022年から2024年の間に、AIが生成するコードの重複は8倍に増えたそうです5。
つまり、同じような処理が何度も書かれる傾向が急速に強まっているということです。
3. 実行結果を見られないAIのジレンマ
もう少し掘り下げて考えてみます。
なぜAIはこんな書き方をするのでしょうか。
人間の開発者は、コードを書いたら実行します。
動作を確認して、問題があれば直す。
このフィードバックループがあるから、無駄なコードを削除できます。
「あ、Aだけで十分だな。B以降は要らない」と判断できるわけです。
でもAIにはこのフィードバックループがありません。
AIはコードを生成した時点で仕事が終わります。
その後、そのコードが実際にどう動くか、AIは知ることができません。
だからAIは「保守的」になります。
失敗するリスクを下げるために、複数の方法を用意する。
どれかは成功するだろう、という戦略です。
これは確率的には正しい判断かもしれません。
でも、コードの品質という観点では問題です。
海外のエンジニアがブログで興味深い指摘をしていました。
「AIエージェントにWikiページの自動グルーピング機能を作らせたら、本来のLouvain法の実装に加えて、それが失敗したときのためのアルファベット順グルーピングまで勝手に追加されていた。しかも、どちらが実際に動いているのか、ベンチマークでは判別できなかった」と6。
これは深刻な問題です。
プロトタイピングの段階では、「新しいアプローチが本当に効果があるか」を検証したいわけです。
でもフォールバックがあると、新しい方法が失敗してもフォールバックが成功してしまうので、何を検証しているのかわからなくなります。
3.1. AIとの付き合い方を考え直す
半年間、この問題と向き合ってきて思うのは、AIコーディングツールを「完全自動化」のツールとして使うのは無理があるということです。
AIは確かに速くコードを書いてくれます。
でも、そのコードが本当に必要なものだけで構成されているかは、人間が検証しなければなりません。
特にフォールバックやエラーハンドリングの部分は要注意です。
最近は、AIに大きな機能を丸ごと任せるのではなく、小さな単位でコードを生成させるようにしています。「このAPIを呼び出す部分だけ書いて」という具合です。そうすると、フォールバックが混入する余地が減ります。
それと、AIが生成したコードは必ず実行して動作確認する。当たり前のことですが、これが大事です。「動いたからOK」ではなく、「どの処理が実際に動いたか」まで確認する。そうすると、使われていないコードに気づけます。
4. コードの見通しを保つために
AI時代のコーディングで一番大事なのは、コードの見通しを保つことだと思います。
「動けばいい」という考え方だと、AIが生成した冗長なコードをそのまま受け入れてしまいます。でも半年後、1年後のことを考えると、そのコードを理解し、修正できる状態を保つ方が重要です。
開発速度が上がることは素晴らしい。でもその代償として、理解不能なコードベースになってしまっては意味がありません。速く書けるからこそ、立ち止まって見直す時間が必要なのかもしれません。
- コードの重複は単なる冗長性の問題ではありません。研究によると、重複コードは15%から50%も多くのバグを引き起こす傾向があります。これは、バグ修正時に重複した箇所の一部だけが修正され、他の箇所が見落とされるためです。 – Why AI-generated code is creating a technical debt nightmare
- Google DORAの2025年レポートでは、AI採用率が90%増加した組織において、ソフトウェア配信の不安定性が約9%上昇し、コードレビュー時間が91%増加、プルリクエストのサイズが154%増加したことが報告されています。これは高速化と引き換えに品質面での課題が生じていることを示しています。 – The inevitable rise of poor code quality in AI-accelerated codebases
- AIが生成するコードは構文的には正しくても、セキュリティ面での問題を含むことが多いとされています。Veracodeの調査によると、AI生成コードの45%に既知のセキュリティ脆弱性が含まれており、この割合は2年前から改善していないことが報告されています。表面的な正しさが、レビュー時の警戒心を低下させる要因となっています。 – AI-Generated Code Poses Security, Bloat Challenges
- MSR 2026で発表された研究によると、レビュアーはAI生成のプルリクエストに対して、人間が書いたコードよりも中立的または肯定的な感情を示す傾向があることが明らかになっています。これは、AIコードの表面的な妥当性が、コードの重複や保守性の問題を見逃させる要因となっていると分析されています。 – More Code, Less Reuse: Investigating Code Quality and Reviewer Sentiment towards AI-generated Pull Requests
- GitClearは2020年から2024年にかけて211百万行のコードを分析し、5行以上の重複コードブロックの頻度が8倍に増加したことを報告しています。この調査では、コードの「移動」(リファクタリング)が減少し、代わりに「複製」が増加する傾向が明らかになりました。 – Why AI-generated code is creating a technical debt nightmare
- この問題について、開発者のSean Goedeckeは自身のブログで「AIエージェントは常に自動的にフォールバックを構築する傾向がある。これは強化学習の副産物と考えられ、フォールバック付きのコードの方が成功率が高いため、訓練中にこのパターンを学習したと推測される」と指摘しています。プロンプトで「DO NOT WRITE FALLBACK CODE」と複数回繰り返すことで回避できる場合があるとのことです。 – AI coding agents rely too much on fallbacks