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
Slackを「AIエージェントのHub」にする 〜 SlackbotとHolmesGPTで実現するAIOps
leveragestech
PRO
0
130
データ組織の転換期 一足飛びしない段階的戦略
leveragestech
PRO
0
220
並列化でチームのアウトプットを増やす
leveragestech
PRO
0
61
Engineering ManagerがAI時代に この先生きのこるには?
leveragestech
PRO
1
150
最新技術を"今は選ばない"という技術選定
leveragestech
PRO
0
610
毎⽇dumpされるDBにCDCは無⼒だっ た、、FederatedQueryで繋ぎ直した データ連携の試⾏錯誤
leveragestech
PRO
0
120
Tableauを活かすためにTableauに制約を設けた話
leveragestech
PRO
0
110
営業支援システムと歩んだ7年半の変遷
leveragestech
PRO
0
190
DMBOKを使ってレバレジーズのデータマネジメントを評価した
leveragestech
PRO
0
950
Other Decks in Technology
See All in Technology
Claude in Chrome 入門 / Introduction to Claude in Chrome
cielo1985
0
860
AIで社員の自主発信に広報目線を組み込む
_mossann_t
0
130
30座EKS, 180次升級淬煉的EKS Upgrade Skill 的歷程
eric8230
0
180
AIに任せた品質は、誰が見立てるのか - AI時代のテストマネジメント
nakanao
3
2.2k
株式会社シーエーシー エンジニア向け会社紹介資料
cac
0
57k
GoのInterface内部構造から学ぶ!最高パフォーマンスを出すコード設計
yappli_developers
0
160
銀行勘定系システムにおける開発プロセス刷新×AIによる環境モダナイゼーション / Development Process Transformation and AI-Driven Environment Modernization
muit
1
2.3k
目の前の楽しいが人生を変える - コミュニティの螺旋の歩き方と楽しむコツ / change your life
soudai
PRO
5
640
人間はどの意思決定を手放せるのか
kawasima
15
7.3k
エージェントはローカル、検証はMicroVM — Lambda MicroVMsでつくるServerless CI
fujioka6789
3
360
Azure Serverless 2026:Production-ready な AI エージェント基盤 / Azure Serverless 2026: Production-Ready AI Agent Platform
miyake
2
240
白金鉱業Meetup Vol.25 アウトカムが二値のデータに対するCausal Impact
brainpadpr
0
250
Featured
See All Featured
Stewardship and Sustainability of Urban and Community Forests
pwiseman
0
530
Game over? The fight for quality and originality in the time of robots
wayneb77
1
280
WCS-LA-2024
lcolladotor
0
830
We Analyzed 250 Million AI Search Results: Here's What I Found
joshbly
1
1.9k
Crafting Experiences
bethany
1
340
GitHub's CSS Performance
jonrohan
1033
470k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
32
3k
Why Your Marketing Sucks and What You Can Do About It - Sophie Logan
marketingsoph
0
410
Navigating the moral maze — ethical principles for Al-driven product design
skipperchong
2
550
Fireside Chat
paigeccino
43
4k
Information Architects: The Missing Link in Design Systems
soysaucechin
1
1.1k
Designing Powerful Visuals for Engaging Learning
tmiket
1
570
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