
プルタルコスが伝えるテセウスの船の話がある。アテネの人々は、テセウスが乗って帰ってきた船を何世紀にもわたって保存した。古い板が腐れば新しい板に取り替え、また取り替えた。
元の板が一枚も残らなくなったとき、哲学者たちは問うた。これはまだテセウスの船なのか?
ソフトウェアエンジニアリングにも、この逆説と同じ形のパターンがある。Strangler Figパターンと呼ばれている。
Strangler Figは宿主の木に巻きついて成長し、最終的にその木を置き換える熱帯の植物だ。レガシーを少しずつ置き換えていく戦略がそれに似ているとして、Martin Fowlerが2004年にこの名前を付けた。私はこのパターンを見るたびに、テセウスの船が先に思い浮かぶ。
私のいるスタートアップにも、この船が一艘ある。最初はDjangoのモノリスで、すべての機能がひとつのコードベースに収まっていた。
MSAへ移行するなかで機能をひとつずつ剥がし、Djangoはリクエストを各サービスへ転送するプロキシになった。板を一枚ずつ取り替えてきたわけだ。そして今、そのプロキシまでSpring WebFluxに置き換える作業が始まった。最後に残った一枚だ。
この置き換えが終われば、Djangoのコードは一行も残らない。同じ名前で、同じユーザーが同じリクエストを送っているのに、最初のコードは一行もない。そうなると、テセウスの船と同じ問いにたどり着く。これは同じサービスなのか?
私は同じ船だと思う。板が一枚ずつ木から鉄に変わっていっても、同じ海を渡って同じ港に同じ人たちを降ろしているなら、その船は最初に出た船と変わらない。
ソフトウェアにおいてアイデンティティはコードではなく契約にある。同じユーザーが同じリクエストを送り、同じレスポンスを受け取るかぎり同じサービスだ。コードはその契約を一時的に支える板だ。
板を替えることは、同じ契約をより速く、あるいはより遠い海まで届ける営みでもある。古い板ではそこまで行けない。
ただ、スタートアップでは変わるのは船だけではない。船を漕ぐ私たちも変わり続ける。担う役割が変わり、使う言語が変わり、働き方が変わる。
変わらないのは、同じユーザーに同じことを約束するという目的ひとつだ。その目的を守るために、私たちは板を替えるように自分たちを変えるほうを選ぶ。それが、私たちが板を替え続け、同じ問いを続ける理由だ。