2026年8月20日 tamachi.go での発表資料です。
https://tamachi-go.connpass.com/event/400310/
「承認済み」のはずの申請が、なぜか差戻しできてしまう。
状態遷移のルールが各メソッドの if 文に分散していると、
こうした「ありえない遷移」がすり抜けます。
申請・承認という小さなドメインを題材に、値オブジェクトの
考え方で状態遷移をコードに落とし込む方法を10分で話します。
・type Status string が "banana" を受け入れてしまう理由
・コンストラクタでの自己検証で、不正な状態を作れなくする
・遷移ルールを map の表に1箇所集約し、状態遷移図とコードを一致させる
・状態変更の入口を非公開メソッド1箇所に絞り、迂回経路を塞ぐ
Go / DDD / 値オブジェクト / 状態遷移 / ドメインモデル