Case Study

10 年もののレガシーシステムを通常見積もり半分でリプレイス

Rails 5 系で稼働してきた業務システムを Next.js + Hono にリプレイス。AI 駆動の段階移行で通常見積もりの半分の期間と工数を実現した、卸売・流通業界向けのプロダクト開発事例です。

業種
卸売・流通
クライアント
業種匿名 (流通・年商 100 億規模)
期間
4 ヶ月 (通常見積もり 8 ヶ月)
公開日
2026年3月2日
使用技術:Claude CodeCursorOpenAPI GeneratorGitHub Copilot

プロジェクト概要

10 年運用してきた Rails 5 + jQuery 製の業務システムを、フロントエンド (Next.js App Router) とドメイン API (Hono + Cloudflare Workers) に分割してリプレイスしました。通常見積もりでは 8 ヶ月相当の規模を、AI 駆動開発 で約 4 ヶ月に圧縮しています。

クライアントは年商 100 億規模の卸売・流通業者で、業務システムは社内 80 名のオペレーションを支える基幹システムでした。受注・在庫・出荷・請求の 4 ドメインが密結合になっており、機能追加 1 つに 2 週間以上かかるのが慢性化していました。

クライアントの課題

  • 機能追加のたびにテストが書ききれず、本番反映に 2 週間 かかる
  • フロントエンド技術が古く、エンジニア採用が困難
  • 棚卸し済みのドキュメントが存在せず、業務ルールが属人化
  • ハードウェア寿命の問題で、向こう 1 年でインフラ刷新が不可避
  • 業務停止できる時間が 1 回あたり最大 4 時間に限定される (24 時間運用のため)

「リプレイスしたいが、止められないし、設計を知っている人もいない」という典型的なレガシー刷新ジレンマです。

アプローチ

1. レガシー資産の「読み解き」を AI に任せる

Claude Code に Rails のリポジトリと既存テストを読み込ませ、

  • 各 Controller / Model のドメイン責務マップ
  • 「触ると怖いコード」のホットスポット一覧
  • 暗黙の業務ルール (バリデーション・例外条件)
  • 過去 3 年の障害履歴と対象 PR の対応関係

を週次でドキュメント化。最初の 2 週間でドキュメントが 100 ページ近く揃いました。「レガシー資産は読み解く対象であって、書き直す対象ではない」 という Stage の切り分けが、AI 駆動リファクタリングの初手として重要です。

2. 段階移行のロードマップ作成

機能を 14 のドメインに切り、依存関係から「移行順序」を Claude Code に提案させ、人間が業務優先度で再ソート。これにより並列で動かせる作業が可視化されました。

flowchart LR
  A[商品マスタ] --> B[在庫管理]
  A --> C[受注処理]
  B --> D[出荷管理]
  C --> D
  D --> E[請求]

このフローを見ながら、「商品マスタ」と「在庫管理」を最初に刷新 → 受注処理は 2 ヶ月後 → 出荷・請求は最後 という順序にロジックを通しました。並列着手できるドメイン数を AI に提案させると、人間だけで計画を立てるより 1.5〜2 倍の並列度を引き出せます。

3. テスト先行で AI 実装

新フロント / 新 API の実装は、すべて Playwright と Vitest のテストを先に書いて、Claude Code に実装を生成させるスタイル。OpenAPI Generator で型を両端共有することで、AI が型情報を頼りに堅実なコードを書ける環境を整備しました。

このパターンは別記事 AI 駆動 TDD で深掘りしていますが、リプレイス案件では特に効果が大きい運用です。なぜなら 既存システムの仕様 = テスト という対応関係が直感的で、AI に対する指示も「既存挙動を保ったままモダンスタックに書き直して」と明確に出せるからです。

4. データ移行のスクリプトも AI で

旧 DB → 新 DB の ETL は、業務ルールを文章で渡すと SQL + TypeScript の移行スクリプトが生成され、結果差分を自動テストで検証する流れに。エッジケース (NULL 許容のカラム、半角全角の混在、SJIS 由来の文字化け) もテストで担保しました。

ETL のリハーサルは合計 23 回 実施。本番カットオーバー時には、4 時間の業務停止枠内で完全移行が完了しています。

5. 段階リリースで業務影響を最小化

