Enumライクな定数管理機構を作ってDTOと組み合わせると幸せ by きんじょうひでき

PHPerKaigi 2020
15分トーク

Enumライクな定数管理機構を作ってDTOと組み合わせると幸せ

o0h_ きんじょうひでき o0h_
1

お伝えしたいこと

「意味を読み取りやすいコード」や「同じ事を同じ書き方で表現させる」のは、チームでの品質保持や生産性につながります。
それらの課題は、ある程度まで仕組みで解決することが可能です。

Enumぽいものは、比較的スモールに導入できる上にととても便利なので、作っちゃいましょう or 既存のモノを導入しましょう。活用事例としてDTOのお話にも触れます。

// users.statusが3だったら仮登録状態
if ($user->status === 3) {
こんな光景を、見た事がありますか。

PHPにはEnum型はありませんがEnumを模した実装は多くあります。
Hirakuさんの記事は読んだことのある方も多いと思いますし (https://qiita.com/Hiraku/items/71e385b56dcaa37629fe) 、myclabs/php-enumは多くのパッケージで利用されています 。
過去に私も自作しました(https://speakerdeck.com/o0h/bye-bye-magic-number)。これはCakePHP3での事例ですが、作成・導入をした結果とした感想は「メチャクチャDXが上がる」です。どこであろうと似たような表現を同じインターフェイスで扱うことで、メンバー間の書かれるコードの均質性が上がりました
また、EnumをDTOオブジェクトと繋ぎこむとその効果は更に拡大します。
例えば「DBから取ってきた値」「ユーザーリクエストで飛んできたjsonデータ」を自然に扱えるようになります。
dereuromark/cakephp-dto dereuromark/cakephp-dtoを利用しながら「どういう開発体験がもたらされるか」について考察します