Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
改めて「型」について考えてみよう
Search
Tech Leverages
February 18, 2025
Technology
1
50
改めて「型」について考えてみよう
2025/02/05(水) 社内技術イベントの登壇資料です。
本資料では、型によって抽象的に実装を考えることで段階的に要件を実装におろしていくというメンタルモデルについてお話しします。
Tech Leverages
February 18, 2025
Tweet
Share
More Decks by Tech Leverages
See All by Tech Leverages
レバテック開発部 技術広報 これまでとこれから
leveragestech
0
76
苦しいTiDBへの移行を乗り越えて快適な運用を目指す
leveragestech
0
680
Biome で Format と Lint のストレスをゼロに
leveragestech
0
54
10倍スケールを見越した データモデリングのリアーキテクチャ
leveragestech
1
150
理想のパスワードは?
leveragestech
1
93
データエンジニアとしてのキャリア戦略 〜これからの挑戦〜
leveragestech
0
100
ドメインロジックで考えるテスタビリティ
leveragestech
1
330
専門領域に特化したチームの挑戦
leveragestech
0
460
もう一度、 事業を支えるシステムに。
leveragestech
6
5.7k
Other Decks in Technology
See All in Technology
リーダブルテストコード 〜メンテナンスしやすい テストコードを作成する方法を考える〜 #DevSumi #DevSumiB / Readable test code
nihonbuson
11
7.4k
『衛星データ利用の方々にとって近いようで触れる機会のなさそうな小話 ~ 衛星搭載ソフトウェアと衛星運用ソフトウェア (実物) を動かしながらわいわいする編 ~』 @日本衛星データコミニティ勉強会
meltingrabbit
0
150
速くて安いWebサイトを作る
nishiharatsubasa
13
14k
Active Directory攻防
cryptopeg
PRO
2
970
Amazon S3 Tablesと外部分析基盤連携について / Amazon S3 Tables and External Data Analytics Platform
nttcom
0
140
デスクトップだけじゃないUbuntu
mtyshibata
0
250
オブザーバビリティの観点でみるAWS / AWS from observability perspective
ymotongpoo
8
1.5k
JEDAI Meetup! Databricks AI/BI概要
databricksjapan
0
190
一度 Expo の採用を断念したけど、 再度 Expo の導入を検討している話
ichiki1023
1
170
個人開発から公式機能へ: PlaywrightとRailsをつなげた3年の軌跡
yusukeiwaki
11
3k
運用しているアプリケーションのDBのリプレイスをやってみた
miura55
1
770
君も受託系GISエンジニアにならないか
sudataka
2
450
Featured
See All Featured
Documentation Writing (for coders)
carmenintech
67
4.6k
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
33
2.1k
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
114
50k
Faster Mobile Websites
deanohume
306
31k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
100
18k
GraphQLの誤解/rethinking-graphql
sonatard
68
10k
Building Adaptive Systems
keathley
40
2.4k
Building an army of robots
kneath
303
45k
We Have a Design System, Now What?
morganepeng
51
7.4k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
29
2.4k
How to Ace a Technical Interview
jacobian
276
23k
Dealing with People You Can't Stand - Big Design 2015
cassininazir
366
25k
Transcript
改めて「型」について考えてみよう レバテック開発部/案件ドメインチーム 瀬尾光希 の使い方
| © 2024 Levtech Co., Ltd. 2 レバテック開発部 案件ドメインチーム/技術広報 瀬尾 光希
KOUKI SEO #バックエンドエンジニア #テックブログ/イベント運営 #ピアノ #Valorant さいきん右の親知らず抜いた
3 © 2024 Leverages Co., Ltd. 案件ドメインチーム(メンバー3人!助っ人求む) • 「事業価値への貢献」と「営業生産性の向上」をシステム改善で実現する。 •
案件ドメインにかかわるビジネスサイドと共通のメンタルモデルを獲得する。 • 戦略的DDDを実践できる体制や関係性を構築する。 営業支援システム As Is 営業支援システム To Be ‧機能の細かい部分が実際の業務と乖離してしまって おり、営業さんの運⽤でカバーされている状態 ‧Laravel+Twig+jQuery に起因する UX の悪さで営業 ⽣産性が低い状態(開発者体験も悪い…) ‧MVC, Laravelの黒魔術に則った歴史により偶有的複 雑性を多分にはらんでしまった保守性の悪い状態 ‧実際の業務と親和性の⾼いシステムに近づけ、無駄 な作業の発⽣や教育コストをなくす ‧Reactの導⼊などのモダナイズによってフロントエン ドを最適化∕UXを改善し、営業⽣産性を向上させる ‧ドメインモデリングを通してリファクタリングを⾏ い、変更容易性の⾼いシステムにする どんな仕事してるの? 事業優先度の高い 部分から To Be を 目指して改善中!
4 © 2024 Leverages Co., Ltd. 本日の概要
5 © 2024 Leverages Co., Ltd. 本日の概要 🏃5分LTなので早口!!
6 © 2024 Leverages Co., Ltd. 題材
7 © 2024 Leverages Co., Ltd. 題材|ジェットコースターに人を乗せるハンドラー ジェットコースターの仕様 120cm〜200cmが乗れる 6歳〜60歳が乗れる
乗った人は20%の確率で 転落する可能性がある
8 © 2024 Leverages Co., Ltd. 題材|ジェットコースターに人を乗せるハンドラー ハンドラーの処理 1. 乗りたい人がくる
2. その人をジェットコースターに乗せる 3. その人がジェットコースターから降りたら支払いさせる ◦ 転落したら支払いせず、救急車に乗せる ① ② ③ ❌
9 © 2024 Leverages Co., Ltd. 実装してみよう
10 © 2024 Leverages Co., Ltd. どうハンドラーを実装しますか? 上から愚直に書いていくパターン • まず乗客がジェットコースターに乗れるかバリデーションするか〜
11 © 2024 Leverages Co., Ltd. どうハンドラーを実装しますか? 上から愚直に書いていくパターン • まず乗客がジェットコースターに乗れるかバリデーションするか〜
ハンドラーは乗客をうけとる
12 © 2024 Leverages Co., Ltd. どうハンドラーを実装しますか? 上から愚直に書いていくパターン • まず乗客がジェットコースターに乗れるかバリデーションするか〜
身長と年齢をもった乗客
13 © 2024 Leverages Co., Ltd. どうハンドラーを実装しますか? 上から愚直に書いていくパターン • まず乗客がジェットコースターに乗れるかバリデーションするか〜
身長と年齢のバリデーション
14 © 2024 Leverages Co., Ltd. どうハンドラーを実装しますか? 上から愚直に書いていくパターン • ジェットコースターに乗せる処理が必要だな〜
• 支払いのために乗ったかどうかのステータスが必要だな〜
15 © 2024 Leverages Co., Ltd. どうハンドラーを実装しますか? 上から愚直に書いていくパターン • ジェットコースターに乗せる処理が必要だな〜
• 支払いのために乗ったかどうかのステータスが必要だな〜 バリデーション済みの人を ジェットコースターに乗せる
16 © 2024 Leverages Co., Ltd. どうハンドラーを実装しますか? 上から愚直に書いていくパターン • ジェットコースターに乗せる処理が必要だな〜
• 支払いのために乗ったかどうかのステータスが必要だな〜 ジェットコースターの処理 20%で転落 超えたら乗り終えたとしてマーク
17 © 2024 Leverages Co., Ltd. どうハンドラーを実装しますか? 上から愚直に書いていくパターン • ジェットコースターに乗せる処理が必要だな〜
• 支払いのために乗ったかどうかのステータスが必要だな〜 乗り終えたステータスを管理
18 © 2024 Leverages Co., Ltd. どうハンドラーを実装しますか? 上から愚直に書いていくパターン • ジェットコースターで転落したかで分岐だな〜
19 © 2024 Leverages Co., Ltd. どうハンドラーを実装しますか? 上から愚直に書いていくパターン • ジェットコースターで転落したかで分岐だな〜
try-catch 内でジェットコースター 成功したら集金、失敗したら救急車
20 © 2024 Leverages Co., Ltd. どうハンドラーを実装しますか? 上から愚直に書いていくパターン • ジェットコースターで転落したかで分岐だな〜
集金できたかのステータス管理
21 © 2024 Leverages Co., Ltd. どうハンドラーを実装しますか? 上から愚直に書いていくパターン完成✨ 型 関数
ハンドラー本体
22 © 2024 Leverages Co., Ltd. 上から愚直に書いていくパターン • 乗客という 型を実装を進めるとともに修正
していった • 結果的に乗客という 型ひとつで全ての状態を表現 した
23 © 2024 Leverages Co., Ltd. 上から愚直に書いていくパターン • 乗客という 型を実装を進めるとともに修正
していった • 結果的に乗客という 型ひとつで全ての状態を表現 した 具体実装→型という順番で修正 抽象と具体を考える順番が 逆になってしまっている “型安全化”のために型をつかっている
24 © 2024 Leverages Co., Ltd. 「型」から考えてみよう
25 © 2024 Leverages Co., Ltd. 「型」から考えてみよう 型から書いていくパターン • それぞれの状態を型で表現する
❌
26 © 2024 Leverages Co., Ltd. 型から書いていくパターン • それぞれの状態を型で表現する ❌
客 • Not乗客 • 乗客 • 乗り終えた乗客 • 転落した乗客 支払った乗客 「型」から考えてみよう
27 © 2024 Leverages Co., Ltd. 乗れるかのバリデーション • それぞれの処理を抽象的に表現できる 客
• Not乗客 • 乗客 「型」から考えてみよう 簡易的な BrandedType で表現
28 © 2024 Leverages Co., Ltd. ジェットコースター • それぞれの処理を抽象的に表現できる 乗客
• 乗り終えた乗客 • 転落した乗客 「型」から考えてみよう バリデーション済の乗客
29 © 2024 Leverages Co., Ltd. そのようにして実装したもの 「型」から考えてみよう 型 関数
ハンドラー本体
30 © 2024 Leverages Co., Ltd. 型から書いていくパターン • 要件をまず型という 抽象的な実装に落とし込む
• 関数は型から型への遷移 をになう • ハンドラーでは 型の遷移を組み立てる(具体的な実装)
31 © 2024 Leverages Co., Ltd. 型から書いていくパターン • 要件をまず型という 抽象的な実装に落とし込む
• 関数は型から型への遷移 をになう • ハンドラーでは 型の遷移を組み立てる(具体的な実装) 抽象的な型→具体的な実装 という順番 で要件をロジックにおとしこんだ 抽象度を段階的に下げることができる
32 © 2024 Leverages Co., Ltd. • すべての状態で型が異なるので、ハンドラー内で What(要件)を読み取りやすい •
How を型→型への状態遷移をあらわす関数として表現できる • それぞれの関数は入出力が決まっているため型安全かつテストしやすい • 型に対する静的解析が効くため実行時エラーが減る etc. 型から実装したハンドラー|その他の利点 処理ごとに型が変化 ずっと型としては同じ
33 © 2024 Leverages Co., Ltd. • それぞれの型を発見するためには、ドメインモデリングや要件定義が重要 になる •
エンジニアがビジネスに向き合うきっかけとしても「型」は良いきっかけになる 型から実装したハンドラー|実践しようとすると… ❌ 客 • Not乗客 • 乗客 • 乗り終えた乗客 • 転落した乗客 支払った乗客
34 © 2024 Leverages Co., Ltd. 型から実装を考えてみよう
35 © 2024 Leverages Co., Ltd. EOF