公開日
コピペコードが急増中?AI生成コードの落とし穴と品質を守るための対策

近年、GitHub CopilotをはじめとするAIコードアシスタントの利用が急速に拡大しています。開発者は、AIによるコーディング支援に、生産性の大幅な向上を期待しています。しかし、その一方で、AIが生成するコードの品質に対する懸念の声も上がっています。
本記事では、コード分析プラットフォームGitClearが2025年2月に発表したレポート「2025 AI Copilot Code Quality Report」(以下、GitClearレポート)の内容を詳しく読み解き、AIコードアシスタントの利用がコード品質に与える影響を検証します。
開発現場におけるAI活用の現状:高まる期待と潜在的リスク
開発者の過半数がAIを利用、最大の目的は「生産性向上」
Stack Overflowが実施した 2024年の開発者調査 によると、プロの開発者の63%が開発プロセスにAIツールを利用しており、さらに14%が近いうちに利用を予定していると回答しています。開発者の多くが、AIに「生産性向上」を期待していることが示されています。
AIコードアシスタントは、定型コードの自動生成、エラーチェック、リファクタリングの提案など、開発者の作業を多方面からサポートします。しかし、AIが生成するコードは、必ずしも人間が書くコードよりも高品質であるとは限りません。AIは既存のコードを学習して新しいコードを生成するため、学習データに偏りや誤りが含まれていれば、それが生成コードに反映される可能性があります。
GitClearのデータが示すコード品質の変化:コピー&ペーストの増加とリファクタリングの減少
2億1100万行のコード変更履歴を徹底分析
GitClearは、2020年1月から2024年12月までの間に発生した、2億1100万行を超えるコード変更データを詳細に分析しました。その結果、AIコードアシスタントの普及と時期を同じくして、コード品質に懸念すべき変化が生じていることが明らかになりました。
GitClearは、コードの変更履歴を以下の7つのタイプに分類して分析しています。
- Added(追加): 新規に追加されたコード
- Deleted(削除): 削除されたコード
- Updated(更新): 既存のコードの一部分が変更されたもの
- Moved(移動): ファイルや関数間で移動されたコード(リファクタリングの指標)
- Copy/Pasted(コピー&ペースト): 複数のファイルや関数にコピー&ペーストされたコード
- Find/Replaced(検索/置換): 一括で検索・置換されたコード
- No-op(変更なし): 空白の変更など、実質的な意味のない変更
衝撃の事実:2024年、「Copy/Pasted」が「Moved」を上回る
GitClearレポートに掲載されている下記の図は、年ごとの「Moved(移動)」と「Copy/Pasted(コピー&ペースト)」の割合の推移を示しています。2021年から2023年にかけては、「Moved」の割合が「Copy/Pasted」を上回っていましたが、2024年にはその関係が逆転し、「Copy/Pasted」の割合が「Moved」を上回りました。これは、GitClearが観測を開始して以来、初めての事態です。
年ごとのMoved(移動)とCopy/Paste(コピー&ペースト)の割合の変化
「Moved」はコードのリファクタリング(再構築)が行われたことを示す重要な指標です。リファクタリングは、コードの可読性、保守性を高め、バグの発生を抑制する上で非常に重要な作業です。「Copy/Pasted」は、その名の通りコードの複製を意味し、重複コードを生み出しやすく、バグの温床となるリスクを高めます。
重複コードブロックも急増:2024年にはコミットの6.66%に
GitClearは、5行以上連続する同一のコードを「重複コードブロック」と定義し、その出現頻度も調査しています。
GitClearレポートに掲載されている下記の表は、年ごとの「重複コードブロック」を含むコミットの割合を示しています。2020年から2023年にかけては、この割合は1%未満でしたが、2024年には6.66%にまで急増しています。
年ごとの重複コードブロックを含むコミットの割合
年 | スキャンされたコミット数 | 発見された重複ブロック総数 | 重複ブロックを含むコミット数 | 重複ブロック率 | 重複ブロックサイズの中央値 |
---|---|---|---|---|---|
2020 | 19,805 | 9,227 | 139 | 0.70% | 10 |
2021 | 29,912 | 9,295 | 143 | 0.48% | 11 |
2022 | 40,010 | 10,685 | 182 | 0.45% | 11 |
2023 | 41,561 | 20,448 | 747 | 1.80% | 10 |
2024 | 56,495 | 63,566 | 3,764 | 6.66% | 10 |
これらのデータは、AIコードアシスタントの利用が、コードの安易なコピー&ペーストや重複コードブロックの増加を助長している可能性を強く示唆しています。
なぜ重複コードは問題なのか?:バグ増加、保守性低下、そして開発者の負担増
重複コードがもたらす具体的な問題点
重複コードは、ソフトウェア開発において、以下のような深刻な問題を引き起こす可能性があります。
- バグの増加リスク: 重複したコードの一方にバグが存在する場合、もう一方にも同じバグが存在する可能性が非常に高くなります。修正漏れが発生しやすく、バグの発見と修正が困難になります。
- メンテナンス性の著しい低下: 重複コードに変更を加える場合、すべての重複箇所を修正する必要があります。修正箇所が増えるほど、作業時間と手間が増大し、人的ミスも発生しやすくなります。
- 開発者の負担増と効率低下: 重複コードの存在は、コード全体の理解を妨げ、開発者の認知的な負荷を高めます。新しい機能の追加や仕様変更が難しくなり、開発効率を著しく低下させます。
研究結果が示す重複コードとバグの関連性
重複コードがバグの発生リスクを高めることは、多くの研究で指摘されています。Ran Moらによる2023年の研究「Exploring the Impact of Code Clones on Deep Learning Software」では、ディープラーニングソフトウェアを対象とした調査で、共変更(co-change)されたコードクローン(重複コード)の57.1%にバグが含まれていることが報告されています。
これは、重複コードの一方に変更が加えられた場合、もう一方にも同様の変更が必要であるにもかかわらず、それが忘れられ、バグが残存してしまう可能性が高いことを示唆しています。
Google DORAレポートも警鐘:AI利用とデリバリー安定性の低下
Google CloudのDevOps Research and Assessment(DORA)チームが発表した 2024年のレポート でも、AIの利用とソフトウェアデリバリーの安定性との間に、興味深い相関関係が示されています。
GitClearレポートに掲載されている下記の図は、AIの利用が25%増加した場合の、デリバリーのスループットと安定性への影響を予測したものです。AIの利用が増加すると、デリバリーの安定性が7.2%低下すると予測されています。
AIの採用が25%増加した場合の、デリバリーのスループットと安定性への影響を予測
AI時代のコード品質維持:開発者が今すぐ実践すべきこと
AIコードアシスタント利用時の注意点:「タブ」キーを押す前に
AIコードアシスタントは非常に便利なツールですが、生成されたコードを鵜呑みにせず、人間が注意深くレビューすることが不可欠です。特に、以下の点に留意しましょう。
- コードの完全な理解: AIが生成したコードの意図と動作を完全に理解してから使用する。
- 徹底的なテスト: 生成されたコードが、期待通りに動作するか、あらゆる条件下で十分にテストする。
- 積極的なリファクタリング: コピー&ペーストされたコードや、重複コードブロックを見つけたら、積極的にリファクタリングする。
- コードレビューの実施: 同僚にコードをレビューしてもらい、潜在的な問題点や改善点について意見をもらう。
リファクタリングの重要性を再認識:コードの再利用を促進するために
リファクタリングは、コードの品質を維持し、長期的な開発効率を高める上で不可欠な作業です。しかし、AIコードアシスタントの利用は、ともすればリファクタリングの機会を減らしてしまう可能性があります。
GitClearレポートに掲載されている下記の表は、1ヶ月以内に修正されたコードの割合の年次推移を示しています。2020年には修正されたコードの約30%が1ヶ月以上前のコードでしたが、2024年にはこの割合が約20%に減少しています。これは、開発者が新しいコードを書くことに重点を置き、既存のコードのリファクタリングを後回しにしている可能性を示唆しています。
修正されたコードの経過時間別割合
年 | 2週間未満 | 2-4週間 | 1ヶ月未満 | 1年未満 | 1-2年 | 2年以上 |
---|---|---|---|---|---|---|
2020 | 60.4% | 9.6% | 70.0% | 24.7% | 4.2% | 1.1% |
2021 | 61.1% | 9.3% | 70.4% | 24.2% | 4.7% | 0.7% |
2022 | 57.5% | 9.8% | 67.3% | 25.4% | 6.5% | 0.8% |
2023 | 60.6% | 10.6% | 71.2% | 21.9% | 6.2% | 0.8% |
2024 | 69.7% | 9.5% | 79.2% | 16.9% | 2.6% | 1.3% |
コードの再利用を促進し、リファクタリングを習慣化するためには、以下のような施策が考えられます。
- コードレビューの徹底: チーム内でコードレビューを義務化し、重複コードの発見とリファクタリングを積極的に促す。
- リファクタリング時間の確保: 開発スケジュールの中に、リファクタリングのための時間を意識的に組み込む。
- 静的解析ツールの導入: 静的解析ツールを活用し、重複コードや潜在的な問題を自動的に検出する。
- コーディングルールの整備:
.cursor/rules
や.clinerules
などのAI向けコーディングルールに、重複コードを避けるための具体的な内容を明記する。
まとめ:AIと共存し、より高品質なコードを生み出すために
AIコードアシスタントは、開発者の生産性を飛躍的に向上させる可能性を秘めた強力なツールです。しかし、GitClearの調査データが示すように、AIが生成するコードは、必ずしも高品質であるとは限りません。むしろ、無批判に利用することで、コードの重複を増やし、品質を低下させるリスクがあることを認識する必要があります。
AI時代においてもコードの品質を維持・向上させるためには、開発者一人ひとりが、AIアシスタントの生成するコードを注意深くレビューし、積極的にリファクタリングを行う意識を持つことが重要です。さらに、チーム全体で、コードレビューの徹底、静的解析ツールの導入、コーディングルールの整備など、コードの再利用を促進するための具体的な施策に継続的に取り組むことが求められます。
AIと賢く共存し、より高品質なコードを生み出すために、開発プロセス全体を見直すべき時が来ていると言えるでしょう。
開発生産性やチームビルディングにお困りですか? 弊社のサービス は、開発チームが抱える課題を解決し、生産性と幸福度を向上させるための様々なソリューションを提供しています。ぜひお気軽にご相談ください!
参考資料: