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
740
3
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
安定した基盤システムのためのライブラリ選定
実践!バックエンドTypeScript〜現場から学ぶtsの可能性〜
https://findy.connpass.com/event/360678/
での登壇資料です
KAKEHASHI
PRO
July 14, 2025
More Decks by KAKEHASHI
See All by KAKEHASHI
人を動かすのは時間ではなく、納得感 〜新任EMが入社3ヶ月、組織を2回変えた話〜
kakehashi
PRO
3
270
クラウド上のデータ復旧で見落としがちな制約: 医療系 SaaS の BCP 設計から得た教訓
kakehashi
PRO
0
3.8k
プロダクトだけじゃない、社内プロセスにおける自動化・省力化ノススメ
kakehashi
PRO
1
4k
「軸足」は 固定しなくていい - 熱量と強みで描く、しなやかなキャリアの形
kakehashi
PRO
1
370
Sync と Async ─ useSyncExternalStore を使う者の岐路
kakehashi
PRO
1
600
React Compiler導入の効果と運用の工夫
kakehashi
PRO
3
510
変化の激しい時代をゴキゲンに生き抜くために 〜ストレスマネジメントのススメ〜
kakehashi
PRO
5
2.6k
「SaaSの次の時代」に重要性を増すステークホルダーマネジメントの要諦 ~解像度を圧倒的に高めPdMの価値を最大化させる方法~
kakehashi
PRO
3
5.1k
プロダクトを育てるように生成AIによる開発プロセスを育てよう
kakehashi
PRO
2
2.2k
Other Decks in Technology
See All in Technology
SREとQA 二人三脚で進めるSLO運用/sre-qa-slo
sugitak
0
970
AI時代の開発生産性は、個人技からチーム設計へ
moongift
PRO
4
2.4k
AI Driven AI Governance
pict3
0
490
「守りたい体験」を渡すだけで E2E を生成させられるようになった話
hinac0
1
600
CDKで書くECSのベストプラクティス、 改めて考え直す2026 #cdkconf2026
makies
3
830
実践!既存 Project への AI-Driven Development 適用〜 一ヶ月で Project 唯一のフロントエンドエンジニアを作り出せ〜
lycorptech_jp
PRO
0
240
10年目を迎えた「ABEMA」がどのように AI 活用を推進して、AI 駆動開発にシフトしているのか / How ABEMA, entering its 10th year, is promoting the use of AI and shifting toward AI-driven development
miyukki
0
290
「AIに依存している」と 「AIを使いこなしている」の違い
k8yasuma
0
120
しくみを学んで使いこなそう GitHub Copilot app
torumakabe
2
290
Claude Code公式skillで 自分の仕事を少しずつ手放そう!(Claude Code開発ノウハウ大公開スペシャル by クラスメソッド)
kaym
1
500
Terraform共通モジュールをチーム横断で“変えられる”運用へ ― リリースと適用の分離
kekke_n
1
3.4k
CSに"SLO"は要らない、経営層に"99.9%"は伝わらない - SREを全社に"翻訳"する3原則
cscengineer
PRO
1
5.1k
Featured
See All Featured
jQuery: Nuts, Bolts and Bling
dougneiner
66
8.5k
Everyday Curiosity
cassininazir
0
260
The agentic SEO stack - context over prompts
schlessera
0
850
Fantastic passwords and where to find them - at NoRuKo
philnash
52
3.8k
How to Think Like a Performance Engineer
csswizardry
28
2.7k
For a Future-Friendly Web
brad_frost
183
10k
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
38
2.9k
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
34
2.8k
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
55
3.4k
Raft: Consensus for Rubyists
vanstee
141
7.6k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
133
19k
The Illustrated Children's Guide to Kubernetes
chrisshort
51
53k
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/ お待ちしております!