💬

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の協働による効率的な改善を目指すことが、実際のプロダクト開発において最も価値のあるアプローチであることが実証されました。

Discussion