14 ドメインを 5 ウェーブに分け、ウェーブごとに 2〜3 ドメインを段階リリース。Feature Flag で旧画面 / 新画面を業務ユーザーが切り替えられる状態にし、

  • 1 週間: ベータユーザー 5 名で並行運用
  • 2 週間: チーム全体に開放、旧画面も並行で稼働
  • 3 週間目以降: 旧画面を削除

の流れで、一気停止カットオーバーを最小化しました。

工数・品質の実数値

指標通常見積もり実績差分
期間8 ヶ月4 ヶ月-50%
工数 (人月)94.5-50%
カットオーバー後の P1 障害想定 3〜51-75%
機能リリース所要日数 (中央値)14 日2 日-86%
開発者満足度 (10 段階)8.7
エンジニア採用応募数 (3 ヶ月)月 2 件月 9 件+350%

機能追加リードタイムが 14 日 → 2 日に短縮。社内では「数年前から続いた機能凍結期間」が事実上終わったと評価されています。さらに、Next.js + TypeScript のモダンスタックに刷新したことで、エンジニア採用の応募数が 4.5 倍に伸びました。

学びと再利用可能なナレッジ

1. レガシー刷新の最大の価値は「読み解き」を AI に任せること

ドキュメント化されていない既存システムも、AI が読み解き、人間が判断する協業が機能します。人間が「Spec を全部把握してから書き直す」モデルは、AI 駆動 リファクタリングでは捨てるべき です。AI に読み解かせ、業務担当者と FIXIT エンジニアが質問する形に切り替えると、棚卸しの所要工数が 1/3〜1/4 になります。

2. 完全リライトより疎結合な段階移行

リプレイスは完全リライトより 疎結合な段階移行 のほうが事故が少ないです。「全部書き直してから一気に切り替え」モデルは、業務影響と心理的負担が大きすぎます。今回のように 5 ウェーブに分けて段階リリースする戦術は、AI 駆動かどうかに関わらず推奨できます。

3. Feature Flag は業務ユーザーが操作する UI に組み込む

開発者向けの Feature Flag はよくありますが、業務ユーザー自身が UI から切り替えられる Flag にしておくと、現場主導で旧 / 新を切り替えてもらえます。これによりリリース後の混乱が目に見えて減りました。

ありがちな落とし穴

落とし穴 1. AI に Rails の挙動を「自然言語」で要約させて鵜呑みにする

Claude Code はコードを読み解く能力が高いですが、暗黙の業務ルールを 要約 しすぎると、エッジケースが落ちます。「コードと PR の両方を読ませて、要約 + 引用元の行番号を出させる」運用に切り替えると、要約の精度が劇的に上がります。

落とし穴 2. 14 ドメイン全部を一気に並列着手

並列度の最大化を狙うあまり、14 ドメインを 14 名で並列着手させると、レビュー待ちで進捗が止まります。ウェーブごとに 2〜3 ドメインに絞り、レビュアーを循環させる運用が安定します。

落とし穴 3. ETL リハーサル不足での本番事故

業務停止枠が 4 時間しかない案件で、ETL のリハーサルを 5 回程度で済ませようとすると、ほぼ確実に本番事故が起きます。今回のように 20 回以上のリハーサルが、4 時間カットオーバーの保険になります。

よくある質問

Q. レガシーシステム リプレイス案件、いくらかかりますか?

A. 規模感によりますが、本案件相当 (14 ドメイン、4.5 人月) で 1,800〜2,400 万円が目安です。コードベース行数、ドメイン数、データ移行の難易度で大きく変動します。お見積もりは お問い合わせ から要件メモを共有ください。

Q. なぜ Rails や Spring Boot のままモダン化しないんですか?

A. 「同じ言語の中で版上げ」をするケースもあります。ただし、Rails 5 → Rails 7 / Spring Boot 2 → 3 は、エコシステム互換性の問題で結局書き直し相当になるケースが多いため、フロントエンドだけでも Next.js + TypeScript に切り出すことで、採用とパフォーマンスの両方を一気に改善できます。

Q. AI が書いたコードでエンタープライズ品質を担保できますか?

A. 担保できます。ただし「テスト先行」「人間レビュー」「ドメインエキスパートの巻き込み」の 3 つを必ず併用します。今回も 80 名規模の業務システムが、カットオーバー後 P1 障害 1 件で運用に乗りました。

関連リソース

このようなプロジェクトをご検討ですか?

FIXIT は要件すり合わせから本番運用まで AI 駆動で伴走します。

AI 開発の無料相談 →