AI生成コードの普及実態とセキュリティリスク:GitHub上位1,000リポジトリの大規模分析結果
公開日
生成AIによるコーディング支援が日常化する一方で、「実際にどれほどの規模で使われているのか」「生成されたコードは本当に安全なのか」という疑問は依然として現場に残されています。開発効率の向上というメリットの裏側で、AIが生成したコードが現代のソフトウェア・エコシステムにどのような影響を与えているのか、その実態を正確に把握することは、技術選定を行う上で急務です。
本記事では、北京大学とTencentの研究チームが2025年12月に発表した論文「AI Code in the Wild: Measuring Security Risks and Ecosystem Shifts of AI-Generated Code in Modern Software」に基づき、GitHubのトップ1,000リポジトリと7,000件以上の脆弱性修正データを分析した結果を解説します。
調査の概要:GitHubトップ1,000リポジトリと脆弱性データの徹底分析
本記事で解説する研究は、AI生成コードの実社会での普及度合いとセキュリティリスクを測定するために実施された、初の大規模な実証研究です。
調査チームは、GitHubのスター数(人気度)に基づいた上位1,000のリポジトリを対象に、2022年1月1日から2025年中頃までのコミットデータを収集しました。さらに、公開されている脆弱性情報(CVE)に基づき、7,000件以上の脆弱性に関連するコード変更も分析対象としています。
膨大なコードの中から「AIが書いたコード」と「人間が書いたコード」を正確に区別するために、研究チームは Cascade-Aggregation Framework (CAF) と呼ばれる独自の検出フレームワークを開発しました。これは複数の検出モデルを組み合わせたアンサンブル学習アプローチであり、高い精度でAI生成コードを識別することが可能です。
AI生成コードの普及実態:言語・用途による明確な使い分け
調査の結果、AI生成コードの採用は一様ではなく、プログラミング言語の特性やコードの役割によって大きな偏りがあることが明らかになりました。
言語別の採用率:構造化された言語での高い親和性
プログラミング言語ごとのAIコード採用率(AI File Rate:最終的なコードファイルに含まれるAI生成コードの割合)を見ると、言語の特性がAIの利用頻度に強く影響していることがわかります。
図表1:プログラミング言語ごとのAIコード採用率(AI File Rate)

TypeScript (45.43%) や C# (45.36%) といった、静的型付けが行われ構造化された言語で最も高い採用率を示しています。これは、明確な型定義や構造を持つ言語の方が、AIモデルが高品質で曖昧さの少ないコードを生成しやすいためと考えられます。
また、JavaScript や PHP などのWeb技術スタックやスクリプト言語においても、33%前後の高い採用率で安定しています。これらはWeb開発の現場で、定型的なコード生成やスクリプト作成にAIが深く浸透していることを示しています。
一方で、Java (25.42%) や C (27.33%) 、Rust といったシステムレベルの言語では、採用率は比較的低くなっています。高い安定性が求められるエンタープライズシステムや、メモリ管理などの複雑な低レイヤー処理においては、開発者がAIの導入に対してより慎重になっていることがうかがえます。
機能別の傾向:ドキュメントとビジネスロジックへの浸透
コードの機能(役割)ごとに見ると、AIは特定のタスクに集中して利用されています。
図表2:コードの機能カテゴリごとのAI採用率

