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
TypeScript で Railway Oriented Programming 型安全なエ...
Search
daitasu
March 19, 2025
530
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
TypeScript で Railway Oriented Programming 型安全なエラーハンドリングを作る
2025.3.19 コネヒトさんとのクローズドイベント
元記事
https://daitasu.hatenablog.jp/entry/2025/03/04/090000
daitasu
March 19, 2025
More Decks by daitasu
See All by daitasu
Semantic Version 単位で戦略を柔軟に変えて、パッケージアップデートを自動化する
daitasu
1
390
Tachikawa.any 運営挨拶
daitasu
0
280
「Tachikawa.any」始めました! 〜地域コミュニティをなぜ立ち上げるのか、初めての立ち上げの壁〜
daitasu
2
320
開発組織の課題解決を加速するための権限委譲 -する側、される側としての向き合い方-
daitasu
6
2.6k
ご機嫌に学べ - 寝ぼけ眼の親たちへ贈る_友の輪_駆動開発 -
daitasu
1
470
型安全で非依存な軽量AIエージェントフレームワーク、Tankstack AI
daitasu
1
150
AIエージェントが対話的なUIを返す!MCP−UIで変わるユーザ体験
daitasu
1
260
職種の壁を溶かして開発サイクルを高速に回す~情報透明性と職種越境から考えるAIフレンドリーな職種間連携~
daitasu
0
910
「みんな、笑顔になぁれ」を実現する 職種混合開発組織の目標設定・評価の改善事例
daitasu
0
930
Featured
See All Featured
Claude Code のすすめ
schroneko
67
230k
Exploring the relationship between traditional SERPs and Gen AI search
raygrieselhuber
PRO
2
4.2k
A designer walks into a library…
pauljervisheath
211
24k
DevOps and Value Stream Thinking: Enabling flow, efficiency and business value
helenjbeal
1
280
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
10
1.3k
It's Worth the Effort
3n
188
29k
30 Presentation Tips
portentint
PRO
1
360
Navigating Algorithm Shifts & AI Overviews - #SMXNext
aleyda
1
1.5k
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
38
2.9k
Leadership Guide Workshop - DevTernity 2021
reverentgeek
1
330
Leveraging Curiosity to Care for An Aging Population
cassininazir
1
450
Docker and Python
trallard
47
4k
Transcript
TypeScript で Railway Oriented Programming 型安全なエラーハンドリングを作る コネヒト・千合同懇親会 @daitasu
TypeScript の例外処理に Railway Oritented Programming を使おう!
Railway Oriented Programming(ROP) • 2014年にScott Wlaschinさんによって提唱 • 関数型プログラミングにおける、エラーハンドリングの取り扱いに焦点を当てた 実装手法 •
関数を「成功」と「失敗」の2つの分岐がある 線路(レール) に見立てる
Railway Oriented Programming • 1つの関数が1つ のinput に対し、2つの output パターンを持つ 成功!
失敗... function input
Railway Oriented Programming • 「成功」時は次の処理へ、「失敗」時は何もせず通過する validateLength validateEmail on success bypass
Railway Oriented Programming • 各関数の連結 → 成功時のみ値が残り、失敗時は最初のエラー情報が最後 まで届く validateLength validateEmail
extractDomain
Result 型とは • ROP に則った型定義 • 言語によって命名が微妙に異なる • Result 型
◦ Success と Failure の Union 型 • Result 型を受けてResult型を返す処理も 一緒に必要(Scala だと flatMap 関数) ◦ Success 受取り時: 次の関数を実行 ◦ Failure 受取り時: 何もせず次へ
何が嬉しいの?
手続き的な例外処理のつらみ Error Handling を 各関数で意識する必要がある (考慮漏れの懸念) TSのtry catch は エラー情報の型を持たない
→ どのエラーか分からん
Result 型を適用する 返り値の型を Result 型へ → 型エラーで Handling 漏れに気付ける Success時:値が返却
Error時:エラー箇所の情報を保持 エラー処理の入れ子が減って、 処理が追いやすくなる
まとめ • 手続き的エラーハンドリングはしんどい ◦ try catch の入れ子の増加と対応漏れの発生 ◦ 例外の型が伝播されない •
Result はオススメ ◦ ROP によって例外処理の漏れを型安全に防止できる ◦ try catch の入れ子を脱せて、煩雑化を防げる • TS 標準の型ではない ◦ TS 標準の型ではなく、オレオレ型定義が生まれる ◦ 用法・用量を守って症状を見ながらの使用に留める
記事 https://daitasu.hatenablog.jp/entry/2025/03/04/090000 TypeScript の例外処理を Railway Oriented Programming(Result 型) で楽にしたい