Namsang Labs
Essay · #architecture #strangler-fig #msa #legacy-migration #refactoring

テセウスの船

· Sangkyoon Nam

二つの時代の板が一つの船体に共存する船

プルタルコスが伝えるテセウスの船の話がある。アテネの人々は、テセウスが乗って帰ってきた船を何世紀にもわたって保存した。古い板が腐れば新しい板に取り替え、また取り替えた。

元の板が一枚も残らなくなったとき、哲学者たちは問うた。これはまだテセウスの船なのか?

ソフトウェアエンジニアリングにも、この逆説と同じ形のパターンがある。Strangler Figパターンと呼ばれている。

Strangler Figは宿主の木に巻きついて成長し、最終的にその木を置き換える熱帯の植物だ。レガシーを少しずつ置き換えていく戦略がそれに似ているとして、Martin Fowlerが2004年にこの名前を付けた。私はこのパターンを見るたびに、テセウスの船が先に思い浮かぶ。

私のいるスタートアップにも、この船が一艘ある。最初はDjangoのモノリスで、すべての機能がひとつのコードベースに収まっていた。

MSAへ移行するなかで機能をひとつずつ剥がし、Djangoはリクエストを各サービスへ転送するプロキシになった。板を一枚ずつ取り替えてきたわけだ。そして今、そのプロキシまでSpring WebFluxに置き換える作業が始まった。最後に残った一枚だ。

この置き換えが終われば、Djangoのコードは一行も残らない。同じ名前で、同じユーザーが同じリクエストを送っているのに、最初のコードは一行もない。そうなると、テセウスの船と同じ問いにたどり着く。これは同じサービスなのか?

私は同じ船だと思う。板が一枚ずつ木から鉄に変わっていっても、同じ海を渡って同じ港に同じ人たちを降ろしているなら、その船は最初に出た船と変わらない。

ソフトウェアにおいてアイデンティティはコードではなく契約にある。同じユーザーが同じリクエストを送り、同じレスポンスを受け取るかぎり同じサービスだ。コードはその契約を一時的に支える板だ。

板を替えることは、同じ契約をより速く、あるいはより遠い海まで届ける営みでもある。古い板ではそこまで行けない。

ただ、スタートアップでは変わるのは船だけではない。船を漕ぐ私たちも変わり続ける。担う役割が変わり、使う言語が変わり、働き方が変わる。

変わらないのは、同じユーザーに同じことを約束するという目的ひとつだ。その目的を守るために、私たちは板を替えるように自分たちを変えるほうを選ぶ。それが、私たちが板を替え続け、同じ問いを続ける理由だ。

Share this post