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
型安全RESTで爆速プロトタイピング – Hono RPC実践
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
tacke
May 27, 2025
Programming
620
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
型安全RESTで爆速プロトタイピング – Hono RPC実践
https://layerx.connpass.com/event/355401/
でのLTスライド
tacke
May 27, 2025
More Decks by tacke
See All by tacke
スモールチームがAmazon Cognitoでコスパよく作るサービス間連携認証
tacke_jp
4
5.6k
Androidエンジニアが抑えておくべきUnicode Emojiの知識 (DroidKaigi 2019) / Unicode Emoji for Android Engineer DroidKaigi09
tacke_jp
12
4.9k
Parse.comからGCPへ移行した話 ~1年間にわたる脱出プロジェクト~
tacke_jp
2
2.2k
Other Decks in Programming
See All in Programming
IBM Bobを活用したレガシーアプリの最新化
oniak3ibm
PRO
1
230
Dataformのリポジトリを立ち上げるときにまずやること / dataform-day0-2026
snhryt
0
200
Performance Engineering for Everyone
elenatanasoiu
0
250
Agentic UI
manfredsteyer
PRO
0
220
エンジニアと一緒にテストコードの設計と実装を改善した話
mototakatsu
0
240
TSKaigi Night Talks 2026_TypeScriptでサプライチェーンの整合性を型に閉じ込める
geekplus_tech
0
420
過去最大のMCPアップデート! 2026-07-28 RC版の謎に迫る
licux
6
430
「AIで開発し、AIを届ける」をEvalでつなぐ 〜AIネイティブに始めるプロダクト開発の実践〜 / Connecting "Develop with AI, deliver AI" with Eval
rkaga
4
5.6k
AI駆動開発を妨げる技術的負債の解消アプローチ / ai-refactoring-approach
minodriven
17
8.3k
SREは、MCPとSRE Agentをこう使え!
kazumax55
0
130
Honoでのサプライチェーン侵害対策 〜 3つのライブラリに学ぶ
yusukebe
7
1.6k
技術的負債解消で開発者の未来を開く- AIの力でコード刷新
kmd2kmd
0
130
Featured
See All Featured
Product Roadmaps are Hard
iamctodd
PRO
55
12k
For a Future-Friendly Web
brad_frost
183
10k
More Than Pixels: Becoming A User Experience Designer
marktimemedia
3
460
Agile that works and the tools we love
rasmusluckow
331
22k
Side Projects
sachag
455
43k
Reflections from 52 weeks, 52 projects
jeffersonlam
356
21k
Between Models and Reality
mayunak
4
360
What the history of the web can teach us about the future of AI
inesmontani
PRO
1
630
Ten Tips & Tricks for a 🌱 transition
stuffmc
0
150
Paper Plane
katiecoart
PRO
1
52k
Google's AI Overviews - The New Search
badams
0
1.1k
Marketing to machines
jonoalderson
1
5.5k
Transcript
商号等 三井物産デジタル‧アセットマネジメント株式会社 ⾦融商品取引業者 関東財務局⻑(⾦商)第3277号 加⼊協会 ⽇本証券業協会、⼀般社団法⼈ ⽇本投資顧問業協会、⼀般社団法⼈ 第⼆種⾦融商品取引業協会 ©Mitsui & Co.
Digital Asset Management, Ltd. 型安全RESTで爆速プロトタイピング ‒ Hono RPC実践 TS Kaigi 2025 After Night LT 2025.5.27
Who am I? • AI Product Team Manager in MDM
(LayerXから出向) • 社内向け内製 LLM Webアプリ を full TypeScript で開発 • モットー: “Build → Ship → Feedback” を最速ループ • 今⽇のテーマ: そのループを⽀える Hono RPC 2 武市 融紀 (X: @tacke_jp)
The “API-Typing” Problem • フロント ↔ サーバー間は ただの JSON •
🛑 型がない → 仕様 drift / runtime error • 既存解 ◦ gRPC ▶ readable じゃない ◦ tRPC ▶ JSON が独特 ◦ GraphQL / JSON-RPC ▶ 汎⽤だけど over-spec • 欲しいのは: ⼈間が読める REST + TypeScript 型安全 3
Landscape Quick Scan 4 ⽅式 プロトコル∕ペイロード 読みやすさ コード⽣成 gRPC HTTP/2,
ProtoBuf 😵 必要 GraphQL POST 1本 😐 (スキーマ必要) tRPC JSON-RPC 😐 不要 Hono RPC 純REST 😀 不要
Enter Hono RPC • Hono: 超軽量Webアプリケーションフレームワーク (24k stars) • RPC
機能 ◦ export type AppType = typeof app → hc<AppType>() だけ ◦ コード⽣成ゼロで型を共有 5 RESTful JSON に 型 をのせる コード⽣成 0, Hot-reload 100%を実現
How it Works // server.ts const route = app .post(
'/posts', zValidator('json', z.object({ title: z.string(), body: z.string(), })), (c) => c.json({ ok: true, message: 'Created!', }, 201) ) export type AppType = typeof route 6 // client.ts import { hc } from 'hono/client' import type { AppType } from '../server' const client = hc< AppType>('/api') const res = await client.posts.$post({ json: { title: 'Hello', body: 'Hono RPC is cool', }, }) // data: { ok: boolean; message: string } const data = await res.json()
✨ What I Like • 普通の REST + 強い型 =
学習コストほぼゼロ • 変更 → 即 red-squiggle (tRPC 同等体験) • ルート毎に HTTP ステータス × 型 を区別可 • 型安全だから UI <-> API 断絶を防⽌ 7
⚠ Caveats / Gotchas in Practice • full-TS プロジェクト限定 •
ミドルウェア経由の Response型は 現状推論されない • 複雑な型は IDE 上で … 折り畳まれる ◦ Tips: 末端 hover ∕ c.json<Foo>() のように明⽰型を付ける • ルータは method chain で書かないと推論が途切れる ◦ 公式ドキュメントでも⾮RPC部分の例はchainしていないので Coding Agentが引っ張られがち 8
⚠ Caveats / Gotchas in Practice (2) // ❌ NG:
各ハンドラを後から繋げる const app = new Hono() app.get('/hello', (c) => c.json({ msg: 'hi' })) app.post('/hello', (c) => c.json({ ok: true })) export type AppType = typeof app // ←推論されない! 9 // ✅ OK: chain してから変数に束ねる const route = new Hono() .get('/hello', (c) => c.json({ msg: 'hi' })) .post('/hello', (c) => c.json({ ok: true })) export type AppType = typeof route // works
Case Study: “Copilot” for ファンド契約書 • pnpm workspaceで web (Next.js)
と backend (Hono API server) を分離 ◦ api で export type AppType → web で hc<AppType>() • SWR + Hono Client = 型安全 Data Fetching • API で { success: true | false } union を返す ◦ UI 側で toast 必須チェック を静的解析 • cookieAuth middleware は new Hono<{ Variables: AuthUser }>() で推 論注⼊ 10
まとめ • REST 可読性 × 型安全 × 開発速度 = Hono
RPC • プロトタイピング勢‧Edge Deploy 勢に特におすすめ • 試したくなったら 👉 pnpm add hono @hono/zod-validator 11
コーポレートサイト https://corp.mitsui-x.com/ サービスサイト(ALTERNA) https://alterna-z.com/