法則一覧

第90条保守性

ストラングラーフィグ

稼働中のシステムは、一度に置き換えるより、周縁から少しずつ置き換えるほうがたいてい安全だ。

Martin Fowler

心得

移行は一歩ずつ出せる形にし、旧系の削除まで計画する

どうするか

レガシーシステムの前に振り分け点(プロキシ、ルーター、ファサード)を置き、挙動を一部分ずつその裏へ移す。最初は、それだけで価値を生む部分を選ぶ。「完了」の定義を最初に決め、古い経路に残っているトラフィックの割合を追う。古いコードと移行用の層を消す作業は、後片づけではなくプロジェクトの一部として見積もる。

なぜ起きるか

全面的な書き直しは、誰も書き残していない何年分もの挙動を再現しなければならない。その間も利用者は新しい機能を必要とし、それは古いシステムに足すしかないので、新システムが使えるようになる前に目標が動いていく。最後まで本番に何も出ないので、リスクも価値も切り替え日に一度に来る。しかもその日は来ないことが多い。機能を一つずつ新しいコードへ回せば、一歩ごとに検証も切り戻しもできる大きさに収まり、出したそばから元が取れ始める。その代わり、捨てる前提で作る振り分け層やアダプタなど、移行のためだけのアーキテクチャが要る。

当てはまらなくなるとき

一括切り替え:古いシステムにきれいな振り分け点を置けないときや、移行用の層が書き直しより高くつくときは、計画した一度の切り替えのほうが、段階的移行のありがちな末路を避けられる。簡単な経路だけが移り、いちばん絡み合った部分はいつまでも移らず、組織は二つのシステムを運用し、その費用を払い続ける。

出典

Martin Fowler『Strangler Fig Application』(martinfowler.com。原題「Strangler Application」、2004 年。2024 年に書き直し)。絞め殺しのイチジクのたとえと、段階的な刷新ではリスクの低さと早く得られる価値が移行用アーキテクチャのコストを上回るという主張の出典。

原典を読む

肖像:Ade Oshineye, CC BY 2.0 · Wikimedia Commons

引用するとき

Hammurabi『第90条 ストラングラーフィグ』 https://kanywst.github.io/hammurabi/ja/laws/strangler-fig/

BibTeX
@misc{hammurabi-strangler-fig,
  title  = {ストラングラーフィグ},
  author = {{Hammurabi contributors}},
  note   = {Hammurabi, § 90},
  url    = {https://kanywst.github.io/hammurabi/ja/laws/strangler-fig/}
}

本文は CC BY-SA 4.0 です。Hammurabi の名前と記事へのリンクを添えてください。

XBlueskyはてブLinkedIn

コラムで読む

関連する法則

GitHub で誤りを指摘する