LESSON 30分

ストーリー

田中VPoE
段階的移行の中核となるのがストラングラーフィグパターンだ。Martin Fowlerが提唱したこのパターンは、レガシーシステムの周りに新しいシステムを成長させ、徐々に置き換えていく手法だ
あなた
Month 5のクラウド移行でも学びましたね。あの時はサービス単位での移行でしたが
田中VPoE
今回はそれを組織全体の技術基盤に適用する。CI/CDパイプライン、監視基盤、セキュリティ基盤、データパイプライン — すべてをストラングラーフィグで段階的に刷新する
あなた
一つのサービスではなく、組織全体の基盤をストラングラーフィグで置き換えるんですね。規模が全然違います
田中VPoE
だからこそ「基盤のストラングラーフィグ」には特有の設計が必要だ。ルーティング層、互換性レイヤー、段階的切り替え — 一つずつ見ていこう

ストラングラーフィグパターンの基本

パターンの本質

初期状態:
┌────────────────────────────┐
│      レガシー基盤           │
│  ┌──────┐ ┌──────┐        │
│  │機能A  │ │機能B  │ ...   │
│  └──────┘ └──────┘        │
└────────────────────────────┘

Phase 1: ファサード(前面)を設置
┌────────────────────────────┐
│      ルーティング層          │  ← 新規追加
├────────────────────────────┤
│      レガシー基盤           │  ← 既存
│  ┌──────┐ ┌──────┐        │
│  │機能A  │ │機能B  │ ...   │
│  └──────┘ └──────┘        │
└────────────────────────────┘

Phase 2: 新基盤で機能Aを実装
┌────────────────────────────┐
│      ルーティング層          │
├──────────┬─────────────────┤
│ 新基盤   │ レガシー基盤      │
│ ┌──────┐│ ┌──────┐        │
│ │機能A' ││ │機能B  │ ...   │
│ └──────┘│ └──────┘        │
└──────────┴─────────────────┘

Phase N: レガシーが消滅
┌────────────────────────────┐
│      ルーティング層          │
├────────────────────────────┤
│           新基盤             │
│  ┌──────┐ ┌──────┐        │
│  │機能A' │ │機能B' │ ...   │
│  └──────┘ └──────┘        │
└────────────────────────────┘

基盤レベルのストラングラーフィグ

CI/CD基盤のストラングラーフィグ

現状: Jenkins / GitHub Actions / Bitrise の混在

Phase 1: 抽象化レイヤーの導入
  ┌────────────────────────────────────┐
  │  CI/CD標準インターフェース           │
  │  (Reusable Workflow テンプレート)    │
  ├──────────┬──────────┬──────────────┤
  │ GitHub   │ Jenkins  │ Bitrise      │
  │ Actions  │ (既存)   │ (既存)       │
  └──────────┴──────────┴──────────────┘

Phase 2: チーム単位でGitHub Actionsに移行
  ┌────────────────────────────────────┐
  │  CI/CD標準インターフェース           │
  ├──────────────────────┬─────────────┤
  │ GitHub Actions       │ Jenkins     │
  │ (チームA,B,C移行済み) │ (チームD,E) │
  └──────────────────────┴─────────────┘

Phase 3: Jenkins/Bitrise廃止
  ┌────────────────────────────────────┐
  │  CI/CD標準インターフェース           │
  ├────────────────────────────────────┤
  │         GitHub Actions              │
  │         (全チーム統一)               │
  └────────────────────────────────────┘

監視基盤のストラングラーフィグ

現状: Datadog(一部)/ CloudWatch(一部)/ Zabbix(レガシー)

Phase 1: Datadogをプライマリに指定、全新規サービスはDatadog
Phase 2: CloudWatchメトリクスをDatadogに転送(互換レイヤー)
Phase 3: Zabbix監視対象をDatadogに順次移行
Phase 4: Zabbix/CloudWatch廃止、Datadog統一

データ基盤のストラングラーフィグ

現状: Salesforce / Elasticsearch / BigQuery に分散

Phase 1: データカタログでメタデータを統合管理(論理統合)
Phase 2: ETLパイプラインでBigQueryにデータを集約(物理統合開始)
Phase 3: リアルタイムストリーミング基盤を追加(Kafka導入)
Phase 4: 各サービスがKafka経由でデータ連携(データメッシュへ進化)

