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
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
KAKEHASHI
PRO
July 14, 2025
Technology
3
510
安定した基盤システムのためのライブラリ選定
実践!バックエンド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
3
33
他言語経験者が知っておきたいTypeScriptのクラスの注意点
kakehashi
PRO
1
15
「外部仕様書をDevinくんにやってもらってみた」に関連した色々話
kakehashi
PRO
2
24
複数チームでの並行開発を改善する取り組み
kakehashi
PRO
1
15
産業的変化も組織的変化も乗り越えられるチームへの成長 〜チームの変化から見出す明るい未来〜
kakehashi
PRO
1
1.1k
自己管理型チームと個人のセルフマネジメント 〜モチベーション編〜
kakehashi
PRO
5
3.9k
なりたかった自分となりたい自分
kakehashi
PRO
2
730
そのアウトプットは世界とつながっている
kakehashi
PRO
2
200
品質のための共通認識
kakehashi
PRO
5
540
Other Decks in Technology
See All in Technology
SREのプラクティスを用いた3領域同時 マネジメントへの挑戦 〜SRE・情シス・セキュリティを統合した チーム運営術〜
coconala_engineer
1
460
Azure Durable Functions で作った NL2SQL Agent の精度向上に取り組んだ話/jat08
thara0402
0
110
Sansan Engineering Unit 紹介資料
sansan33
PRO
1
3.8k
変化するコーディングエージェントとの現実的な付き合い方 〜Cursor安定択説と、ツールに依存しない「資産」〜
empitsu
4
1.1k
しろおびセキュリティへ ようこそ
log0417
0
250
MySQLのJSON機能の活用術
ikomachi226
0
130
2026年、サーバーレスの現在地 -「制約と戦う技術」から「当たり前の実行基盤」へ- /serverless2026
slsops
2
140
入社1ヶ月でデータパイプライン講座を作った話
waiwai2111
1
210
セキュリティ はじめの一歩
nikinusu
0
1.4k
ゼロから始めたFindy初のモバイルアプリ開発
grandbig
2
620
【5分でわかる】セーフィー エンジニア向け会社紹介
safie_recruit
0
41k
Amazon Bedrock AgentCore 認証・認可入門
hironobuiga
2
480
Featured
See All Featured
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
46
2.7k
AI Search: Where Are We & What Can We Do About It?
aleyda
0
6.9k
How to Talk to Developers About Accessibility
jct
2
120
A Guide to Academic Writing Using Generative AI - A Workshop
ks91
PRO
0
190
Prompt Engineering for Job Search
mfonobong
0
150
Noah Learner - AI + Me: how we built a GSC Bulk Export data pipeline
techseoconnect
PRO
0
100
Automating Front-end Workflow
addyosmani
1371
200k
AI in Enterprises - Java and Open Source to the Rescue
ivargrimstad
0
1.1k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
231
22k
Data-driven link building: lessons from a $708K investment (BrightonSEO talk)
szymonslowik
1
910
[SF Ruby Conf 2025] Rails X
palkan
0
730
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
35
2.4k
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/ お待ちしております!