AIコーディングを活用したレガシーコード適応への道2
はじめに
数週間前から業務でコーディングエージェント系の生成AIを使い始めました。これまではChatGPTなどのチャット系のAIを使用していましたが、本格的な開発支援ツールの導入により、レガシーシステムの移行に取り組んでいます。
プロジェクト概要
現在の技術環境
- Java 8
- jQuery
- Glassfish
- VB.net 2010
抱えている課題
現状のシステムは以下の課題を抱えています:
- VB.net側で型定義が存在せず、全てがObjectマッピングで処理されている
- APIのエンドポイントすら共通化されておらず、各機能で個別実装となっている
- レガシーな技術スタックによる保守性の低下
移行の目標と戦略
現段階の目標:
- VB.netの型なしObjectマッピングから、型安全なAPIへの移行
最終目標:
- VB.netタブレットアプリケーションをReact Webアプリケーションへ移行
段階的アプローチを選択した理由:
当初は直接的な移行を試みましたが、Object型の問題によりAPIなどの移行がスムーズに進まなかったため、段階を踏むアプローチに変更しました。
使用したAIツール
- Claude Code
-
GitHub Copilot Agent
- VB.netのサポートを考慮し、Cursorではなくエディタとの親和性を優先
AIコーディング支援ツール活用の知見
AIツール活用で直面した課題
1. Kiro風開発手法の適用と限界
体系的な開発アプローチとして、Claude CodeだけでKiro風をやるを参考にKiro風の手法を適用しました。
良好だった結果:
- 要件定義や設計フェーズでは期待通りの成果
- ドキュメント作成の効率化
直面した限界:
- 実装段階での方向性のズレ:2200行規模の既存コードで想定外の方向にタスクが進行
- 複雑性による理解困難:深いネスト構造や未定義プロパティアクセスでAIの理解が限界
- 型推論の精度低下:テストコードが存在しない環境での確認手段の限定
2. レガシーコードの本質的な問題
一貫性の欠如が最大の障壁
- レガシーコードの最大の問題は「似通っていないこと」(きれいなコードは互いに似通っているが、クソコードはどこもその趣が異なっている)
- 同一プロジェクト内でもコード品質や実装方針が大きく異なる
- この多様性を完全に仕様書として表現することの困難さ
AIツールの技術的制約
- 型推論の限界:特にテストコードが存在しない環境では確認手段が限定的
- 検証手段の不足:実際の動作確認やデバッグ手段がない
- Object型の致命的影響:型安全性の欠如はAI支援開発において最大の障害
新規開発 vs レガシーコード改修のアプローチ差異
新規開発でのAI活用(成功パターン)
- Kiro風の体系的開発:requirements・design・tasksの詳細作成が成果に直結
- 一貫したコンテキスト:統一された設計思想による高い予測精度
レガシーコード改修での効果的アプローチ
既存システムの改修では根本的に異なる戦略が必要:
従来手法の問題点:
- 大規模な要件定義による方向性のズレリスク
- 対話形式での詳細要件定義の困難さ
- 複雑なコンテキストによる軌道修正の困難
効果が実証された戦略:
- マイクロタスクベースの段階的改修:小さな単位での確実な改善
- エンジニア主導の具体的プロンプト:明確で具体的な指示による精度向上
- 適切な手動介入:AIだけでは困難な部分の積極的な手修正
- 結果重視のアプローチ:完璧なAI活用よりも効率的な成果達成を優先
実践から得られた具体的成果
バグ修正での高い効果を確認
Claude Code活用の実績:
- 効果的なバグ報告方法:画像説明より文章による詳細説明が有効
- 必要最小限の情報提供:具体的で明確な問題記述がAIの理解を促進
- 単純なバグ修正:想像以上の効果を発揮
リファクタリング戦略の成功実証
API型マッピング改修の知見:
- 予想より順調な進展:当初懸念していたほど困難ではなかった
- 成功の決定要因:Object型戻り値を持つ関数の事前駆逐が鍵
戦略的アプローチの有効性:
- Object型の優先的排除:型安全性確保を最優先とする方針の実証
- 段階的な型安全性導入:開発効率向上への直接的貢献を確認
まとめ
レガシーコード改修におけるAIツール活用の教訓
数週間にわたるAIコーディング支援ツールの実践的活用を通じて、以下の重要な知見を得ました:
新規開発とレガシーコード改修の根本的違い
- 新規開発で効果的なKiro風の体系的アプローチは、レガシーコードでは限定的
- 一貫性の欠如と技術的債務の蓄積がAIの理解能力を超える場合がある
- 2200行規模のコードでの深いネスト構造や未定義プロパティが具体的な障壁
実証された成功戦略
- マイクロタスクベースの段階的改修:大規模計画よりも小さな単位での確実な改善
- Object型の優先的排除:型安全性確保がAI支援開発の成功の鍵
- 適切な手動介入:完璧なAI活用よりも結果重視のアプローチが効果的
実践的な成果
- バグ修正での高い効果を確認:文章による具体的な問題記述の重要性
- API型マッピング改修の成功:事前のObject型駆逐戦略が有効
今後の展望
レガシーコードのモダン化における現実的なアプローチとして、AIツールの限界を理解した上での戦略的活用が重要です。完璧な自動化を求めるのではなく、人間とAIの協働による効率的な改善を目指すことが、実際のプロダクト開発において最も価値のあるアプローチであることが実証されました。