1. HOME
  2. ブログ
  3. 開発ノート
  4. レガシーシステムからモダンアーキテクチャへの移行ノート:成功と挫折のリアルケース
BLOG

ブログ

開発ノート

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

プロジェクト背景と狙い

旧来のオンプレ環境で稼働していた基幹システムを、クラウドネイティブなマイクロサービスへと全面移行した経験を共有します。本プロジェクトは、10年以上稼働してきたPHP+MySQLの大規模モノリスが対象。チームは、システム老朽化によるパフォーマンス低下、開発スピードの遅延、運用コスト増加という課題を抱えていました。特にレガシーコードの可読性が低く、開発会社選びでは「既存コードの解析力」と「クラウド移行実績」を重要視して発注を行いました。予算は約2,500万円、期間は6ヶ月を予定しましたが、フェーズごとの費用相場を見積もると、要件定義に500万円、インフラ構築に300万円、開発に1,200万円、テスト・QAに300万円、予備費200万円という配分となりました。

移行の主なゴールは以下の通りです。

  1. スケーラブルなマイクロサービス化

  2. DevOpsパイプラインの構築

  3. 古いUIのリプレイス

  4. 運用予算の削減

この章では、要件定義段階での失敗と学び、そして開発効率を高めるための工夫を紹介します。

要件定義フェーズで直面した落とし穴

発注先の開発会社と立ち上げた初回キックオフでは、「既存DBのテーブル数が400以上」という事実を把握できていなかったため、要件定義が二転三転しました。当初の要件定義見積りは人日50日、500万円程度でしたが、実際には解析だけで70人日、約700万円の追加費用を要しました。以下が主な原因です。

  • ドキュメント不備:ER図が古く、カラム定義が最新化されていなかった

  • コードコメント不足:仕様変更履歴がGitコミットコメントにしか残っておらず、読み解くのに時間を要した

  • ビジネスルールの曖昧さ:古いプロセスを引き継ぐべきか、新設フローに乗せるべきか判断基準が不明確

教訓として、要件定義開始前に「ドキュメント棚卸しタスク」を別途発注することが重要とわかりました。具体的には、以下のアクションを追加することで工数増を抑制しました。

  1. ドキュメント自動生成ツールの実装

  2. コードリーディング・ワークショップの開催

  3. ステークホルダーの早期巻き込み

これにより、追加発生した工数を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万円を予算内に収めつつ、リスク低減に成功しました。

開発フェーズでの効率化施策

設計が固まった後は、開発効率向上を狙い以下の工夫を取り入れました。

  1. Feature Toggleの導入

    • 各サービスに新旧機能を併存する仕組みを持たせ、段階的リリースが可能に。

  2. モノリスデータフェッチサービス

    • 移行中のみ既存モノリスDBとマイクロサービスをつなぐ中間層を開発。

  3. **ドメイン駆動設計(DDD)**の簡易適用

    • バounded Contextごとにリポジトリを分割し、コード保守性を向上。

  4. ペアプログラミング・コードレビュー文化

    • 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%程度を目指しました。実践した施策は以下の通りです。

  1. スポットインスタンス活用

    • バッチ処理系マイクロサービスはスポットを95%活用し、コストを30%削減

  2. Auto Scalingルールの見直し

    • 平日夜間のスケールダウンを強化し、稼働率が低い時間帯の無駄を排除

  3. リソースラベリングとタグ付け

    • 各サービスに「CostCenter」タグを付与し、部門別・機能別の費用を可視化

  4. 定期レポート自動化

    • CloudWatchとCost Explorer APIを組み合わせて、週次レポートをSlackへ配信

これらの施策により月間運用コストは移行前比45%削減を達成。特にスポットインスタンスは導入コストも低く、即効性のある施策として高評価でした。

チームコミュニケーションとナレッジ共有の強化

大規模移行プロジェクトでは、技術的な難易度だけでなく「人」の問題も無視できません。以下の取り組みでチーム力を底上げしました。

3. 定期クロスファンクショナルミーティング

  • Weekly Sync:開発/QA/運用が一堂に会し、進捗とリスクを共有

  • Postmortemセッション:インシデント発生後は必ず振り返り会を開催し、原因と対策をドキュメント化

  • DevOpsワークショップ:CI/CDパイプラインやIaCのハンズオンで全員が基本スキルを習得

これにより次の効果が得られました。

  • 問題検知から解決までのリードタイムが平均20%短縮

  • ナレッジの属人化を排除し、新メンバーのオンボーディング時間を半減

4. ナレッジベースとドキュメント文化

  • 社内Wikiを整備し、設計書・運用手順・トラブルシュート事例を集約

  • ドキュメントレビュールール:プルリクと同様にドキュメントにもレビューを必須化

  • ショートビデオ:手順やツール操作は5分以内の画面録画で共有

このドキュメント文化により、運用担当と開発担当の協力がスムーズになり、15名チームで年間約200時間のコミュニケーションコスト削減が実現しました。

納期遅延防止策とアジャイル導入の効果

最終的に大規模移行プロジェクトを納期通りに完了するため、以下のアジャイルプラクティスを取り入れました。

5. スプリントプランニングとレビュー

  1. 2週間スプリントで小さく成果を積み重ね

  2. Definition of Doneを厳格化し、品質と進捗のトレードオフを明確化

  3. レトロスペクティブで毎回改善アクションを3つ設定

この結果、途中で大きなスコープ変更やバッファ不足が発生しても、スプリント単位で軌道修正が可能となり、納期遅延ゼロでリリースを迎えました。

6. リスクリストとバッファ管理

  • リスクリストをガントチャートに紐づけ、影響度・発生確率を定量化

  • スコープ・バッファ:各フェーズに10%ずつバッファを組み込み、予備費用と人員を確保

  • 早期エスカレーションルール:リスク発生時は24時間以内に経営層へ報告し、迅速な意思決定を実現

これにより「要件凍結前の合意形成」が強化され、追加発生費用は合計予算の3%に抑えられました。

振り返り:成功要因と今後の展望

本プロジェクトの成功要因を改めて整理すると以下の4点に集約されます。

  1. フェーズごとの細かな予算管理

  2. 徹底した自動化とCI/CDパイプライン構築

  3. 文化としてのDevOps/SREの定着

  4. リスク&コミュニケーション強化による納期遵守

今後は、マイクロサービス間のイベント駆動化やサーバーレス化などを視野に入れ、さらに運用コストの最適化と開発スピードの向上に挑みます。

お問合せ

不明点やお見積りの依頼などお気軽にください。




問い合わせを行う

関連記事