よろずやIT
プログラミング

ストラングラーパターンとは?古いシステムを止めずに、少しずつ新しくする移行方法

執筆・監修:よろずやIT編集部|編集方針を見る

結論:まずここだけ読めばOK

詳しい手順・原因は、この下で解説しています。

プログラミングのイラスト

一言でいうと

ストラングラーパターンとは、古いシステムを動かしたまま、機能ごとに、新しいシステムへ少しずつ置き換えていく移行の方法です。

「古いシステムを、一度に全部作り直す」のではなく、新しいシステムを、古いシステムの周りで少しずつ育て、最終的に、古いシステムを不要にします。

たとえ話:営業しながらの店舗改装

人気の店を、全面的に改装するとします。店を閉めて、一気に工事すると、その間の売上が止まり、再開の日に、問題が出るかもしれません。

そこで、営業を続けながら、売り場を1区画ずつ、新しくしていく方法をとります。お客さんは、入口で案内され、改装済みの区画と、これからの区画を、行き来します。工事が進むうちに、古い売り場は、少しずつなくなっていきます。

ストラングラーパターンは、これと同じ考え方です。

仕組み:入口で、振り分ける

この方法の要は、**入口(窓口)**です。利用者や、他のシステムからのリクエストは、まず、この入口に届き、入口が、新旧のどちらに渡すかを決めます。

段階 状態
最初 すべてのリクエストを、古いシステムに渡す
移行の途中 一部の機能のリクエストを、新しいシステムに渡す。残りは古いシステム
最後 すべてのリクエストを、新しいシステムに渡す。古いシステムを停止する

入口の役割は、リバースプロキシや、API用の窓口で、担うことが多くあります(リバースプロキシとは)。利用者から見た窓口は、変わらないため、裏側で、置き換えが進んでいることに、気づかれません。

進め方の5ステップ

ステップ① 入口を置く

古いシステムの手前に、振り分ける入口を置きます。最初は、すべてを古いシステムに渡すだけで、動作は何も変わりません。ここで、入口を通しても、問題なく動くことを確認します。

ステップ② 切り出しやすい機能を選ぶ

最初に移す機能は、他の機能との結びつきが弱く、影響の小さいものを選びます。いきなり、中心的な機能や、複雑な処理から始めると、失敗した時の影響が大きくなります。

ステップ③ 新しいシステムで、作る

選んだ機能を、新しいシステムで作ります。古いシステムの動きを、正確に把握してから作らないと、細かな挙動の違いが、問題になります。

ステップ④ 振り分けを、切り替える

入口の設定で、その機能のリクエストを、新しいシステムに渡すようにします。いきなり全員ではなく、一部の利用者から段階的に切り替えると、安全です(カナリアリリースとは、ブルーグリーンデプロイとはの考え方が使えます)。問題があれば、入口の設定を戻すだけで、元に戻せます。

ステップ⑤ 古い部分を、削除する

安定して動くことを確認したら、古いシステムの該当部分を、削除します。これを、機能ごとに繰り返します。

良い点

つまずきやすい点

注意点 内容
二重運用のコスト 移行が終わるまで、新旧の両方を、運用し続ける必要がある
データの整合性 新旧のシステムが、同じデータを扱う場合、どちらが正とするかを、決める必要がある
入口が、弱点になる すべてが入口を通るため、入口が止まると、全体が止まる
終わらない移行 一部が古いまま残り、移行が完了しない
古い仕様の把握 古いシステムの動きを、誰も把握していないと、作り直せない

特に、移行が完了せず、古い部分が、いつまでも残ることは、よくあります。「どこまで終わったか」を、見える形で管理し、終了の目標を決めることが大切です。

向いている場面と、向かない場面

向いている 向かない
システムを止められない(影響が大きい) 小さく、短期間で作り直せる
古いシステムが大きく、全面的な作り直しが、現実的でない 新旧を並行して動かす余裕(費用・人手)がない
機能ごとに、切り分けられる 機能が密接に絡み合い、切り出せない
段階的に、成果を見せたい 古いシステムの動きを、まったく把握できない

実務で、大切にしたい考え方

「動いているから、触れない」システムの改修を依頼された時に、強く感じることがあります。担当者しか分からない処理、古いライブラリ、ドキュメントの不備、重複したコードが重なると、小さな改修にも、時間がかかるのです(技術的負債とは)。

こうしたシステムを、一度に作り直すのは、現実的ではありません。大切なのは、完全にゼロにすることよりも、借金の所在を把握しながら、少しずつ返していくことです。ストラングラーパターンは、その考え方を、移行の方法にしたものと言えます。

技術の選び方についても、同じです。「まず小さく始めて、必要になったら、段階的に移行する」というやり方が、うまくいくことが多いと感じています(フレームワークは「流行っているから」で選ばない)。「新しいから」ではなく、5年後も、自分たちで運用できるかで判断してください。

まとめ

システムの作り方の違いは、モノリシックとマイクロサービスの違いで解説しています。

PR

レガシーシステムの移行・刷新を学べる本を探す

Amazonで見る
SHAREXLINEはてブ

よくある質問

Q.ストラングラーパターンという名前の由来は、何ですか?

A.他の木に巻き付いて育ち、やがて元の木を覆い尽くしてしまう「絞め殺しの木」に由来するとされています。新しいシステムが、古いシステムの機能を少しずつ置き換え、最終的に、古いシステムを不要にする様子に、なぞらえた名前です。ソフトウェア設計の分野で広く知られる、マーティン・ファウラー氏が紹介した考え方です。

Q.マイクロサービスへの移行でしか、使えませんか?

A.いいえ。ストラングラーパターンは、モノリシックなシステムを、マイクロサービスに分ける場面で、よく語られますが、古い技術から新しい技術への置き換え、古いシステムの刷新など、段階的な移行全般に使える考え方です。

Q.古いシステムを、完全に作り直すのと、何が違いますか?

A.全面的な作り直しは、完成するまで、成果が見えず、切り替えの当日に問題が集中しやすい点がリスクです。ストラングラーパターンは、小さな単位で切り替えていくため、問題の範囲を限定でき、うまくいかなければ、その部分だけ元に戻せます。

関連記事

最新のIT関連書籍 トップ10

PR / 楽天市場の売れ筋ランキングを定期的に取得しています。価格は変動する場合があるため、購入前に各ストアでご確認ください。