アーキテクチャパターン

ストラングラーフィグパターン すとらんぐらーふぃぐぱたーん

レガシー移行リファクタリングマイクロサービス段階的移行モノリスクラウド移行
ストラングラーフィグパターンって何?

簡単に言うとこんな感じ!

古いシステムを一気に作り直すんじゃなくて、古い木に絡みつく植物みたいに少しずつ新しいシステムに置き換えていく方法だよ。動かしながら少しずつ入れ替えるから、リスクが低くて安心なんだ!


ストラングラーフィグパターンとは

ストラングラーフィグパターン(Strangler Fig Pattern) とは、既存の古いシステム(レガシーシステム)を一度に全部作り替えるのではなく、新しい機能・モジュールを少しずつ追加しながら、最終的に古いシステムを完全に置き換えるアーキテクチャパターンです。名前の由来は、熱帯雨林に生息する「ストラングラーフィグ(イチジクの一種)」という植物で、既存の木に絡みつきながら成長し、やがて古い木を包み込んで置き換えてしまう様子から来ています。

このパターンが特に有効なのは、長年稼働してきたレガシーシステムをモダンなアーキテクチャに移行する場面です。一括でシステムを作り替える「ビッグバンリライト」は、長期間の開発期間・高コスト・本番移行時のリスクが集中するという問題がありますが、ストラングラーフィグパターンを使えば、サービスを止めることなく段階的に移行できます。

マイクロサービスへの移行やクラウド移行でも広く活用されており、ビジネスを継続しながらシステムを刷新できる現実的な手法として注目されています。2004年にMartin Fowlerが命名・提唱したことで広く知られるようになりました。


パターンの構造と進め方

ストラングラーフィグパターンは大きく3つのフェーズで進みます。

フェーズ名前内容
1変換(Transform)既存機能と同等の新しいシステム・モジュールを構築する
2共存(Coexist)古いシステムと新しいシステムを並行稼働させ、徐々にトラフィックを移す
3排除(Eliminate)古いシステムの対応部分を停止・削除する

この3フェーズを機能単位で繰り返すことで、最終的にレガシーシステム全体を置き換えます。

「木に絡みつく植物」で覚える

ストラングラー→「ストップせず動かしながら移行」と覚えましょう。止めずに絡みついて、じわじわ置き換える。ビジネスを停止させないのが最大の特徴です。

実務での典型的な適用単位

移行は一度にシステム全体ではなく、以下のような単位で段階的に行います。

  • APIエンドポイント単位(例:注文APIだけ先に新システムへ)
  • 画面・機能単位(例:商品検索画面だけ新システムへ)
  • ドメイン単位(例:在庫管理ドメインを先にマイクロサービス化)

歴史と背景

  • 2004年 — Martin Fowlerがブログ記事「Strangler Fig Application」でパターンを命名・提唱。オーストラリアのジャングルでストラングラーフィグを見たことがヒントになったとされる
  • 2010年代前半 — クラウド移行・DevOps普及とともに、レガシーシステムのモダナイズが急務となりパターンが注目される
  • 2014年〜マイクロサービスアーキテクチャの台頭により、モノリスからマイクロサービスへの移行手法として広く採用される
  • 2017年以降 — AWS・Azure・Google Cloudの移行ガイドでもベストプラクティスとして公式に紹介されるようになる
  • 現在DX(デジタルトランスフォーメーション)推進における基幹システム刷新の標準的アプローチの一つとして定着

関連パターン・手法との比較

ストラングラーフィグパターンと比較されることの多い手法・パターンを整理します。

手法概要リスク期間向いている場面
ストラングラーフィグ段階的に置き換え低い長め大規模・本番稼働中
ビッグバンリライト一括全面作り直し非常に高い短〜中小規模・捨てられる場合
ブランチバイアブストラクション抽象層を挟んで切り替え中程度内部実装の入れ替え
フィーチャートグル機能フラグで新旧切り替え低〜中機能単位の切り替え

システム移行のフロー図(ストラングラーフィグパターン)

ストラングラーフィグパターン:移行フロー フェーズ1:変換 レガシーシステム (全機能稼働中) 新モジュールA (新規に構築) 新しい部分を 並行して開発 フェーズ2:共存 レガシーシステム (縮小中) 新モジュールA (稼働開始) 新モジュールB トラフィックを 新モジュールへ移す フェーズ3:排除 レガシーシステム (廃止) 新モジュールA (本番稼働) 新モジュールB+C レガシーを完全に 置き換え完了

プロキシ(ファサード)の活用

実際の移行では、古いシステムと新しいシステムの前段にプロキシ(ルーティング層)を置くことが多いです。リクエストをどちらに流すかをプロキシが判断することで、利用者に切り替えを意識させることなく移行を進められます。

[クライアント]

[プロキシ / APIゲートウェイ]  ← ここでルーティング判断
  ├── /orders  → [新システム(マイクロサービス)]
  ├── /users   → [新システム(マイクロサービス)]
  └── /legacy  → [レガシーシステム(まだ残っている部分)]

関連用語