2025-06-11
不変条件とそれをできるだけでかくとることについて語りたい。
不変条件はさまざまな対象に対して課される。例えばプログラム実行時の不変条件、永続化されるデータの不変条件、コードベースの不変条件などなどある。それらがロバストであり(条件を課す対象の変化に対して不変条件が変わりずらく)条件が強ければ強いほど良い不変条件だと考える。
不変条件の例として、型エラーにならないとか、メモリリークが起きないとか、データ競合が起きない、二重決済が起きない、外部モジュールのデータ構造は公開されているコンストラクタのみから構成する、外部サービスのデータにはAPIを通してのみアクセスする、などがある。アーキテクチャとか静的解析とかでは不変条件をプログラムとかサービスとかに課していて、開発ではそれを守りながら(時には条件を手入れしながら)変更を加える。
不変条件を手入れするのは一般的に難しいがそれに乗っかって済む変更は失敗したときにすぐわかるので嬉しいし、それに乗っかっている限り不変条件が守ってくれる範囲の誤りは起きないことが保証される。だからロバストで強い不変条件は良いものである。
開発に投下できるリソースが増えるほど不変条件をよく手入れすることがプロダクトを成長させるために効く。不変条件の手入れを細切れにやるのも大事だと思うが、不変条件の品質を高める技術が重宝されるとも思える。
書いてみると当たり前か。
生成AIによって変更の速度が上がったしコストをかけるのが簡単になった(採用しなくても金を払えば労働力がすぐに手に入るようになったという意味で)。この背景の変化によって不変条件を扱う戦略はどのように変えるのが最適だろうか。