- ドキュメント (Documentation): 38.64% 最も高い採用率を示したのはドキュメント作成です。定型的なテキスト生成はAIの得意分野であり、リスクも低いため、自動化が進んでいます。
- コアロジック (Core Logic): 34.45% 注目すべきは、主要なビジネスロジックの実装においても高い割合でAIが利用されている点です。これは、AI生成コードが補助的なタスクだけでなく、実際の機能実装にも十分耐えうると認識されていることを示唆しています。
- テストコード (Test Code): 22.31% テストコードにおけるAI採用率は、コアロジックよりも低くなっています。テストは厳密な境界条件や異常系をカバーする必要があり、その正しさを検証するために人間による介入が依然として重要視されているためです。
- 設定/データ (Config/Data): 9.65% 設定ファイルやデータスクリプトでの利用は極めて限定的です。これらは文脈への依存度が高く、わずかな記述ミスがシステム全体の不具合につながるため、手動での記述が好まれています。
プロジェクト規模とAI活用の関係
リポジトリのAI採用率(Adoption Rate)に基づいたグループ分けを行い、それぞれのプロジェクト規模を比較した分析からは、明確な傾向が見えてきます。
図表3:リポジトリの規模(ファイル数)とAI採用率の関係
AI採用率が高いグループ(Top N Group)ほど、プロジェクトの規模(ファイル総数)は小さいという強い相関が見られました。例えば、最も極端な上位10件(N=10)の比較では、AI採用率が低いグループの平均ファイル数が約15,000であるのに対し、高いグループは約2,600にとどまっています。
これは、AIは小〜中規模のプロジェクトや、文脈の負荷が低い特定のタスクにおいて深く浸透しやすいことを示しています。
一方で、大規模なリポジトリ(Bottom N Groupに多く含まれる)では、ファイル全体に対するAI採用率こそ低いものの、導入されているAIコードの絶対数は非常に多いことも明らかになりました。大規模プロジェクトでは、複雑な依存関係や厳格な仕様が障壁となり、全面的な採用(高い採用率)には至りにくいものの、補助ツールとしては確実に利用されています。
AIコードのセキュリティリスク評価:脆弱性の特徴と傾向
AIが生成したコードはセキュリティ上安全なのでしょうか。調査では、AIが脆弱性を「修正する側」として機能しているか、「導入する側」になっているかを分析しています。
AIは脆弱性を「増やす」のか「減らす」のか
まず、AIが脆弱性のライフサイクル(導入と修正)において、トータルでどのような影響を与えているか評価するために、本論文では 「AIネットインパクトスコア(AI Net Impact Score)」 という独自の指標を定義しています。
このスコアは、各言語の脆弱性データ全体に対し、「AIが脆弱性を導入した割合」から「AIが脆弱性を修正した割合」を差し引いて算出されます。
- スコアがプラス: AIは修正よりも「導入」に多く関与しており、セキュリティリスクを増大させている(ネガティブな影響)。
- スコアがマイナス: AIは導入よりも「修正」に多く貢献しており、セキュリティを向上させている(ポジティブな影響)。
図表4:脆弱性のライフサイクルにおけるAIの役割とネットインパクト
全体として、AIのネットインパクトスコアはプラスの傾向にあります。つまり、現状ではAIは脆弱性を新たに作り出すよりも、既存の脆弱性を修正するために多く使われています。
しかし、言語別に見ると警戒すべき傾向もあります。
- C# (+7.6%) や PHP (+4.9%) では、AIによる脆弱性導入の割合が相対的に高くなっています。これらはWeb開発などで定型的なコードを大量に生成する際に、AIがセキュリティ上の欠陥を含んでしまうケースがあることを示唆しています。
- Rust (+0.4%) や Scala (+1.1%) などの安全性を重視する言語では、AIの影響はほぼニュートラル(プラスマイナスゼロに近い)です。
- 全体として、AIによる脆弱性導入のリスクは無視できるものではなく、特にWebアプリケーション層での利用には注意が必要です。
AIが生成しやすい脆弱性のタイプと深刻度
AIが導入してしまう脆弱性には、明確な特徴(偏り)があります。
図表5:AIが導入した脆弱性のCWEタイプ別分布
AI生成コードにおいて特に顕著な脆弱性は以下の通りです。
- CWE-1236 (出力の不適切なエスケープ処理): 50.7%
- CWE-916 (脆弱なハッシュ等の使用): 43.1%
これらのデータは、AIが「複雑なビジネスロジックのミス」よりも、「入力データの検証」や「安全なAPIの選択」といったパターン認識や定石の適用におけるミスを犯しやすいことを示しています。AIは文脈を深く理解せず、学習データに含まれる安全でないパターンをそのまま再現してしまう可能性があります。
また、これらの脆弱性の深刻度についても分析されています。
図表6:AI導入脆弱性の攻撃ベクトルの特徴

AIが導入した脆弱性の86.8% は「ネットワーク」を攻撃ベクトルとしています(人間が導入した場合は80.8%)。これは、AI生成コードの欠陥が、リモートから攻撃可能なセキュリティホールになりやすいことを意味しており、外部に公開されるWebサービス等での利用には厳重なチェックが必要です。
AIコーディングの進化:導入から自律的な修正へ
最後に、2022年から2025年にかけてのAI活用のトレンド変化を見てみましょう。AIの役割は、単なる「支援」から「協調」、そして「自律」へと進化しています。
図表7(a):AIによるコード貢献度の時系列推移

図表7(b):AIによる脆弱性関与の時系列推移

- 第1フェーズ:導入期(2022年) GitHub Copilotなどの登場により、AIコードの貢献度が急激に上昇しました。しかし同時に、AIによる脆弱性の導入率もピークに達し、初期のリスクが露見しました。
- 第2フェーズ:協調期(2023年〜2024年) 開発者がAIのリスクを認識し、より慎重に利用するようになった時期です。脆弱性の導入率と修正率が拮抗し、人間とAIが協力してコード品質を維持するバランスが模索されました。
- 第3フェーズ:自律期(2025年以降) 2025年に入ると、AIエージェントの自律化が進み、コーディングの量と速度が劇的に増加したことで、新たな現象が起きています。図表が示すように、AIによる脆弱性の作り込み率が再び上昇傾向に転じています。これは自律化したAIが、軽微なミスを含め大量のコードを生成しているためです。しかし同時に、AIによる修正率がそれ以上の勢いで急伸し、作り込み率を大きく上回っています。AIはバグを生むこともありますが、それを自ら解決する「強力なセキュリティツール」へと進化しています。
結論:AIを開発プロセスに統合するための視点
本調査の結果は、AI生成コードがもはや実験的な存在ではなく、現代のソフトウェア開発において不可欠な構成要素となっていることを証明しています。特にTypeScriptやC#などの構造化された言語、ドキュメント作成やコアロジックの実装において、その恩恵は明らかです。
一方で、セキュリティリスクも明確になりました。AIは、エスケープ処理や暗号化APIの選択といった「定石」部分でミスを犯す傾向があり、それがリモート攻撃可能な脆弱性につながるリスクがあります。
今後の開発プロセスにおいては、以下の点が重要になります。
- 人間によるレビューの重点化: AIが得意な定型作業は任せつつ、セキュリティクリティカルな入力検証や設定周りは人間が厳格にレビューする。
- 静的解析ツールの活用: AIが犯しやすいパターン(エスケープ漏れなど)を検出するための自動化ツールをパイプラインに組み込む。
- AIの「修正能力」の活用: コード生成だけでなく、脆弱性修正のタスクにもAIを積極的に活用し、セキュリティの自動化レベルを引き上げる。
AIは強力なパートナーですが、その出力を無条件に信頼するのではなく、特性を理解した上で適切なガードレールを設けることが、安全で効率的な開発への近道です。
Webサービスや社内のセキュリティにお困りですか? 弊社のサービス は、開発チームが抱える課題を解決し、生産性と幸福度を向上させるための様々なソリューションを提供しています。ぜひお気軽にご相談ください!
参考資料: