AI-Generated Code Is Not Reproducible (Yet): An Empirical Study of Dependency Gaps in LLM-Based Coding Agents
この論文は、Claude Code、OpenAI Codex、Gemini という 3 つの LLM コーディングエージェントが生成したコードを対象とした実証研究を通じて、宣言された依存関係と実際のランタイム依存関係の間に大きな乖離(平均 13.5 倍の拡大)が存在し、特に Java において実行環境での再現性が低いことを明らかにしています。
原論文は CC BY 4.0 (http://creativecommons.org/licenses/by/4.0/) でライセンスされています。 これは以下の論文のAI生成解説です。著者が執筆または承認したものではありません。技術的な正確性については原論文を参照してください。 免責事項の全文を読む
AI が書いたコードは、実は「そのままでは動かない」?
~「再現性」の危機を解き明かす、ある実験の物語~
この論文は、**「AI(人工知能)がコードを書いたとしても、そのコードを他の人がそのまま実行できるか?」**という、とても重要な疑問に答える実験結果を報告したものです。
結論から言うと、**「AI が書いたコードは、約 3 割の確率で『そのままでは動かない』」**という衝撃的な事実がわかりました。
これをわかりやすく、日常の例え話を使って解説しましょう。
1. 実験の舞台:「完璧なレシピ」のテスト
Imagine(想像してみてください):
あなたが料理の天才 AI に、「美味しいパスタのレシピを作って」と頼んだとします。
AI は、完璧なレシピ(ソースコード)と、必要な材料リスト(依存関係)を渡してくれます。
**「再現性(Reproducibility)」とは、あなたがそのレシピと材料リストだけを持って、誰かのキッチン(クリーンな環境)に行き、「何も追加せず、何も修正せず」**に、同じパスタが作れるかどうかを意味します。
この研究では、3 つの有名な AI(Claude, OpenAI Codex, Gemini)に、Python、JavaScript、Java という 3 つの言語で、合計 300 個の「料理(プロジェクト)」を作らせました。そして、そのレシピ通りに作れるか試してみました。
2. 結果:「動かない」パスタが 3 割も!
結果は以下の通りでした。
- 全体成功率:68.3%
- 100 個の料理のうち、約 68 個は「レシピ通り」に作れました。
- しかし、約 32 個(31.7%)は、レシピ通りに作ろうとすると、すぐに失敗しました。
これは、AI が「完璧なレシピ」だと言ったのに、実際には「材料が足りていなかったり、手順が間違っていたり」していたということです。
3. 言語による「料理の難易度」の違い
面白いことに、使う言語(料理の種類)によって成功率が全く違いました。
- Python(パスタ):89.2% 成功
- 比較的簡単です。材料リスト(
requirements.txt)がシンプルで、AI もこれをよく理解しています。
- 比較的簡単です。材料リスト(
- JavaScript(寿司):61.9% 成功
- 中くらいです。材料の組み合わせが少し複雑になります。
- Java(フレンチ料理):44.0% 成功
- 大失敗! 約半数が失敗しました。
- Java は材料の入れ子構造が複雑で(Maven というシステム)、AI が「必要な材料」をすべてリストアップするのが非常に難しいようです。
4. 最大の謎:「隠れた材料」の爆発
これがこの研究で最も驚くべき発見です。
AI はレシピに**「材料は 3 種類だけ」と書いてくれました。
しかし、実際に料理を始めようとすると、「実は 37 種類も材料が必要だった!」**という事態が起きました。
- AI の主張: 「小麦粉、卵、牛乳」だけでいいよ!
- 現実: 「小麦粉、卵、牛乳」を入れると、実は「バター、塩、砂糖、ベーキングパウダー…」など、隠れた材料が 30 種類以上も必要だった!
これを**「依存関係の爆発(Dependency Explosion)」と呼びます。
AI が「これだけあれば OK」と言った材料リストは、氷山の一角に過ぎず、その下には巨大な「隠れた材料の山」が潜んでいるのです。
特に Java では、「2 個の材料と言われたのに、実際には 20 個以上必要」**というケースが頻発しました。
5. なぜ失敗するのか?「材料不足」だけじゃない
多くの人は、「AI が材料を言い忘れたから失敗するんだ」と思っているかもしれません。
しかし、実験結果はそれを否定しました。
- 材料不足(依存関係の欠落): 失敗の 10% 程度
- コード自体のバグ: 失敗の 50% 以上!
AI は「材料を言い忘れる」こともありますが、それよりも**「レシピ自体がおかしい(文法ミス、論理ミス)」**ことが原因で失敗することが多いのです。
例えば、「卵を割る前に、ボウルを用意する」という手順を忘れたり、材料の入れ方を間違えたりしています。
6. AI によって「得意分野」が違う
3 つの AI には、それぞれ隠れた「得意分野」がありました。
- Gemini: Python 料理は100% 成功する天才ですが、Java 料理は**28%**しか成功しません。
- Claude: Java 料理に強く、80% 成功しますが、他の AI に比べると Python は少し劣ります。
- Codex: Python は得意ですが、Java は苦手のようです。
つまり、「どの AI を使うか」は、あなたが作りたい料理(プログラミング言語)によって選ぶべきなのです。
7. 私たちへの教訓:AI は「魔法の杖」ではない
この研究が教えてくれることは、とても重要です。
- AI は「コードを書く」ことはできるが、「動く環境を作る」ことはまだ苦手。
AI は「コード」というレシピは書けますが、そのコードを動かすために必要な「隠れた材料」や「環境設定」まで完璧に把握できていません。 - 人間の手間が隠れている。
AI が作ったコードが動かない場合、人間が 15 分〜30 分かけて「なぜ動かないのか?」を調べ、材料を足したり、手順を直したりする必要があります。これは、AI が時短を約束したはずが、逆に時間を奪う「隠れたコスト」になっています。 - 科学やビジネスへの影響。
もし研究論文のコードや、会社のシステムが AI で作られ、再現できなければ、その結果は信用できません。「誰か他の人が試してみたら動かない」という状態では、科学もビジネスも成り立ちません。
まとめ
AI は素晴らしい「アシスタント」ですが、まだ「完全なパートナー」にはなれていません。
AI が「これだけで動きます!」と言っても、**「本当に動きますか?材料は全部揃っていますか?」**と、人間が必ずチェックし、裏付けを取る必要があります。
この研究は、AI 開発の未来に向けて、「コードを書くこと」だけでなく、「そのコードを誰にでも再現できるようにすること」を、AI に学ばせる必要があると警鐘を鳴らしています。
AI が本当に「魔法」になる日は、その「隠れた材料」まで正確にリストアップできるようになった時、そして「動かないコード」を自分で見つけて直すことができるようになった時に来るでしょう。
自分の分野の論文に埋もれていませんか?
研究キーワードに一致する最新の論文のダイジェストを毎日受け取りましょう——技術要約付き、あなたの言語で。