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
130
改めて「型」について考えてみよう
2025/02/05(水) 社内技術イベントの登壇資料です。
本資料では、型によって抽象的に実装を考えることで段階的に要件を実装におろしていくというメンタルモデルについてお話しします。
Tech Leverages
February 18, 2025
Tweet
Share
More Decks by Tech Leverages
See All by Tech Leverages
ハッカソンから社内プロダクトへ AIエージェント ko☆shi 開発で学んだ4つの重要要素
leveragestech
0
650
2025年のデザインシステムとAI 活用を振り返る
leveragestech
0
820
ディメンショナルモデリングを採用してない組織がモデリング本を通じて得られたこと
leveragestech
0
710
レバレジーズのLangfuse活用事例
leveragestech
0
650
CloudComposerによる大規模ETL 「制御と実行の分離」の実践
leveragestech
0
970
「ELT職人」から卒業!Fivetranでデータパイプラインの構築・運用から解放され、 本来の価値創造に集中できる ようになった事例
leveragestech
0
640
SpecKitでどこまでできる? コストはどれくらい?
leveragestech
2
4.1k
未来を拓くAI技術〜エージェント開発とAI駆動開発〜
leveragestech
2
300
コンテキストエンジニアリングで変わるAI活用 リファクタリングワークフローの実践から学んだ形式知
leveragestech
0
190
Other Decks in Technology
See All in Technology
たかがボタン、されどボタン ~button要素から深ぼるボタンUIの定義について~ / BuriKaigi 2026
yamanoku
1
230
人工知能のための哲学塾 ニューロフィロソフィ篇 第零夜 「ニューロフィロソフィとは何か?」
miyayou
0
420
CQRS/ESになぜアクターモデルが必要なのか
j5ik2o
0
800
旬のブリと旬の技術で楽しむ AI エージェント設計開発レシピ
chack411
1
220
国井さんにPurview の話を聞く会
sophiakunii
1
360
Oracle Database@Google Cloud:サービス概要のご紹介
oracle4engineer
PRO
1
900
Introduction to Bill One Development Engineer
sansan33
PRO
0
340
Data Hubグループ 紹介資料
sansan33
PRO
0
2.6k
歴史から学ぶ、Goのメモリ管理基礎
logica0419
14
2.7k
チームで安全にClaude Codeを利用するためのプラクティス / team-claude-code-practices
tomoki10
7
3.2k
プロンプトエンジニアリングを超えて:自由と統制のあいだでつくる Platform × Context Engineering
yuriemori
0
410
コミュニティが持つ「学びと成長の場」としての作用 / RSGT2026
ama_ch
0
200
Featured
See All Featured
SEO in 2025: How to Prepare for the Future of Search
ipullrank
3
3.3k
Building AI with AI
inesmontani
PRO
1
620
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
25
1.7k
Breaking role norms: Why Content Design is so much more than writing copy - Taylor Woolridge
uxyall
0
130
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
38
2.7k
Rebuilding a faster, lazier Slack
samanthasiow
85
9.3k
Chasing Engaging Ingredients in Design
codingconduct
0
97
It's Worth the Effort
3n
188
29k
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
16
1.8k
The AI Revolution Will Not Be Monopolized: How open-source beats economies of scale, even for LLMs
inesmontani
PRO
3
2.8k
Docker and Python
trallard
47
3.7k
Information Architects: The Missing Link in Design Systems
soysaucechin
0
740
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