ストラングラーフィグパターン すとらんぐらーふぃぐぱたーん
簡単に言うとこんな感じ!
古いシステムを一気に作り直すんじゃなくて、古い木に絡みつく植物みたいに少しずつ新しいシステムに置き換えていく方法だよ。動かしながら少しずつ入れ替えるから、リスクが低くて安心なんだ!
ストラングラーフィグパターンとは
ストラングラーフィグパターン(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(デジタルトランスフォーメーション)推進における基幹システム刷新の標準的アプローチの一つとして定着
関連パターン・手法との比較
ストラングラーフィグパターンと比較されることの多い手法・パターンを整理します。
| 手法 | 概要 | リスク | 期間 | 向いている場面 |
|---|---|---|---|---|
| ストラングラーフィグ | 段階的に置き換え | 低い | 長め | 大規模・本番稼働中 |
| ビッグバンリライト | 一括全面作り直し | 非常に高い | 短〜中 | 小規模・捨てられる場合 |
| ブランチバイアブストラクション | 抽象層を挟んで切り替え | 中程度 | 中 | 内部実装の入れ替え |
| フィーチャートグル | 機能フラグで新旧切り替え | 低〜中 | 短 | 機能単位の切り替え |
システム移行のフロー図(ストラングラーフィグパターン)
プロキシ(ファサード)の活用
実際の移行では、古いシステムと新しいシステムの前段にプロキシ(ルーティング層)を置くことが多いです。リクエストをどちらに流すかをプロキシが判断することで、利用者に切り替えを意識させることなく移行を進められます。
[クライアント]
↓
[プロキシ / APIゲートウェイ] ← ここでルーティング判断
├── /orders → [新システム(マイクロサービス)]
├── /users → [新システム(マイクロサービス)]
└── /legacy → [レガシーシステム(まだ残っている部分)]
関連用語
- マイクロサービス — アプリを小さな独立したサービスに分割するアーキテクチャスタイル
- モノリシックアーキテクチャ — 全機能を1つのアプリとして構築する従来型のスタイル
- APIゲートウェイ — 複数のAPIへのリクエストを一元的に受け付けるプロキシ
- フィーチャートグル — 機能フラグでシステムの新旧機能を動的に切り替える手法
- CI/CD — 継続的インテグレーション・デリバリーによる自動デプロイの仕組み
- リファクタリング — 動作を変えずにコード・設計を改善していくプロセス
- 技術的負債 — 短期的な解決策の積み重ねが将来の開発コストを増大させる概念
- DX(デジタルトランスフォーメーション) — デジタル技術を活用したビジネス変革の取り組み