Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Cap'n Webについて
Search
Yusuke Wada
December 09, 2025
Programming
430
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Cap'n Webについて
2025-12-09
Yusuke Wada
Yusuke Wada
December 09, 2025
More Decks by Yusuke Wada
See All by Yusuke Wada
Honoでのサプライチェーン侵害対策 〜 3つのライブラリに学ぶ
yusukebe
7
2.5k
Webフレームワークの ベンチマークについて
yusukebe
1
340
AI時代のUIはどこへ行く?その2!
yusukebe
22
8.8k
Dynamic Workersについて
yusukebe
2
830
飯MCP
yusukebe
0
770
へんな働き方
yusukebe
6
3.2k
OSS開発者の憂鬱
yusukebe
18
37k
r2-image-worker
yusukebe
1
330
Introduce Hono CLI
yusukebe
7
4.4k
Other Decks in Programming
See All in Programming
技術的負債を組織課題として解く-増えすぎたマイクロサービスとの戦い-
reimaru
1
2.6k
テストを司るデーモンに会いに行く 〜隔離した仮想マシンでテストを通すまで〜
h1d3mun3
1
600
App Intentsのビルドプロセスを支える技術
kntkymt
0
500
Rでドレミ/Do-Re-Mi_with_R
florets1
0
110
iOSDC Japan 2026 - Swiftで作って学ぼう!データベース自作入門
kaseken
2
450
RAG の “R” を Swift で覗いてみる 〜「意味から探す」検索の仕組み〜
nao_randd
0
100
IBM Bob Dojo #1 仕様駆動開発入門
oniak3ibm
PRO
0
330
wkhtmltopdfの次どうするか問題2026
willnet
2
1.8k
GemmaをJevのように使ってみる / Use Gemma like Jev
kishida
5
530
[Rails World 2026] Durable orchestration on Rails: from continuation to workflow
palkan
1
430
難しいけど、読めた。- OSSの入口に立った話。
sts11142
0
130
[2026-09-26]空論ジェネリックプロセス~テスト資産とAIで紡ぐ、再現可能なパフォーマンスチューニングの話~
tosite
0
250
Featured
See All Featured
Build your cross-platform service in a week with App Engine
jlugia
234
19k
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
12
1.3k
Reflections from 52 weeks, 52 projects
jeffersonlam
356
21k
Agile Actions for Facilitating Distributed Teams - ADO2019
mkilby
0
290
Principles of Awesome APIs and How to Build Them.
keavy
128
18k
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
360
31k
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
50
10k
The agentic SEO stack - context over prompts
schlessera
0
950
エンジニアに許された特別な時間の終わり
watany
109
250k
Design of three-dimensional binary manipulators for pick-and-place task avoiding obstacles (IECON2024)
konakalab
0
610
A brief & incomplete history of UX Design for the World Wide Web: 1989–2019
jct
2
520
Game over? The fight for quality and originality in the time of robots
wayneb77
1
300
Transcript
Cap'n Webについて
Me Yusuke Wada Web Application Developer Developer Advocate at Cloudflare
A founder of Bokete The Creator of Hono
Cap’n Web
Cap'n Webとは? • JavaScriptネイティブな RPC • capnwebというnpmパッケージがある • 作者がKenton Varda
◦ Cloudflare Workersの作者 • https://github.com/cloudflare/capnweb https://blog.cloudflare.com/capnweb-javascript-rpc-library/
Cap'n Webの特徴 • サーバーとブラウザで動作 • JavaScriptのメソッド呼び出し、オブジェクト操作ができる • HTTP、WebSocket、postMessage() で動作 •
メジャーなブラウザ、 Cloudflare Workers、Node.js、Denoで動作 ◦ Hono Adapterを使うと Bunでも • 依存なし、 10KB(minify+gzip) • TypeScriptによる型サポート
インストール
RPCであること • RESTやGraphQLを置き換えるかも • サーバサイド・クライアントを JavaScript/TypeScriptに統一したい時
RPCのイメージ - APIの定義 src/api.ts RpcTargetをextendsしたクラスをつくって関数を定義
RPCのイメージ - クライアントの呼び出し src/client.ts api.hello()で関数呼び出し
src/client.ts src/api.ts
TypeScriptの型サポート APIから型を取ってきてジェネリクスに渡す
サーバーサイドの実装 src/server.ts MyApiServerのインストールをnewWorkersRpcResponse()に渡す
動かし方 サーバーサイド Cloudflare Workers / Wranglerで起動 クライアントサイド コマンドライン / tsxで起動
2種類の呼び出し • バッチとWebSocket • API、サーバーの実装は変えなくてよい
バッチの基本 src/client-batch.ts newHttpBatchRpcSessionを使う
まとめてリクエストする src/client-batch.ts Promise.all()した時に初めてリクエストが飛ぶ
クライアント出力
サーバーログ 1度だけ!
おさらい
パイプライン - API src/api.ts getMyName()を追加
パイプライン - クライアント src/client-batch.ts await batch.hello()した時に初めてリクエストが飛ぶ Promise
クライアント出力
サーバーログ 1度だけ!
パイプライン • APIを変えずに Promiseをメソッドに渡せる • batch.hello()の時にawaitして初めてリクエストが飛ぶ • Cap’n WebのPromiseは「通常の Promise」ではない!
◦ メソッドチェーンをよしなにしてくれる
Cap’n Webのバッチの面白いところ • JavaScriptのネイティブな関数呼び出し • パイプラインを作って 1度のラウンドトリップで実行
map() - API src/api.ts
map() - クライアント src/client-batch.ts リスト操作をmap()で行う
クライアント出力
サーバーログ 1度だけ!
map() を活用する • 友達のリストを処理する ◦ 1度だけのラウンドトリップ • RESTやGraphQLに大きなアドバンテージ • APIを変えずに
1つのリクエストにすることができる
WebSocket - クライアント src/client-websocket.ts 使い方はさほど変わらない
クライアント出力 1秒経って
サーバーログ WebSocketコネクション
WebSocket • コネクションをはりっぱなし • チャットなどリアルタイム共有系で便利
Durable Objectsと一緒に使う • ステート管理をしたい • Cloudflare Workersの場合Durable Objectsが使える • JSRPCで使うRpcTargetがCap’n
WebのAPIに使える • Cap’n WebのWeb Socketクライアントからステート付きのオブジェクトに アクセスできる
None
既存のRPCとの比較 • JavaScript/TypeScriptのRPCライブラリは他にもある • tRPC • Hono RPC
JSネイティブに書ける 独自の書き方 バリデーションしている
冗長 Honoのアプリをそのままクライアントで利用できる TypeScriptの型 + fetchラッパー
実例 • Workers SDK • TanStack AIのExample ◦ https://github.com/TanStack/ai/tree/main/examples/ts-group-chat
Hono Adapter - インストール
Hono Adapter - コード例 src/server.ts Cloudflare Workers用 他にも同じインターフェースで Node.js/Deno/Bunに対応
まとめ • Cap’n Webの紹介 • JavaScriptネイティブのパイプライン • 1ラウンドトリップで呼び出し • Hono
Adapterもある