LLM Code Repair(エルエルエムコードリペア)
LLMを活用してソフトウェアのバグを自動検出・修正する技術。エラーメッセージやスタックトレースからバグの原因を推論し、修正パッチを自動生成する。SWE-Benchが標準評価基準。
LLM Code Repairとは
LLM Code Repair(LLMコード修復)は、大規模言語モデルを用いてプログラムのバグを自動的に検出・診断・修正する技術である。従来の自動プログラム修復(APR: Automated Program Repair)がテンプレートベースや遺伝的アルゴリズムに依存していたのに対し、LLMはコードの意味的理解に基づいてより自然で正確な修正を生成する。
バグ修正のパイプライン
LLMベースのコード修復は以下のステップで動作する。
バグ報告/テスト失敗 → 障害箇所の特定 → 原因分析 → パッチ生成 → パッチ検証 → 適用
障害箇所の特定(Fault Localization)
エラーメッセージ・スタックトレース・テスト結果からバグの存在するファイル・関数・行を特定する。LLMはスタックトレースの解析と関連コードの理解を同時に行えるため、従来のスペクトラムベース手法(Ochiai/Tarantula)より広い文脈を考慮できる。
パッチ生成
特定されたバグ箇所に対し、LLMが修正コード(パッチ)を生成する。単一行の修正から複数ファイルにまたがるリファクタリングまで対応する。
| 修正タイプ | 例 | LLMの強み |
|---|---|---|
| 単一行修正 | off-by-one、null check追加 | 高精度(80%+) |
| 関数レベル修正 | アルゴリズム変更、API移行 | 中精度(50-70%) |
| 複数ファイル修正 | インターフェース変更、依存関係修正 | 長コンテキストモデルで改善中 |
SWE-Bench: 標準評価基準
SWE-Bench(Software Engineering Benchmark)は、実際のGitHub Issue/PRからバグ修正タスクを抽出したベンチマークである。
SWE-Bench Verified スコア推移
| モデル/ツール | スコア | 時期 |
|---|---|---|
| Claude 3.5 Sonnet (raw) | 49.0% | 2024 Q4 |
| Claude Sonnet 4 + scaffold | 70.3% | 2025 Q2 |
| OpenAI o3 + scaffold | 71.7% | 2025 Q2 |
| Devin (Cognition) | 55.0% | 2025 Q1 |
| SWE-Agent | 40.2% | 2024 Q3 |
| Aider + Claude | 45.3% | 2024 Q4 |
SWE-Bench Verifiedは500問の厳選セットで、人間の検証済みテストケースで正確性を保証している。
実用ツール
エージェント型
- Claude Code — リポジトリ全体を理解し、Issue記述からバグ修正パッチを自律生成
- Devin — 自律型AIソフトウェアエンジニア。環境構築からテスト実行まで完結
- SWE-Agent — Princeton大学開発のOSSエージェント。ACI(Agent-Computer Interface)でファイル操作
パッチ生成型
- Aider — CLIツール。git連携でバグ修正コミットを自動生成
- Cursor Composer — IDE内でマルチファイルの修正を対話的に生成
課題
- テスト依存性 — 修正の正しさをテストで検証するため、テストが不十分なプロジェクトでは誤修正のリスクが高い
- 回帰バグ — バグを修正する際に別のバグを導入するリスク。修正後の回帰テスト実行が必須
- 非機能要件 — パフォーマンス劣化・セキュリティ脆弱性の導入はテストだけでは検出困難
FAQ
Q: LLMによるバグ修正はどの程度信頼できますか?
A: SWE-Bench Verifiedで70%超のスコアが示す通り、単純〜中程度のバグは高い確率で修正可能。ただし全自動適用は推奨されず、人間のコードレビューを経るのが安全。
Q: どの言語のバグ修正が最も得意ですか?
A: Python・TypeScript・Javaで最も精度が高い。SWE-Benchの対象がPythonプロジェクト中心であるため、Python修正のデータが最も豊富である。
Q: セキュリティバグの自動修正は可能ですか?
A: SQLインジェクション・XSS・パストラバーサルなどの定型的な脆弱性パターンは修正可能。ただしビジネスロジックに起因するアクセス制御バグ等は文脈依存性が高く、自動修正の信頼性は低い。