生成AIはコードの品質を低下させるのか?技術的負債への影響を大規模調査
公開日
開発生産性
多くのソフトウェア開発の現場で、生成AIを活用したコード生成ツールの導入が進んでいます。開発速度が大幅に向上するという報告がある一方で、生成されたコードが長期的なシステムの維持管理にどのような影響を与えるかについては、これまで十分なデータに基づく検証が行われていませんでした。
本記事では、Jonas Niemeyer氏らが発表した学術論文「Genai’S Hidden Cost: An Empirical Study Of Ai‑Induced Technical Debt」に基づき、生成AIの普及がオープンソースプロジェクトの「技術的負債」に与えた影響についての調査結果を紹介します。
1,091件のPythonリポジトリを対象とした調査の概要
本調査は、2019年から2024年にかけて、500以上のスターを獲得している1,091件のPythonオープンソースリポジトリを対象に実施されました。
研究チームは、ChatGPT-3.5が公開された2022年11月30日を「生成AIが広く普及し始めた介入点」と定義し、それ以前(2019年〜2022年)とそれ以降(2023年〜2024年)のデータを比較する「中断タイムシリーズ(ITS)分析」を用いて、コード品質の推移を測定しました。
測定対象となる3つの技術的負債
本研究では、技術的負債を以下の3つのレベルに分類し、静的解析ツールを用いて自動測定を行っています。
| 負債の種類 | 定義 | 具体例 | 測定に用いた主な指標 |
|---|---|---|---|
| コード負債 | 単一のファイルや関数内に閉じている、局所的な実装上の問題。 | 非推奨の関数の使用、単純な命名規則の違反など。 | SonarQubeによる1,000行あたりの指摘数(Issues per 1000 LOC) |
| デザイン負債 | クラスやモジュールといった、コンポーネント内部における設計上の不備。 | 1つのクラスに過剰な役割を持たせる(低凝集)、複雑すぎる分岐構造など。 | SonarQubeによる循環的複雑度(Cyclomatic Complexity)、認知的複雑度(Cognitive Complexity) |
| アーキテクチャ負債 | 複数のコンポーネント間の相互作用における、システム全体の構造的欠陥。 | コンポーネント間の循環依存など。 | Code Quality Analyzer による1,000行あたりのアーキテクチャ上のアンチパターン検出数 |
図表1:技術的負債の分類
小・中規模プロジェクトにおける「コード負債」の増加傾向
分析の結果、プロジェクトの規模によって生成AI導入の影響が大きく異なることが明らかになりました。
開発規模が「小規模(非コメント行数が5,000行未満)」および「中規模(5,000行以上50,000行未満)」のプロジェクトでは、生成AIの普及以降、コード負債の蓄積速度が統計的に有意に加速しています。
特に中規模プロジェクトでは、それまで年間約16.5%の減少傾向(改善)を示していたコード指摘数が、介入後に年間約15.1%の増加傾向(悪化)へと急激に反転しました。
図表2:大規模プロジェクトにおけるコード指摘数の推移
これらのプロジェクトでは、厳格な品質管理基準や自動化された検証プロセスが不足していることが多く、AIが生成したコードが十分に検証されないまま取り込まれている可能性が指摘されています。
大規模プロジェクトにおける「アーキテクチャ」と「デザイン」の相反する動き
一方で、開発規模が「大規模(50,000行以上)」のプロジェクトでは、非常に異なる傾向が確認されました。大規模プロジェクトにおいては、局所的なコード負債の推移には有意な変化が見られませんでした。既存の自動テストやレビュー体制によって、基本的な品質が維持されていると考えられます。
しかし、より抽象度の高い設計レベルにおいては、以下のような相反する変化が発生しています。
1. アーキテクチャ負債の大幅な減少
大規模プロジェクトにおけるアーキテクチャ上の問題(依存関係の乱れなど)は、介入後に年間約30.7%の減少率へと改善が加速しました。これは、経験豊富な開発者が生成AIツールを利用して、大規模なリファクタリングや依存関係の整理を効率的に進めた結果である可能性が考えられます。
図表3:大規模プロジェクトにおけるアーキテクチャ指摘数の推移
2. デザイン負債(複雑さ)の増加
一方で、関数レベルの設計の複雑さを示す「循環的複雑度」および「認知的複雑度」は、介入後に統計的に有意に増加しました。特に、人間の理解しやすさを評価する認知的複雑度は、それまで年間約5.0%減少(改善)していたトレンドから、年間約6.5%増加(悪化)へと反転しています。
図表4:大規模プロジェクトにおける認知的複雑度の推移
この現象は、生成AIが「文法的には正しく動作するものの、人間にとっては過度に複雑で解読しにくい関数」を作り出しており、それがシニア開発者によるコードレビューをすり抜けてマージされている現状を示唆しています。
開発規模に応じた品質管理体制の構築
本研究の結果は、生成AIの導入において、プロジェクトの規模や体制に応じた異なる管理策が必要であることを示しています。
- 小・中規模プロジェクト: まずは基本的なコード規約のチェックや、静的解析ツール(Linterなど)を用いた自動検証プロセスを開発パイプラインに組み込み、基本的なコード負債の増大を防ぐことが必要です。
- 大規模プロジェクト: 既存のテストを通過し、一見すると正常に動作するコードであっても、関数の内部構造が過度に複雑化していないかを注視する必要があります。コードレビューの際には、動作の正確性だけでなく、「将来の保守担当者が理解しやすい記述になっているか」という認知的複雑度の観点を持った評価が求められます。
まとめ
生成AIツールは開発のスピードを向上させる一方で、管理体制が不十分な環境ではコード品質の低下を招き、整備された環境であっても部分的な設計の複雑化(負債の蓄積)を引き起こすという側面が確認されました。
開発プロジェクトにおいて生成AIの恩恵を長期的に享受するためには、単に導入を推進するだけでなく、規模に合わせた検証ルールの整備と、可読性を重視したレビュー基準の確立が不可欠です。
生成AIの導入や活用にお困りですか? 弊社のサービス は、開発チームが抱える課題を解決し、生産性と幸福度を向上させるための様々なソリューションを提供しています。ぜひお気軽にご相談ください!
参考資料: