AI時代に不要なコードをコメントアウトで残すのはリスクと判明
公開日
開発生産性
GitHub CopilotやCursorなどのAIコーディングアシスタントは、開発効率を劇的に向上させる一方で、生成されるコードのセキュリティリスクも指摘されています。特に、開発者が一時的なメモや無効化のために日常的に残している「コメントアウトされたコード」が、AIの出力に予期せぬ悪影響を及ぼす可能性があります。
本記事では、中山大学の研究チームが発表した論文「Comment Traps: How Defective Commented-Out Code Augment Defects in AI-Assisted Code Generation」(2026年)に基づき、コメントアウトされた欠陥コードがAIによるコード生成にどのような影響を与えるのかを解説します。
調査概要とコメントアウトされたコードの利用実態
本調査は、GitHub上の6,403個の高品質なPythonリポジトリ(2022年12月以降に更新されたもの)から抽出した1,000個のデータサンプルを用いて実施されました。
開発現場では、後で再利用するため、あるいはデバッグの目的で、コードの一部をコメントアウト(非実行化)して残すことがよくあります。研究チームがリポジトリを分析した結果、全体の84.62%にあたるリポジトリでコメントアウトされたコードが存在していました。
さらに重要な点として、コメントアウトされたファイル全体の18.58%に、セキュリティ上の脆弱性などを含む「欠陥コード」が含まれていることが確認されました。これらのコードはプログラムとして実行されないため、通常の静的解析ツールでは見過ごされがちです。しかし、プロンプトを読み込んで文脈を理解するAIツールにとっては、これらのテキストも推論のための重要な情報源となります。
欠陥コードの生成リスク:最大58.17%の増加
では、プロンプトのコンテキスト内に欠陥のあるコメントアウトが含まれている場合、AIの出力はどのように変化するのでしょうか。
研究チームは、GitHub CopilotとCursor(それぞれGPT-4oとClaude 3.5 Sonnetを使用)に対し、欠陥のあるコメントアウトを挿入した状態と、何も挿入していない状態(Blankグループ)でコード生成を行わせ、結果を比較しました。
| AIツール・モデル | 何も挿入していない状態の欠陥数 (Blank) | 欠陥コメント挿入時の平均欠陥数 (Avg.) | 欠陥数の平均増加率 |
|---|---|---|---|
| GitHub Copilot (GPT-4o) | 394 | 482.82 | 22.54% |
| GitHub Copilot (Claude 3.5) | 416 | 502.09 | 20.69% |
| Cursor (GPT-4o) | 426 | 532.82 | 25.07% |
| Cursor (Claude 3.5) | 589 | 716.82 | 21.70% |
図表1:各AIモデルにおける欠陥生成数と増加率(一部抜粋)
図表1の通り、すべてのツールとモデルにおいて、欠陥のあるコメントアウトが存在すると、生成されるコードの欠陥数が平均して20%以上増加することが判明しました。特に、GitHub Copilotでコメントアウトを補完位置の直後に配置した特定のケースでは、欠陥数が最大で58.17%も跳ね上がりました。
この結果は、コメントアウトしたコードであっても、AIツールがそれを文脈の一部として取り込み、実際の実行コードに欠陥を混入させてしまう危険性を明確に示しています。
AIはコードを単にコピーするのではなく「推論」している
欠陥の増加を確認した後、一つの疑問が浮かびます。それは「AIはコメントアウトされたコードを単純にコピー&ペーストしているだけなのか」という点です。
これを検証するため、研究チームは意図的にコメントアウトされたコードの後半50%を削除し、不完全な状態にしてAIに読み込ませました。もし単なるコピーであれば、不完全なコードが出力されたり、欠陥の転写が止まったりするはずです。
しかし結果として、不完全なコメントアウトを与えられた場合でも、AIツールは依然として欠陥のあるコードを生成し続けました。これは、AIが断片的な情報から元の脆弱なパターンを推論し、完全な欠陥コードを再構築する能力を持っていることを意味します。
また、コメントアウトの前後を<Vulnerable>(脆弱性あり)という明確なタグで囲んだ実験でも、AIは警告を無視して欠陥コードを生成しました。AIコーディングアシスタントの高度な推論能力が、かえってセキュリティリスクを増幅させる要因になっていることがわかります。
プロンプト指示による対策の限界
このようなリスクに対し、開発者が手軽に取れる対策としてプロンプトエンジニアリングがあります。コードを生成する前に「コメントアウトされたコードを参照しないでください」と明確な指示を与えれば、問題を回避できるのではないかと考えられます。
| ツール・モデル | 対策前の欠陥数 | 指示追加後の欠陥数 | 減少率(%) |
|---|---|---|---|
| GitHub Copilot (GPT-4o) | 567 | 471 | 16.93 |
| GitHub Copilot (Claude 3.5) | 630 | 567 | 10.00 |
| Cursor (GPT-4o) | 499 | 390 | 21.84 |
| Cursor (Claude 3.5) | 751 | 714 | 4.93 |
図表2:プロンプトエンジニアリングによる欠陥減少効果
図表2が示す通り、明示的な指示を与えることで欠陥数を減らすことには成功しています。GPT-4oモデルの方がClaude 3.5 Sonnetよりも指示に従う傾向が見られました。
しかし、最も効果が高かったCursor (GPT-4o) の組み合わせでも、欠陥の減少率は21.84%にとどまっています。この数値は、単純なプロンプトによる指示だけでは、AIがコメントアウトに引きずられる現象を完全に排除するには不十分であることを示しています。
コード前後の空白行がAIに与える影響
さらに、コメントアウトされたコードの周囲の構造(コンテキストの疎密)も、AIの解釈に影響を与えます。
研究チームは、コメントアウトの上下に空白行がある状態(周囲が疎な状態)と、前後の行と密接にくっついている状態を比較しました。その結果、GitHub Copilotは周囲に空白行があり、コメントアウトが独立して目立つ状態であるほど、その内容を重要視してしまい、欠陥コードを生成しやすい傾向が確認されました。
一方でCursorは、使用するモデルによって空白の解釈が異なり、明確な一貫性は見られませんでした。これは、ツールごとにプロンプトを処理して言語モデルに渡す仕組み(プリプロセスやポストプロセス)が異なるためだと推測されています。
まとめ
本論文の調査により、開発者が何気なく残している「コメントアウトされた欠陥コード」は、AIコーディングアシスタントに誤った文脈を与え、新たな脆弱性を生み出す原因になることが明らかになりました。
AIは指定されたプロンプトや警告タグを正確に守り切れるわけではなく、不完全な情報からでも欠陥を推論してしまいます。安全なソフトウェア開発を行うためには、不要になった古いコードや脆弱性を含むテストコードはコメントアウトのまま放置せず、リポジトリから適切に削除する運用を徹底することが重要です。
生成AIの導入や活用にお困りですか? 弊社のサービス は、開発チームが抱える課題を解決し、生産性と幸福度を向上させるための様々なソリューションを提供しています。ぜひお気軽にご相談ください!
参考資料: