Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
改めて「型」について考えてみよう
Search
Tech Leverages
PRO
February 18, 2025
Technology
150
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
改めて「型」について考えてみよう
2025/02/05(水) 社内技術イベントの登壇資料です。
本資料では、型によって抽象的に実装を考えることで段階的に要件を実装におろしていくというメンタルモデルについてお話しします。
Tech Leverages
PRO
February 18, 2025
More Decks by Tech Leverages
See All by Tech Leverages
HolmesGPTで始めるSREエージェント入門!プラットフォームの障害調査はAIにお任せ 〜
leveragestech
PRO
0
160
Slackを「AIエージェントのHub」にする 〜 SlackbotとHolmesGPTで実現するAIOps
leveragestech
PRO
0
160
データ組織の転換期 一足飛びしない段階的戦略
leveragestech
PRO
0
260
並列化でチームのアウトプットを増やす
leveragestech
PRO
0
69
Engineering ManagerがAI時代に この先生きのこるには?
leveragestech
PRO
1
210
最新技術を"今は選ばない"という技術選定
leveragestech
PRO
0
680
毎⽇dumpされるDBにCDCは無⼒だっ た、、FederatedQueryで繋ぎ直した データ連携の試⾏錯誤
leveragestech
PRO
0
130
Tableauを活かすためにTableauに制約を設けた話
leveragestech
PRO
0
150
営業支援システムと歩んだ7年半の変遷
leveragestech
PRO
0
220
Other Decks in Technology
See All in Technology
Execution in the Kingdom of Agents: Reflections on Abstraction and Complexity
bcantrill
0
940
自分で立ててみるLLMサービス
y_sera15
0
160
契約書画像からの情報抽出に特化した視覚接地モデルを育てる話
sansantech
PRO
1
160
分析の民主化を支えるメタデータ整備の実践
kakehashi
PRO
4
1.3k
ゲームのリアルタイム通信から見た QUIC と MoQ
segadevtech
0
110
ファミコンでPHPを動かす / PHP on the Famicom side b
tomzoh
0
140
Datadog の学び方 - あるいは、オブザーバビリティを学ぶとは何か
mananyuki
1
540
FactoryBotアンチパターン / factory_bot anti-patterns
toshimaru
0
150
UniFi(ユニファイ)AIカメラの現場活用
ludicmind
1
410
自主式軟體工廠
philipz
0
260
実践!Cloud Run ハンズオン!! / Cloud Run handson
y0hgi
0
200
初対面のメンバーがチームを組み、Claude Codeでゼロからサービスをリリース
mkdev10
1
120
Featured
See All Featured
How to build an LLM SEO readiness audit: a practical framework
nmsamuel
2
940
Navigating the moral maze — ethical principles for Al-driven product design
skipperchong
2
620
Building a Scalable Design System with Sketch
lauravandoore
464
34k
The agentic SEO stack - context over prompts
schlessera
0
970
Statistics for Hackers
jakevdp
799
230k
Embracing the Ebb and Flow
colly
88
5.2k
Leveraging LLMs for student feedback in introductory data science courses - posit::conf(2025)
minecr
1
430
WCS-LA-2024
lcolladotor
0
870
How to Grow Your eCommerce with AI & Automation
katarinadahlin
PRO
2
320
Evolving SEO for Evolving Search Engines
ryanjones
0
320
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
38
3.1k
The Cult of Friendly URLs
andyhume
79
7k
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