AIで10,000行のレガシーコードをリファクタリング:1ヶ月分の仕事を2週間で完了したリアルな振り返り

はじめに
正直に言うと、そのプロジェクトを開いた瞬間、私は呆然としました。
10月初旬のある月曜日の朝、技術リーダーに会議室に呼ばれ、「緊急プロジェクト」を引き継ぐように言われました。緊急プロジェクトとは? 実は元同僚が残したスパゲッティコード——10,000行のコアビジネスロジック、Vue 2.xで書かれた注文管理システムでした。テストカバレッジは10%未満、状態管理は混乱を極めデータの流れが全く追えない、そして極めつけは、3年間誰も触ろうとしなかった代物です。
リーダーは私に2週間の期限を与えました。「リファクタリングしてリリースしてくれ」と。
「無理難題だろ」と思いました。従来の人力リファクタリングなら、ビジネスロジックを理解するだけで1週間、そこから慎重にコードを修正し、テストを書き、検証する…30〜40日でも終わるか怪しいレベルです。しかしビジネスサイドは待ってくれません。システムは既に重すぎてユーザーからのクレームが殺到していました。
その時、友人が勧めてくれた Claude Code をふと思い出しました。大規模なコードリファクタリングを処理できると聞いていました。正直、半信半疑でした。AI がコードをリファクタリングする? 大丈夫か? もし壊したらどうする?
しかし、他に選択肢はありませんでした。試してみることにしました。
2週間後、デプロイボタンを押し、監視パネルのすべての指標が緑色で正常なのを見た時、興奮せずにはいられませんでした。リファクタリング全工程はわずか14日で完了し、本番事故ゼロ、インターフェースの応答時間は20%最適化され、バグ率は40%も低下しました。
この記事では、この14日間をどう乗り越えたか、どんな落とし穴があったか、すぐに使える経験則について話します。もしあなたが似たような技術的負債を抱えているなら、あるいはAI補助リファクタリングに興味があるなら、きっと役に立つはずです。
プロジェクト背景:どれほど酷い状態だったか
まずはこのプロジェクトの惨状をお話ししましょう。
これは会社のコアとなる注文管理システムで、1日平均5000件の注文を処理し、注文作成、支払い、物流追跡、アフターサービス処理など十数個の業務フローに関わっています。コードは2022年初頭にVue 2.xで書かれたもので、当時の担当者は書き終わるとすぐに退職し、その後4人がメンテナンスを引き継ぎましたが、全員がつぎはぎで修正を行ったため、スタイルは完全にバラバラでした。
どれほど酷いか? 丸2日かけて診断した結果、見つかった問題は衝撃的でした:
- 10,000行のコアビジネスコード:1ファイル最大1800行、最も肥大化した
OrderService.jsには47個のメソッドが含まれていました。 - テストカバレッジ10%未満:簡単な単体テストがいくつかあるだけで、重要なビジネスロジックは全くカバーされていません。
- 状態管理の混乱:Vuex、LocalStorage、SessionStorage、グローバルイベントバスの4種類が混在し、データの流れが全く追えません。
- 重複コードの氾濫:全く同じ注文ステータス判定ロジックが23箇所もコピペされていました。
- パフォーマンス問題:注文一覧ページのロードに3〜4秒かかり、ユーザーからのクレームが絶えません。
一番頭が痛いのは、このシステムはボロボロでありながらもオンラインで稼働しており、毎日数千人のユーザーにサービスを提供していることです。大胆に修正して万が一問題が起きれば、業務が停止してしまいます。
従来のリファクタリングならどれくらいかかる?
ホワイトボードに従来の手順を書き出してみました:
- ビジネスロジックの理解(予想5-7日)
- テストケースの補充(予想7-10日)
- リファクタリングモジュールの分解(予想10-15日)
- 個別のリファクタリング検証(予想8-12日)
- 統合テスト+段階的リリース(予想5日)
計算すると、最短でも35日。落とし穴にはまって手戻りする時間は含まれていません。
しかし、私には14日しかありませんでした。
なぜ Claude Code を選んだのか
AIの使用を決める前、正直確信はありませんでした。
市場には多くのAIプログラミングツールがあります。GitHub Copilot はずっと使っていましたし、Cursor も評判が良いです。Claude Code は新顔です。なぜ最終的に Claude Code を選んだのか?
ちょっとした実験をしました
半日かけて、プロジェクトから最も複雑な関数を1つ選びました。注文ステータス更新ロジックで、200行以上あり、各種境界判定、非同期呼び出し、エラー処理が含まれています。そして、これら3つのツールにそれぞれリファクタリングさせてみました。
結果は興味深いものでした:
- GitHub Copilot:提案が断片的で、コード補完ツールの域を出ず、一行一行ガイドする必要がありました。大規模リファクタリングには力不足でした。
- Cursor:悪くありません。意図を理解し、リファクタリング提案も合理的でした。しかし複雑なビジネスロジックを処理する際、たまに「解釈違い」を起こし、文脈を繰り返し説明する必要がありました。
- Claude Code:これは衝撃でした。コードをリファクタリングしただけでなく、3つの潜在的なバグを能動的に指摘し、リファクタリング前にテストを書くよう提案し、さらに詳細なリファクタリング手順まで示してくれました。
決め手となったのは コンテキスト理解能力 です。Claude Code は 200K トークンのコンテキストウィンドウをサポートしています。これはどういうことか? プロジェクト全体のコアコードを一度に読み込ませることができ、単一ファイルだけでなくモジュール間の関連性まで理解できるということです。
"Claude Code の 200K トークンコンテキストウィンドウは約15万文字のコードを収容でき、中規模プロジェクト全体のコアビジネスロジックやモジュール間の関連性を理解するのに十分です。"
リファクタリング実戦:14日間の道のり
ここはノウハウの塊です。14日間の具体的な操作手順と踏んだ落とし穴をすべて書きます。
準備期間:セーフティネットの構築(Day 1-2)
リファクタリングで一番怖いのは、新たなバグを生むことです。だから最初のステップは急いでコードをいじることではなく、セーフティネットを張ることです。
タスク1:テストケースの補充
Claude Code への最初のタスクは「テストケースの生成」でした。
私:これは注文モジュールのコアコードです(3000行貼り付け)、
主要な業務フローを分析し、完全なテストケースを生成してください。
注文作成、支払い、返金、ステータス遷移などのシナリオを重点的にカバーしてください。正直、Claude のパフォーマンスは期待以上でした。単体テストを生成しただけでなく、業務シナリオごとに分類し、各テストに明確なコメントをつけてくれました。私が少し境界条件を修正しただけで、2日でテストカバレッジは10%から45%に上がりました。
従来の方法なら、これだけで少なくとも1週間はかかったでしょう。
タスク2:コード診断
テストという保険ができたら、次はコードの全面診断です。Claude Code に「健康診断」を頼みました:
私:このプロジェクトのコード品質問題を分析してください。
重点項目:コードの不吉な臭い(Code Smell)、重複ロジック、パフォーマンスのボトルネック、潜在的なバグ。
詳細な診断レポートをください。スキャン後、20ページのレポート(本当に印刷したら20ページありました)が出てきました:
- 87個のコードの不吉な臭い(関数が長すぎ、ネストが深すぎ、命名規則違反など)
- 23箇所の重複ロジック
- 14個の潜在的なパフォーマンス問題
- 5個のバグの可能性(うち2つは後に本物のバグだと判明しました)
このレポートがそのまま私のリファクタリングロードマップになりました。
リファクタリング実行:人とAIの協調(Day 3-10)
本格的にリファクタリングを始めると、Claude Code との協力のリズムがつかめてきました。
リズム1:一番痛いところから着手する
最初にメスを入れたのは、あの800行ある processOrder 関数です。この関数には注文作成の全ロジック(パラメータ検証、在庫チェック、割引計算、支払い呼び出し、通知送信…)が詰め込まれており、メンテナンスは悪夢でした。
Claude とはこうやり取りしました:
私:このprocessOrder関数は肥大化しすぎています。リファクタリングしてください。要件:
1. 単一責任の小さな関数に分割する
2. 各関数は50行を超えない
3. 共通ロジックをユーティリティクラスに抽出する
4. 既存機能との100%互換性を維持する
5. 新しい各関数に対応するテストケースを生成するClaude は超詳細なリファクタリング案を出し、800行を6つの独立した関数に分割してくれました:
validateOrderParams()- パラメータ検証checkInventory()- 在庫チェックcalculateDiscount()- 割引計算processPayment()- 支払い処理sendNotifications()- 通知送信createOrder()- メインフロー制御
各関数の責務が明確になり、テストも簡単になりました。この1つの関数のリファクタリング、従来なら3日かかるところを、Claude Code を使って半日で終えました。
品質保証:省略できない検証フェーズ(Day 11-13)
コード修正はゴールではありません。検証こそが重要です。この3日間はひたすらテストをしていました。
第1層:自動テスト
まず完全なテストスイートを実行します:
- 単体テスト:187ケース、全パス
- 統合テスト:34シナリオ、パス率100%
- E2Eテスト:コア業務フローを一通り実行
ここで、以前 Claude Code に生成させたテストケースが役に立ちました。
第2層:コードレビュー
Claude に自動レビューを一通り頼みました。変数名の不統一や、非同期呼び出しの例外処理漏れなど、2つの問題を実際に見つけてくれました。
リリースと監視:最も緊張する瞬間(Day 14)
10月25日、金曜日、午後3時。業務のオフピーク時間帯。
段階的リリース(カナリアリリース)戦略をとりました:
- 3:00 5%のトラフィックを流し、30分間監視画面を凝視
- 3:30 問題なし、10%に拡大
- 4:00 さらに30%に拡大
- 5:00 全量リリース
プロセス中はずっと監視ダッシュボードを見つめ、手は汗ばんでいました。チームメンバーも全員オンラインで待機し、いつでもロールバックできる準備をしていました。
監視パネルの全指標が緑色のままで、インターフェースの応答時間が平均450msから360msに下がったのを見た時、ようやく深呼吸ができました。
最終結果:
- 本番事故ゼロ
- インターフェース応答時間20%最適化
- バグ率40%低下
- SonarQubeコード品質スコアがCからAに向上
- テストカバレッジが10%から75%に
高効率 Prompt テンプレートライブラリ
これは実戦でまとめた4種類の Prompt テンプレートです。コピーして少し修正すればすぐ使えます。
テンプレート1:コード診断
私は[プロジェクトタイプ]プロジェクトを持っています。技術スタックは[技術スタック]。
これはコアビジネスコードです:[コード貼り付け]
全面的な診断をお願いします。重点分析項目:
1. コードの不吉な臭い(関数過長、深いネスト、命名不統一など)
2. 重複ロジックと抽出可能な共通コード
3. 潜在的なパフォーマンスのボトルネック
4. 可能性のあるバグとセキュリティリスク
詳細なレポートを優先度順に提出してください。テンプレート2:リファクタリング実行
以下のコードをリファクタリングしてください:[コード貼り付け]
リファクタリング要件:
1. 単一責任の小さな関数に分割し、各関数は[50]行を超えないこと
2. 重複ロジックをユーティリティクラスに抽出する
3. 命名を改善し、[チーム規約]に従うこと
4. 既存機能との100%互換性を維持すること
5. 新しい各関数に対応するテストケースを生成すること
重要な制約:
- ビジネスロジックは変更せず、コード構造のみ変更すること
- 新しい依存パッケージは導入しないこと(明示的な説明がない限り)
- 用途が不明なコードは削除せず、私に確認できるようマーキングすること
- 既存のコードスタイルに従うこと:[スタイル記述]
関連コンテキスト:
[関連する呼び出し元のコード、データ構造定義などを貼り付け]テンプレート3:テスト生成
これは私の[モジュール名]コアコードです:[コード貼り付け]
完全なテストケースを生成してください。要件:
1. [テストフレームワーク名、例:Jest/Vitest]を使用
2. 主要な業務シナリオをカバー:[重要なシナリオを列挙]
3. 境界条件テスト(空値、異常入力、極限値など)を含める
4. 異常シナリオテスト(ネットワークタイムアウト、インターフェースエラーなど)を含める
5. 各テストケースにはテスト目的を説明する明確なコメントをつけること
テストカバレッジ目標:>70%テンプレート4:コードレビュー
コードリファクタリングを完了しました。レビューをお願いします:
元コード:[貼り付け]
リファクタリング後コード:[貼り付け]
重点チェック項目:
1. 新たなバグや論理エラーが混入していないか
2. パフォーマンス問題はないか(冗長なループ、不要な計算など)
3. [チーム規約]に準拠しているか
4. セキュリティリスクはないか(SQLインジェクション、XSSなど)
5. 命名とコメントは明確で理解しやすいか
6. テストは十分カバーされているか
詳細なレビュー意見と改善提案をください。最後に
10月初旬にこのタスクを受けた時の不安を思い出し、今リファクタリング後のコードを見ると、まさに「九死に一生を得た」感覚です。
14日間、10,000行のコード、スパゲッティコードの引き継ぎから成功裡なリリースまで。このプロセスで、AI補助開発に対する認識が完全に変わりました。
AIは銀の弾丸ではありません。あなたの代わりに意思決定し、業務を理解し、リスクを負ってくれるわけではありません。しかし、経験豊富なシニアエンジニアが隣に座っているような、非常に強力なアシスタントにはなります。いつでもコードレビューし、テストを生成し、問題を指摘してくれます。
真の効率向上は、人とAIの協調から生まれます。あなたが業務理解と判断を提供し、AIが実行効率とベストプラクティスを提供する。この連携により、1人で3人分の仕事を、しかも高品質にこなすことができるのです。
もしあなたも同様の課題に直面しているなら、アドバイスします:
- 挑戦を恐れないで:AIツールは十分に成熟しています
- 小刻みに進む:小さなモジュールから始め、AIの作業方式に慣れましょう
- 警戒を怠らない:AIは強力ですが完璧ではありません。人工的なチェックは絶対に省略できません
- 準備を整える:テスト、監視、ロールバックメカニズムは一つも欠かせません
技術的負債は、先延ばしにしても解決しません。早く返せば早く楽になります。Claude Code のようなツールがあれば、借金返済もそれほど苦痛ではなく、むしろ達成感さえ得られるかもしれません。
FAQ
AI によるコードのリファクタリングは信頼できますか?バグは出ませんか?
本文の事例では:
• まずテストのセーフティネットを構築(カバレッジ 10% → 45%)
• 小刻みに進める戦略を採用
• 修正のたびに即座にテスト
• 最終的に本番事故ゼロを実現
AI に完全に依存するのではなく、人とAIの協調が鍵です。
なぜ GitHub Copilot ではなく Claude Code を選んだのですか?
• 200K トークンのコンテキストウィンドウ
• プロジェクト全体のモジュール関連性を理解できる
• 大規模リファクタリングにおいて、能動的にバグを識別し、ベストプラクティスを提案し、詳細な手順を提供できる
Copilot:
• コード補完により適している
• 複雑なリファクタリングシーンでは力不足
14日で10,000行のコードをリファクタリングする具体的なフローは?
Day 1-2 セーフティネット構築:
• テスト補充、問題診断
Day 3-10 リファクタリング実行:
• 最も痛い部分から着手、小刻みに進める
Day 11-13 品質保証:
• 自動テスト、コードレビュー、サンドボックス検証
Day 14 段階的リリース
文中の Prompt テンプレートはどう使えばいいですか?
• コード診断
• リファクタリング実行
• テスト生成
• コードレビュー
使用法:
• 各テンプレートのプレースホルダー(例:[プロジェクトタイプ]、[技術スタック])を自分のプロジェクト情報に置き換えるだけです。
まずはコード診断テンプレートから始め、プロジェクトの問題点を把握することをお勧めします。
リファクタリング中に新たなバグの混入を防ぐには?
1) テスト先行(リファクタリング前にテストを補充)
2) 小刻みに進める(一度に1モジュールのみ修正)
3) 頻繁な検証(修正後すぐにテスト実行)
4) 段階的リリース(5%のトラフィックから開始)
5) 人工レビュー(AI生成コードは必ず人がチェック)
5 min read · 公開日: 2025年11月25日 · 更新日: 2026年1月22日
関連記事
Veo 3音声生成完全ガイド:AI動画に自動でセリフとBGMをつける方法(プロンプトテンプレート付き)

Veo 3音声生成完全ガイド:AI動画に自動でセリフとBGMをつける方法(プロンプトテンプレート付き)
Veo 3キャラクター一貫性完全ガイド:Scenebuilderで繋がりのあるマルチショット動画を作る

Veo 3キャラクター一貫性完全ガイド:Scenebuilderで繋がりのあるマルチショット動画を作る
Veo 3 Image to Video実践:Reference Imageで動画効果を精密に制御する


コメント
GitHubアカウントでログインしてコメントできます