技術ノートに「Parse, Don’t Validate - 不正な状態を後段へ持ち込まない」を追加した。私が書いた内容(殆ど LLM が書いた内容)を読むよりも、関数型ドメインモデリングを一読することをオススメする。本書の内容を忠実に再現している企業は、恐らく少ないだろう。状態ごとに型を変えたり、Read/Write などの用途にあわせて型を変える利点が理解できても、チームで型を清潔に維持するのが大変だからだ。

私は Go が好きだが、Goは Parse, Don’t Validate を実践するのに苦労する言語だ。Rust は、実践しやすい。よくある取り組みとして、Go や TypeScript に対して Linter や何らかの制約を駆使して、関数型言語の機能もどきを導入することがある。この発想に至る気持ちは理解できるのだが、言語レベルで一貫性を保証できないから採用しづらい。チーム開発であれば、言語標準の機能を前提として、Go や TS で開発するのが自然だ。理由は簡単で、言語の基本的な使い方を捻じ曲げるほどの熱意をチーム全体に伝搬させるのは、至難の業だからだ。冷めた目で見てくる人が出てくるよ多分。

なお、私は「Go + 関数型言語」の発想を SNOW 言語(自作言語)で形にした。未熟だったのでコンパイラが限定的にしか動作しない。標準ライブラリを作る段階で心が折れた。コンパイラに OCaml を採用したのだが、Rust を使った方が仕事に繋がったかもしれない。自作☓☓系は、自分も他人も使わないので開発しても不毛感がある。私は、パーサーを作る機会がやたら多いので、どうせならパーサー職人になりたい気持ちが僅かながらある。