Slide 1

Slide 1 text

改めて「型」について考えてみよう レバテック開発部/案件ドメインチーム 瀬尾光希 の使い方

Slide 2

Slide 2 text

| © 2024 Levtech Co., Ltd. 2 レバテック開発部 案件ドメインチーム/技術広報 瀬尾 光希 KOUKI SEO #バックエンドエンジニア #テックブログ/イベント運営 #ピアノ #Valorant さいきん右の親知らず抜いた

Slide 3

Slide 3 text

3 © 2024 Leverages Co., Ltd. 案件ドメインチーム(メンバー3人!助っ人求む) ● 「事業価値への貢献」と「営業生産性の向上」をシステム改善で実現する。 ● 案件ドメインにかかわるビジネスサイドと共通のメンタルモデルを獲得する。 ● 戦略的DDDを実践できる体制や関係性を構築する。 営業支援システム As Is 営業支援システム To Be ‧機能の細かい部分が実際の業務と乖離してしまって おり、営業さんの運⽤でカバーされている状態 ‧Laravel+Twig+jQuery に起因する UX の悪さで営業 ⽣産性が低い状態(開発者体験も悪い…) ‧MVC, Laravelの黒魔術に則った歴史により偶有的複 雑性を多分にはらんでしまった保守性の悪い状態 ‧実際の業務と親和性の⾼いシステムに近づけ、無駄 な作業の発⽣や教育コストをなくす ‧Reactの導⼊などのモダナイズによってフロントエン ドを最適化∕UXを改善し、営業⽣産性を向上させる ‧ドメインモデリングを通してリファクタリングを⾏ い、変更容易性の⾼いシステムにする どんな仕事してるの? 事業優先度の高い 部分から To Be を 目指して改善中!

Slide 4

Slide 4 text

4 © 2024 Leverages Co., Ltd. 本日の概要

Slide 5

Slide 5 text

5 © 2024 Leverages Co., Ltd. 本日の概要 🏃5分LTなので早口!!

Slide 6

Slide 6 text

6 © 2024 Leverages Co., Ltd. 題材

Slide 7

Slide 7 text

7 © 2024 Leverages Co., Ltd. 題材|ジェットコースターに人を乗せるハンドラー ジェットコースターの仕様 120cm〜200cmが乗れる 6歳〜60歳が乗れる 乗った人は20%の確率で 転落する可能性がある

Slide 8

Slide 8 text

8 © 2024 Leverages Co., Ltd. 題材|ジェットコースターに人を乗せるハンドラー ハンドラーの処理 1. 乗りたい人がくる 2. その人をジェットコースターに乗せる 3. その人がジェットコースターから降りたら支払いさせる ○ 転落したら支払いせず、救急車に乗せる ① ② ③ ❌

Slide 9

Slide 9 text

9 © 2024 Leverages Co., Ltd. 実装してみよう

Slide 10

Slide 10 text

10 © 2024 Leverages Co., Ltd. どうハンドラーを実装しますか? 上から愚直に書いていくパターン ● まず乗客がジェットコースターに乗れるかバリデーションするか〜

Slide 11

Slide 11 text

11 © 2024 Leverages Co., Ltd. どうハンドラーを実装しますか? 上から愚直に書いていくパターン ● まず乗客がジェットコースターに乗れるかバリデーションするか〜 ハンドラーは乗客をうけとる

Slide 12

Slide 12 text

12 © 2024 Leverages Co., Ltd. どうハンドラーを実装しますか? 上から愚直に書いていくパターン ● まず乗客がジェットコースターに乗れるかバリデーションするか〜 身長と年齢をもった乗客

Slide 13

Slide 13 text

13 © 2024 Leverages Co., Ltd. どうハンドラーを実装しますか? 上から愚直に書いていくパターン ● まず乗客がジェットコースターに乗れるかバリデーションするか〜 身長と年齢のバリデーション

Slide 14

Slide 14 text

14 © 2024 Leverages Co., Ltd. どうハンドラーを実装しますか? 上から愚直に書いていくパターン ● ジェットコースターに乗せる処理が必要だな〜 ● 支払いのために乗ったかどうかのステータスが必要だな〜

Slide 15

Slide 15 text

15 © 2024 Leverages Co., Ltd. どうハンドラーを実装しますか? 上から愚直に書いていくパターン ● ジェットコースターに乗せる処理が必要だな〜 ● 支払いのために乗ったかどうかのステータスが必要だな〜 バリデーション済みの人を ジェットコースターに乗せる

Slide 16

Slide 16 text

16 © 2024 Leverages Co., Ltd. どうハンドラーを実装しますか? 上から愚直に書いていくパターン ● ジェットコースターに乗せる処理が必要だな〜 ● 支払いのために乗ったかどうかのステータスが必要だな〜 ジェットコースターの処理 20%で転落 超えたら乗り終えたとしてマーク

Slide 17

Slide 17 text

