strangler fig パターンとは? システムを段階的に置き換える
strangler fig パターンは、1つの機能ずつ新しいコードにルーティングし、古いシステムを引退できるようになるまで、レガシーシステムを段階的に置き換えます。
木の周りに絡みつき、やがて木がなくなるまで育つつる植物にちなんで名付けられた strangler fig パターンは、リスクの高い一斉の書き直しをせずにレガシーシステムを置き換える方法です。前面にルーティング層を置き、1つの機能ずつ新しいコードへ剥がし取り、何も依存しなくなるまで古いシステムを縮小させます。CI/CD が、その一つ一つの小さなステップを安全にします。
段階的な置き換え
facade または router が古いシステムの前面に置かれます。1つの機能を新しいコードで再実装し、そのトラフィックをそこへルーティングし、残りはレガシーシステムに残します。多くの反復を経て、新しいシステムが育ち、古いものはゼロまで縮小します。
なぜ書き直しに勝るのか
- 高リスクの一斉 cutover がない。
- 各部分が移行するにつれて価値が継続的に出荷される。
- 各ステップが小さく、可逆で、独立してテスト可能。
- 最後の部分が置き換わるまで、古いシステムは動き続ける。
ルーティングの facade
facade は、リクエストごとに古いものと新しいもののどちらから提供するかを決めます。これは移行の制御点です。route を切り替えて機能を新しいコードへ送り、何か問題があれば切り戻します。多くの場合、feature flag によって駆動されます。
なぜ CI/CD に頼るのか
移行された各スライスは、まだ稼働中のレガシー部分を壊してはならないデプロイです。強力なパイプライン、facade に対する contract テスト、そして route を即座に切り戻せる能力が、多くの小さなステップを自信を持って踏めるようにします。
parity テスト
重要な手法は、古いものと新しいものを並行して動かし、トラフィックを切り替える前に、新しいコードが古い振る舞いと一致することを出力の比較で確認することです。CI がこの比較を自動化するため、振る舞いの不一致がユーザーの目に触れる前に捕捉されます。
頻繁な小さなデプロイ
このパターンは、1つの巨大なデプロイではなく、多くの小さく頻繁なデプロイを生みます。ウォームな runner 上の高速なパイプライン(Latchkey など)は、その着実な移行の頻度が遅いビルドで止まらないようにします。
重要なポイント
- strangler fig パターンは、レガシーシステムを1つの機能ずつ置き換える。
- ルーティングの facade が、どのリクエストを古いコードと新しいコードのどちらへ送るかを制御する。
- 強力な CI/CD に依存する。すなわち parity テスト、contract テスト、即時の route rollback。