AIが書いたコードが動かない理由:ChatGPTと安全に付き合うための開発ガイド
🤖 ChatGPTはなぜコードを書けるのにバグも出すのか?
〜AIコード生成の仕組みと、完璧でない理由を解説〜
ChatGPTが出してくれたコード、動かないぞ…?
そんな経験、ありませんか?
この記事では、ChatGPTがコードを生成する仕組みと、
なぜそれでもバグが発生するのかを、最新の研究や事例を交えて解説します。
🧑🎓 生徒(Y):
先生、ChatGPTってコードを書けるじゃないですか。
でも、たまに動かないコードを出してくるんですよね…。なんでですか?
👨🏫 講師(I):
それはね、AIが「予測は得意だけど、実行はしない」からなんだ。
💡 ChatGPTは「正解」を書いているわけではない
AIはプログラミングの質問を受けたとき、
「それっぽいコード」を1語ずつ予測して組み立てているんだ。
たとえば:
try (BufferedReader br = new BufferedReader(new FileReader("file.txt"))) {
String line;
while ((line = br.readLine()) != null) {
System.out.println(line);
}
}
これは、よくある「Javaでのファイル読み込み」の構文例。
AIは過去に学習した大量のコードの中から、最も自然そうな書き方を出しているだけ。
🧠 でも、“動作確認”も“意図の確認”もしていない
ここが超重要なポイント。
ChatGPTはコードを…
- 実行しない(コンパイルやエラー確認なし)
- あなたの認識が間違っていてもツッコまない
- 命名や設計がズレていても合わせて出してくる
AIは**“言われたとおりに作る相棒”**であって、
“間違いを正してくれる先生”ではないんだ。
⚠️ AIがよくやるコーディングミス(Java編)
以下は、実際の研究でも報告されている「AIが生成しがちなバグの例」です:
🔹 import文の漏れ
// BufferedReaderのimportがないまま始まってしまう例
BufferedReader reader = new BufferedReader(new FileReader("file.txt"));
→ import java.io.*;
が抜けていてコンパイルエラー
🔹 意図と違うループ構造
for (int i = 0; i <= list.size(); i++) { // <= はバグ
System.out.println(list.get(i));
}
→ IndexOutOfBoundsException
が発生
🔹 クラス名とファイル名が一致していない
public class UserData {
// ...
}
→ ファイル名が Main.java
のままだとエラー
🔹 メソッドの呼び出し順の誤り
Scanner scanner = new Scanner(System.in);
scanner.close(); // ← 先に閉じてしまう
String input = scanner.nextLine();
→ IllegalStateException
: Scannerが閉じられているため読み取れない
🔬 研究から見えてくる傾向
- **UTSAの研究(2025年)**では、AIが生成したコードに特定のエラーが含まれており、これが開発者にとって深刻な脅威となる可能性があると報告されています。
- **GitClearの分析(2025年)**によると、AIアシスタントが生成したコードの品質に関して、AI支援のコードと非AI支援のコードの間に測定可能な違いがあることが示されています。
💬 例えるなら「ノリでコード書く先輩」
頼れるし、レスポンスも早い。
でもちょっとおおざっぱで、「いけそうやから書いといた!」って感じでコードを渡してくる。
意図がズレてたら?
→ そのまま突き進んでくる(笑)
✅ ChatGPTと上手く付き合うには?
ChatGPTと上手くやっていくには、こんな心構えが大事👇
- ✅ 「動くコード」ではなく「参考になるコード」として見る
- ✅ 仕様や設計を自分で確認した上で質問する
- ✅ 生成されたコードは必ず自分で実行・検証する
- ✅ 完成形よりも“下書き”をもらう感覚で使う
🎓 おわりに:AIは“魔法の杖”じゃない
🧑🎓 Y:
なるほど…。ChatGPTって、コード職人というより“ノリのいい相棒”みたいな存在ですね(笑)
👨🏫 I:
そうそう。質問がうまくハマれば超強力。でも、ズレてるとズレたまま進む。
だから、AIを使いこなすには「自分の理解」が一番の土台なんだよ。
📚 この記事のまとめ
- ChatGPTは「予測」でコードを出している(実行・検証はしない)
- コーディングミスは構文より意図や設計のズレが多い
- 実際の研究でも動かないコードが多く報告されている
- 上手に使うには“正解”を求めすぎず、下書き・たたき台として使うこと
🔗 参考文献
- Spracklen, J., et al. (2025). AI threats in software development revealed in new study. Tech Xplore
- GitClear. (2025). AI Copilot Code Quality: 2025 Data Suggests 4x Growth in .... GitClear
Discussion