17 © 2024 Leverages Co., Ltd. どうハンドラーを実装しますか? 上から愚直に書いていくパターン ● ジェットコースターに乗せる処理が必要だな〜 ● 支払いのために乗ったかどうかのステータスが必要だな〜 乗り終えたステータスを管理

Slide 18

Slide 18 text

18 © 2024 Leverages Co., Ltd. どうハンドラーを実装しますか? 上から愚直に書いていくパターン ● ジェットコースターで転落したかで分岐だな〜

Slide 19

Slide 19 text

19 © 2024 Leverages Co., Ltd. どうハンドラーを実装しますか? 上から愚直に書いていくパターン ● ジェットコースターで転落したかで分岐だな〜 try-catch 内でジェットコースター 成功したら集金、失敗したら救急車

Slide 20

Slide 20 text

20 © 2024 Leverages Co., Ltd. どうハンドラーを実装しますか? 上から愚直に書いていくパターン ● ジェットコースターで転落したかで分岐だな〜 集金できたかのステータス管理

Slide 21

Slide 21 text

21 © 2024 Leverages Co., Ltd. どうハンドラーを実装しますか? 上から愚直に書いていくパターン完成✨ 型 関数 ハンドラー本体

Slide 22

Slide 22 text

22 © 2024 Leverages Co., Ltd. 上から愚直に書いていくパターン ● 乗客という 型を実装を進めるとともに修正 していった ● 結果的に乗客という 型ひとつで全ての状態を表現 した

Slide 23

Slide 23 text

23 © 2024 Leverages Co., Ltd. 上から愚直に書いていくパターン ● 乗客という 型を実装を進めるとともに修正 していった ● 結果的に乗客という 型ひとつで全ての状態を表現 した 具体実装→型という順番で修正 抽象と具体を考える順番が 逆になってしまっている “型安全化”のために型をつかっている

Slide 24

Slide 24 text

24 © 2024 Leverages Co., Ltd. 「型」から考えてみよう

Slide 25

Slide 25 text

25 © 2024 Leverages Co., Ltd. 「型」から考えてみよう 型から書いていくパターン ● それぞれの状態を型で表現する ❌

Slide 26

Slide 26 text

26 © 2024 Leverages Co., Ltd. 型から書いていくパターン ● それぞれの状態を型で表現する ❌ 客 ● Not乗客 ● 乗客 ● 乗り終えた乗客 ● 転落した乗客 支払った乗客 「型」から考えてみよう

Slide 27

Slide 27 text

27 © 2024 Leverages Co., Ltd. 乗れるかのバリデーション ● それぞれの処理を抽象的に表現できる 客 ● Not乗客 ● 乗客 「型」から考えてみよう 簡易的な BrandedType で表現

Slide 28

Slide 28 text

28 © 2024 Leverages Co., Ltd. ジェットコースター ● それぞれの処理を抽象的に表現できる 乗客 ● 乗り終えた乗客 ● 転落した乗客 「型」から考えてみよう バリデーション済の乗客

Slide 29

Slide 29 text

29 © 2024 Leverages Co., Ltd. そのようにして実装したもの 「型」から考えてみよう 型 関数 ハンドラー本体

Slide 30

Slide 30 text

30 © 2024 Leverages Co., Ltd. 型から書いていくパターン ● 要件をまず型という 抽象的な実装に落とし込む ● 関数は型から型への遷移 をになう ● ハンドラーでは 型の遷移を組み立てる(具体的な実装)

Slide 31

Slide 31 text

31 © 2024 Leverages Co., Ltd. 型から書いていくパターン ● 要件をまず型という 抽象的な実装に落とし込む ● 関数は型から型への遷移 をになう ● ハンドラーでは 型の遷移を組み立てる(具体的な実装) 抽象的な型→具体的な実装 という順番 で要件をロジックにおとしこんだ 抽象度を段階的に下げることができる

Slide 32

Slide 32 text

32 © 2024 Leverages Co., Ltd. ● すべての状態で型が異なるので、ハンドラー内で What(要件)を読み取りやすい ● How を型→型への状態遷移をあらわす関数として表現できる ● それぞれの関数は入出力が決まっているため型安全かつテストしやすい ● 型に対する静的解析が効くため実行時エラーが減る etc. 型から実装したハンドラー|その他の利点 処理ごとに型が変化 ずっと型としては同じ

Slide 33

Slide 33 text

33 © 2024 Leverages Co., Ltd. ● それぞれの型を発見するためには、ドメインモデリングや要件定義が重要 になる ● エンジニアがビジネスに向き合うきっかけとしても「型」は良いきっかけになる 型から実装したハンドラー|実践しようとすると… ❌ 客 ● Not乗客 ● 乗客 ● 乗り終えた乗客 ● 転落した乗客 支払った乗客

Slide 34

Slide 34 text

34 © 2024 Leverages Co., Ltd. 型から実装を考えてみよう

Slide 35

Slide 35 text

35 © 2024 Leverages Co., Ltd. EOF