ストラングラーフィグの設計パターン

ルーティング層の設計

基盤ルーティング層切り替え方法
CI/CDReusable Workflow テンプレートテンプレートの参照先を変更
監視メトリクス転送エージェントエージェント設定の変更
セキュリティAPI Gateway / Service Meshルーティングルールの変更
データETL/ELTパイプラインパイプラインの入出力先変更
認証OIDC Proxy / IdP FederationIdPフェデレーション設定の変更

互換性レイヤーの設計

compatibility_layer:
  ci_cd:
    old_interface: "Jenkinsfile"
    new_interface: "GitHub Actions Workflow"
    bridge: "Jenkins→GitHub Actions変換スクリプト"
    validation: "旧Jenkinsfileと新Workflowの出力比較テスト"

  monitoring:
    old_interface: "Zabbixエージェント"
    new_interface: "Datadogエージェント"
    bridge: "Zabbix→Datadog メトリクスフォワーダー"
    validation: "アラート同等性テスト"

  data:
    old_interface: "直接DB接続"
    new_interface: "データカタログAPI"
    bridge: "ビューレイヤー(旧テーブル→新テーブルのマッピング)"
    validation: "クエリ結果の一致検証"

段階的切り替えの管理

カナリアリリースの基盤版

段階的トラフィック切り替え:

Week 1: 新基盤 5%  / 旧基盤 95%
  └── パイロットチーム1チームが新CI/CDを利用
  └── メトリクス比較: デプロイ成功率、ビルド時間

Week 2-3: 新基盤 20% / 旧基盤 80%
  └── 3チームが新CI/CDに移行
  └── フィードバック収集、テンプレート改善

Week 4-8: 新基盤 50% / 旧基盤 50%
  └── 主要チームが移行完了
  └── エッジケースの対応

Week 9-12: 新基盤 80% / 旧基盤 20%
  └── 残りチームの移行

Week 13+: 新基盤 100% / 旧基盤廃止
  └── 旧基盤のクリーンアップ

ロールバック戦略

シナリオロールバック方法所要時間
新パイプラインの障害ルーティング層で旧パイプラインに切り戻し数分
新監視基盤のデータ欠損旧監視ツールを再有効化(並行期間中)30分以内
新認証基盤の障害IdPフェデレーションのフォールバック15分以内
データ移行の不整合スナップショットからのリストア1-4時間

ストラングラーフィグのアンチパターン

アンチパターン症状対策
永遠の並行運用旧システムが廃止されず、コスト倍増廃止期限を事前に設定し、厳守する
互換性レイヤーの肥大化ブリッジが複雑化し、メンテナンスコスト増大互換性レイヤーは一時的。シンプルに保つ
部分移行の放置80%移行したまま残り20%が永遠に残るラストマイル移行の専任担当を置く
テスト不足旧→新の等価性が検証されていない自動化されたリグレッションテストを整備

「ストラングラーフィグの最大の敵は『あとでやる』だ。80%まで移行して安心し、残り20%が3年放置される — これが現実によくある。移行プロジェクトのKPIには必ず『完了率100%の期限』を入れろ」 — 田中VPoE


まとめ

ポイント内容
パターンの本質ルーティング層を設置し、レガシーを段階的に新基盤に置き換える
基盤への適用CI/CD、監視、データ、セキュリティの各基盤に適用可能
互換性レイヤー旧→新の橋渡しを一時的に設置し、移行を円滑にする
カナリア方式5% → 20% → 50% → 80% → 100% と段階的に切り替える
アンチパターン永遠の並行運用、互換性レイヤーの肥大化、部分移行の放置

チェックリスト

  • ストラングラーフィグパターンの基本構造を理解した
  • CI/CD、監視、データ基盤への適用方法を把握した
  • ルーティング層と互換性レイヤーの設計ができる
  • カナリア方式の段階的切り替えを計画できる
  • アンチパターンと対策を理解した

次のステップへ

次は「フェーズドロールアウト計画」を学びます。ストラングラーフィグを組織全体に展開するための、3年間のフェーズ分け計画を策定しましょう。


推定読了時間: 30分