レガシーシステムからモダンアーキテクチャへの移行ノート:成功と挫折のリアルケース

プロジェクト背景と狙い
旧来のオンプレ環境で稼働していた基幹システムを、クラウドネイティブなマイクロサービスへと全面移行した経験を共有します。本プロジェクトは、10年以上稼働してきたPHP+MySQLの大規模モノリスが対象。チームは、システム老朽化によるパフォーマンス低下、開発スピードの遅延、運用コスト増加という課題を抱えていました。特にレガシーコードの可読性が低く、開発会社選びでは「既存コードの解析力」と「クラウド移行実績」を重要視して発注を行いました。予算は約2,500万円、期間は6ヶ月を予定しましたが、フェーズごとの費用相場を見積もると、要件定義に500万円、インフラ構築に300万円、開発に1,200万円、テスト・QAに300万円、予備費200万円という配分となりました。
移行の主なゴールは以下の通りです。
-
スケーラブルなマイクロサービス化
-
DevOpsパイプラインの構築
-
古いUIのリプレイス
-
運用予算の削減
この章では、要件定義段階での失敗と学び、そして開発効率を高めるための工夫を紹介します。
要件定義フェーズで直面した落とし穴
発注先の開発会社と立ち上げた初回キックオフでは、「既存DBのテーブル数が400以上」という事実を把握できていなかったため、要件定義が二転三転しました。当初の要件定義見積りは人日50日、500万円程度でしたが、実際には解析だけで70人日、約700万円の追加費用を要しました。以下が主な原因です。
-
ドキュメント不備:ER図が古く、カラム定義が最新化されていなかった
-
コードコメント不足:仕様変更履歴がGitコミットコメントにしか残っておらず、読み解くのに時間を要した
-
ビジネスルールの曖昧さ:古いプロセスを引き継ぐべきか、新設フローに乗せるべきか判断基準が不明確
教訓として、要件定義開始前に「ドキュメント棚卸しタスク」を別途発注することが重要とわかりました。具体的には、以下のアクションを追加することで工数増を抑制しました。
-
ドキュメント自動生成ツールの実装
-
コードリーディング・ワークショップの開催
-
ステークホルダーの早期巻き込み
これにより、追加発生した工数を30%削減でき、予算計画の見直しもスムーズに進みました。
アーキテクチャ設計と技術選定のポイント
要件定義が落ち着いた後、マイクロサービス化の設計に取りかかりました。技術スタックはGo言語+gRPC、フロントエンドはVue.js+TypeScript、インフラはKubernetes on AWSに決定。選定理由は以下の通りです。
-
Go+gRPC:高い並列処理性能と軽量バイナリによる起動速度
-
Vue.js+TypeScript:既存エンジニアとの親和性と学習コストの低さ
-
Kubernetes on AWS:オートスケーリングと運用コスト最適化が可能
設計段階では「テスト×ドキュメント×自動化」を合言葉に、以下をルール化しました。
-
マイクロサービスごとにSwagger/OpenAPIでAPI定義
-
CIパイプラインでビルド・単体テスト・静的解析を自動実行
-
Terraformでインフラをコード管理
このフェーズでは、設計検証環境に60万円、技術PoCに80万円、パフォーマンステストに120万円を配当。合計260万円を予算内に収めつつ、リスク低減に成功しました。
開発フェーズでの効率化施策
設計が固まった後は、開発効率向上を狙い以下の工夫を取り入れました。
-
Feature Toggleの導入
-
各サービスに新旧機能を併存する仕組みを持たせ、段階的リリースが可能に。
-
-
モノリスデータフェッチサービス
-
移行中のみ既存モノリスDBとマイクロサービスをつなぐ中間層を開発。
-
-
**ドメイン駆動設計(DDD)**の簡易適用
-
バounded Contextごとにリポジトリを分割し、コード保守性を向上。
-
-
ペアプログラミング・コードレビュー文化
-
GitHub上で1プルリクエストあたり最低2名レビュー必須とし、品質を担保。
-
これらにより、開発スピードは従来比で約1.3倍、テスト工程のバグ検出率は20%向上しました。費用面では、追加ツール導入に50万円、社内トレーニングに30万円を投じましたが、トータルの費用増はプロジェクト全体の2%にとどめられました。
テスト&デプロイの自動化
開発完了後のリリースフェーズでは、以下の自動化を徹底しました。
-
E2Eテスト:Cypressでユーザーフローを自動化し、30ケースをカバー
-
Blue-Green Deployment:ダウンタイムゼロのリリースを実現
-
SLO/SLA設計:サービスレベル指標を定義し、ダッシュボードで可視化
テストおよびデプロイ自動化にかかった費用相場は約150万円。手作業リリース時に発生しがちなミスや遅延を排除し、リリース後30日間の稼働率は99.95%を達成しました。
運用フェーズ:モニタリングとコスト最適化の実践
マイクロサービス化した後は、運用フェーズでの「安定性確保」と「コストコントロール」が鍵を握ります。ここでは具体的に取り組んだ施策と学びを深掘りします。
1. モニタリング基盤の構築とアラート設計
Kubernetes環境でのモニタリングにはPrometheus+Grafanaを採用。以下のポイントを押さえて設計を進めました。
-
メトリクス設計:リクエストレイテンシ、エラーレート、CPU/メモリ使用率など、サービスごとに3~5種の主要指標を定義
-
アラート閾値のチューニング:開発環境と本番環境で閾値を分けることで、誤検知を防止
-
ダッシュボード運用:サービスごとに専用ダッシュボードを用意し、SLA違反時に即座にボトムアップレポートを作成
運用開始から30日間、重大インシデントは1件のみ。原因はキャッシュ容量オーバーによるタイムアウトで、閾値調整により再発を防止できました。
-
学び
-
アラートは多すぎても運用疲弊を招く
-
定期的な振り返りで閾値を見直す
-
開発→運用の「SRE文化」をチームに根付かせる
-
2. コスト管理:リソース最適化と費用可視化
AWS請求額は、クラウド移行前の50%程度を目指しました。実践した施策は以下の通りです。
-
スポットインスタンス活用
-
バッチ処理系マイクロサービスはスポットを95%活用し、コストを30%削減
-
-
Auto Scalingルールの見直し
-
平日夜間のスケールダウンを強化し、稼働率が低い時間帯の無駄を排除
-
-
リソースラベリングとタグ付け
-
各サービスに「CostCenter」タグを付与し、部門別・機能別の費用を可視化
-
-
定期レポート自動化
-
CloudWatchとCost Explorer APIを組み合わせて、週次レポートをSlackへ配信
-
これらの施策により月間運用コストは移行前比45%削減を達成。特にスポットインスタンスは導入コストも低く、即効性のある施策として高評価でした。
チームコミュニケーションとナレッジ共有の強化
大規模移行プロジェクトでは、技術的な難易度だけでなく「人」の問題も無視できません。以下の取り組みでチーム力を底上げしました。
3. 定期クロスファンクショナルミーティング
-
Weekly Sync:開発/QA/運用が一堂に会し、進捗とリスクを共有
-
Postmortemセッション:インシデント発生後は必ず振り返り会を開催し、原因と対策をドキュメント化
-
DevOpsワークショップ:CI/CDパイプラインやIaCのハンズオンで全員が基本スキルを習得
これにより次の効果が得られました。
-
問題検知から解決までのリードタイムが平均20%短縮
-
ナレッジの属人化を排除し、新メンバーのオンボーディング時間を半減
4. ナレッジベースとドキュメント文化
-
社内Wikiを整備し、設計書・運用手順・トラブルシュート事例を集約
-
ドキュメントレビュールール:プルリクと同様にドキュメントにもレビューを必須化
-
ショートビデオ:手順やツール操作は5分以内の画面録画で共有
このドキュメント文化により、運用担当と開発担当の協力がスムーズになり、15名チームで年間約200時間のコミュニケーションコスト削減が実現しました。
納期遅延防止策とアジャイル導入の効果
最終的に大規模移行プロジェクトを納期通りに完了するため、以下のアジャイルプラクティスを取り入れました。
5. スプリントプランニングとレビュー
-
2週間スプリントで小さく成果を積み重ね
-
Definition of Doneを厳格化し、品質と進捗のトレードオフを明確化
-
レトロスペクティブで毎回改善アクションを3つ設定
この結果、途中で大きなスコープ変更やバッファ不足が発生しても、スプリント単位で軌道修正が可能となり、納期遅延ゼロでリリースを迎えました。
6. リスクリストとバッファ管理
-
リスクリストをガントチャートに紐づけ、影響度・発生確率を定量化
-
スコープ・バッファ:各フェーズに10%ずつバッファを組み込み、予備費用と人員を確保
-
早期エスカレーションルール:リスク発生時は24時間以内に経営層へ報告し、迅速な意思決定を実現
これにより「要件凍結前の合意形成」が強化され、追加発生費用は合計予算の3%に抑えられました。
振り返り:成功要因と今後の展望
本プロジェクトの成功要因を改めて整理すると以下の4点に集約されます。
-
フェーズごとの細かな予算管理
-
徹底した自動化とCI/CDパイプライン構築
-
文化としてのDevOps/SREの定着
-
リスク&コミュニケーション強化による納期遵守
今後は、マイクロサービス間のイベント駆動化やサーバーレス化などを視野に入れ、さらに運用コストの最適化と開発スピードの向上に挑みます。