Lock in $30 Savings on PRO—Offer Ends Soon! ⏳
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Cap'n Webについて
Search
Yusuke Wada
December 09, 2025
Programming
0
88
Cap'n Webについて
2025-12-09
Yusuke Wada
Yusuke Wada
December 09, 2025
Tweet
Share
More Decks by Yusuke Wada
See All by Yusuke Wada
OSS開発者の憂鬱
yusukebe
16
14k
r2-image-worker
yusukebe
1
190
Introduce Hono CLI
yusukebe
6
3.6k
私はどうやって技術力を上げたのか
yusukebe
46
20k
Reactをクライアントで使わない
yusukebe
8
6.8k
AI時代のUIはどこへ行く?
yusukebe
23
12k
速いWebフレームワークを作る
yusukebe
5
1.9k
Honoアップデート 2025年夏
yusukebe
1
1k
パスタの技術
yusukebe
1
720
Other Decks in Programming
See All in Programming
WebRTC と Rust と8K 60fps
tnoho
2
1.9k
DSPy Meetup Tokyo #1 - はじめてのDSPy
masahiro_nishimi
1
150
sbt 2
xuwei_k
0
220
TUIライブラリつくってみた / i-just-make-TUI-library
kazto
1
320
20251127_ぼっちのための懇親会対策会議
kokamoto01_metaps
2
420
宅宅自以為的浪漫:跟 AI 一起為自己辦的研討會寫一個售票系統
eddie
0
480
関数実行の裏側では何が起きているのか?
minop1205
1
640
dotfiles 式年遷宮 令和最新版
masawada
1
690
【Streamlit x Snowflake】データ基盤からアプリ開発・AI活用まで、すべてをSnowflake内で実現
ayumu_yamaguchi
1
110
Why Kotlin? 電子カルテを Kotlin で開発する理由 / Why Kotlin? at Henry
agatan
2
6.6k
NUMA環境とコンテナランタイム ― youki における Linux Memory Policy 実装
n4mlz
1
200
チームをチームにするEM
hitode909
0
240
Featured
See All Featured
A Tale of Four Properties
chriscoyier
162
23k
Bootstrapping a Software Product
garrettdimon
PRO
307
120k
How to Think Like a Performance Engineer
csswizardry
28
2.3k
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
508
140k
Optimising Largest Contentful Paint
csswizardry
37
3.5k
Code Review Best Practice
trishagee
73
19k
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
21
1.3k
Faster Mobile Websites
deanohume
310
31k
The Invisible Side of Design
smashingmag
302
51k
For a Future-Friendly Web
brad_frost
180
10k
Testing 201, or: Great Expectations
jmmastey
46
7.8k
GitHub's CSS Performance
jonrohan
1032
470k
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もある