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
KAKEHASHI
PRO
July 14, 2025
Technology
3
500
安定した基盤システムのためのライブラリ選定
実践!バックエンドTypeScript〜現場から学ぶtsの可能性〜
https://findy.connpass.com/event/360678/
での登壇資料です
KAKEHASHI
PRO
July 14, 2025
Tweet
Share
More Decks by KAKEHASHI
See All by KAKEHASHI
産業的変化も組織的変化も乗り越えられるチームへの成長 〜チームの変化から見出す明るい未来〜
kakehashi
PRO
1
290
自己管理型チームと個人のセルフマネジメント 〜モチベーション編〜
kakehashi
PRO
5
1.9k
なりたかった自分となりたい自分
kakehashi
PRO
1
500
そのアウトプットは世界とつながっている
kakehashi
PRO
2
150
品質のための共通認識
kakehashi
PRO
5
490
なぜ使われないのか?──定量×定性で見極める本当のボトルネック
kakehashi
PRO
1
1.7k
制約下の医療LLM Observability 〜セキュアなデータ活用と専門家による改善サイクルの実現〜
kakehashi
PRO
2
290
KAKEHASHI❤️Hono
kakehashi
PRO
1
390
生成AIが拓く医療DXの進化と壁
kakehashi
PRO
1
340
Other Decks in Technology
See All in Technology
Oracle Database@Azure:サービス概要のご紹介
oracle4engineer
PRO
3
260
2025年の医用画像AI/AI×medical_imaging_in_2025_generated_by_AI
tdys13
0
300
AIと融ける人間の冒険
pujisi
0
110
ハッカソンから社内プロダクトへ AIエージェント ko☆shi 開発で学んだ4つの重要要素
leveragestech
0
560
小さく、早く、可能性を多産する。生成AIプロジェクト / prAIrie-dog
visional_engineering_and_design
0
320
_第4回__AIxIoTビジネス共創ラボ紹介資料_20251203.pdf
iotcomjpadmin
0
170
Contract One Engineering Unit 紹介資料
sansan33
PRO
0
12k
AWSと生成AIで学ぶ!実行計画の読み解き方とSQLチューニングの実践
yakumo
2
190
AIエージェントを5分で一気におさらい!AIエージェント「構築」元年に備えよう
yakumo
1
140
AWS re:Invent 2025 を振り返る
kazzpapa3
2
110
松尾研LLM講座2025 応用編Day3「軽量化」 講義資料
aratako
15
4.9k
[PR] はじめてのデジタルアイデンティティという本を書きました
ritou
0
760
Featured
See All Featured
Google's AI Overviews - The New Search
badams
0
890
Digital Projects Gone Horribly Wrong (And the UX Pros Who Still Save the Day) - Dean Schuster
uxyall
0
120
RailsConf 2023
tenderlove
30
1.3k
Lightning talk: Run Django tests with GitHub Actions
sabderemane
0
97
Conquering PDFs: document understanding beyond plain text
inesmontani
PRO
4
2.2k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
132
19k
Context Engineering - Making Every Token Count
addyosmani
9
590
Ruling the World: When Life Gets Gamed
codingconduct
0
120
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
55
3.2k
<Decoding/> the Language of Devs - We Love SEO 2024
nikkihalliwell
1
110
How to audit for AI Accessibility on your Front & Back End
davetheseo
0
140
Imperfection Machines: The Place of Print at Facebook
scottboms
269
13k
Transcript
©KAKEHASHI inc. 安定した基盤システムのための ライブラリ選定 2025/07/15 実践!バックエンドTypeScript〜現場から学ぶTSの可能性〜 株式会社カケハシ 岩佐 幸翠 (@kosui_me)
©KAKEHASHI inc. カケハシについて
©KAKEHASHI inc. #1 医療プロダクトを支える 基盤システム
©KAKEHASHI inc. 機能要求 #1 医療プロダクトを支える基盤システム • 認証・認可 複雑な状態遷移を伴う • ディレクトリサービス
ユーザー・店舗・テナント・グループ・組織階層... 複雑なリレーションシップが絡み合う • ライセンス 契約とコンプライアンスに直結する
©KAKEHASHI inc. 非機能要求 #1 医療プロダクトを支える基盤システム • セキュリティ 患者の薬歴などの要配慮個人情報を取り扱う • 可用性
医療の現場の業務を止めてはいけない • 移植性 基盤システムとして永く運用し続ける必要がある • 性能・拡張性 日本の薬局は約60,000店舗 薬局は常に一定の時間に開局・閉局する データ量やトラフィックはある程度上限が推定できる
©KAKEHASHI inc. #2 TypeScriptで 基盤システムを構築する
©KAKEHASHI inc. 基盤システムを構築するなら #2 TypeScriptで基盤システムを構築する 静的型付け言語で堅牢かつ効率的な基盤システムを構築したいなら 選択肢は数多くある • Java パターンマッチ・仮想スレッド・レコードパターン...
今なお進化し続ける言語 • Go ゴルーチンで高パフォーマンスなアプリケーションを容易に構築できる • Rust メモリ安全で表現力の高い言語
©KAKEHASHI inc. なぜTypeScript? #2 TypeScriptで基盤システムを構築する 基盤システムでは複雑な機能要件を表現したい 認証・認可、ディレクトリサービス、ライセンスなど 複雑な状態遷移とリレーションシップがコード上で表現されてほしい TypeScriptの型の表現力でモデリングする 値やエンティティ、そして状態を型で表現する
コードや仕様の誤りを型検査時に発見できる • 「関数型ドメインモデリング」 (アスキードワンゴ社) • TypeScript 関数型スタイルでバックエンド開発のリアル - Speaker Deck • TypeScript開発にRailway Orientedを持ち込み、より型安全なエラーハンドリングへ - Sansan Tech Blog
©KAKEHASHI inc. 例) ディレクトリサービス #2 TypeScriptで基盤システムを構築する OrgRoot OrgGroup OrgGroup OrgGroup
OrgStore OrgGroup OrgGroup OrgStore OrgStore 店舗の親は グループのみ グループの親は グループかルート ルートは親を 持たない 親子関係の正確な表現
©KAKEHASHI inc. 例) ディレクトリサービス #2 TypeScriptで基盤システムを構築する OrgRoot OrgGroup OrgGroup OrgGroup
OrgStore OrgGroup OrgGroup OrgStore OrgStore シグニチャを 見れば発生する エラーがわかる 振る舞いの事後条件を型で示す
©KAKEHASHI inc. TypeScriptを採用する場合の注意点 #2 TypeScriptで基盤システムを構築する • クラスや例外機構における型推論 😭 過去のJavaScriptコードへ漸近的に型付けできるように クラスに対する型推論はゆるめなことも多い
例) メソッド記法は双変になってしまう 😭 try-catch文ではすべての例外がunknown型になるため ランタイムでの型の検証が必須 • CPU boundな処理が苦手 Node.jsはシングルスレッド ✅ I/O boundな処理 (非同期処理) をイベントループで高速に捌ける ❌ CPU boundな処理 (同期処理) を掴まされると他イベントの処理が詰まる
©KAKEHASHI inc. 指針 #2 TypeScriptで基盤システムを構築する 設計方針 • 型とスキーマを活用し、自己文書化されたコードを目指す • 移植性を高く保つ
• クラスや例外機構に頼らない ライブラリ選定方針 • スキーマ駆動である • 標準に基づいている • クラスや例外機構への依存度が低い
©KAKEHASHI inc. #3 型とスキーマを活用した 基盤システム
©KAKEHASHI inc. スキーマ検証ライブラリ #3 型とスキーマを活用した基盤システム TypeScriptにおけるスキーマ検証ライブラリは 単なる外界とのI/Fの文書化以上の意味を持つ 例: 値オブジェクトの定義 UserId型は必ずzodによる
UUID v4の検証を通してのみ インスタンス化される badUserIdは 型検査でエラーとなる
©KAKEHASHI inc. スキーマ検証ライブラリの選び方 #3 型とスキーマを活用した基盤システム - JSON Schemaベース Ajvなど 移植性を重視した選択肢
- Standard Schema準拠 Zod、Valibot、Arktype、Effect Schemaなど 多くのスキーマ検証ライブラリがサポートする標準インタフェース エンティティ、値オブジェクト、状態などの定義にもスキーマ検証ライブラリを使うなら TypeScriptでスキーマを定義できるZodがおすすめ ただしメールアドレスの検証ルールはライブラリによって細かく異なる場合がある 既存データを弾いてしまう / 不正データを許してしまうことがないようによく検証する
©KAKEHASHI inc. Webフレームワーク #3 型とスキーマを活用した基盤システム Hono 段階的に採用を進行中 • 様々なJSランタイムで実行可能 •
Web標準に基づいたデザイン fetch、Requests、Responses、URL、URLSearchParamなど • Standard Schemaをサポート リクエストやレスポンスをStandard Schemaで検証できる NestJS 新規では採用しない予定 Spring BootのようなリッチなDIコンテナを提供する • 型検査時ではなくランタイム時まで依存性の検証ができない • 明らかに型と一致しないサービスを注入できてしまう
©KAKEHASHI inc. データベースとの接続 #3 型とスキーマを活用した基盤システム Kysely 継続利用中 事前に用意した型定義に従ってクエリ結果に型を付けてくれるクエリビルダー Drizzle 注視
同じくクエリ結果に型を付けてくれるクエリビルダー Kyselyよりもリッチなマイグレーション機能を有する Prisma ORM 弊チームでは撤退済み (2023年頃) 様々なデータベースをサポートするType-safeを謳うORM 発行されるクエリが予想しづらく断念 • Prisma ORMを2年運用して培ったノウハウを共有する - Speaker Deck
©KAKEHASHI inc. #4 TypeScriptの 注意点を乗り越える
©KAKEHASHI inc. CPU boundな処理との向き合い方 #4 TypeScriptの注意点を乗り越える コンピューティングリソースを分離する 最もシンプルな解決策 • 他のAWS
ECSサービス/Cloud Runへ • 他のAWS Lambda/Cloud Run functionsへ Worker threadsを利用する CPU Boundな処理を他のスレッドへ逃がす方法 適切にWorker threadをハンドリングする能力と気合が必要
©KAKEHASHI inc. 仲間を探しています 数多くの医療プロダクトを支えるプラットフォームシステムを作るのは楽しい - 難易度の高い非機能要求を達成する - 複雑な医療業界をモデリングしてシステムに落とし込む - システムの正しさを仕組みで担保する
型システム、関数型ドメインモデリング、Effect System... テナント分離、Row Level Security... https://recruit.kakehashi.life/ お待ちしております!