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
Cap'n Webについて
Search
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
Yusuke Wada
December 09, 2025
Programming
350
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
1.9k
Webフレームワークの ベンチマークについて
yusukebe
0
200
AI時代のUIはどこへ行く?その2!
yusukebe
22
7.9k
Dynamic Workersについて
yusukebe
2
730
飯MCP
yusukebe
0
650
へんな働き方
yusukebe
6
3.1k
OSS開発者の憂鬱
yusukebe
17
33k
r2-image-worker
yusukebe
1
280
Introduce Hono CLI
yusukebe
7
4.2k
Other Decks in Programming
See All in Programming
The Bowling Game- From Imperative to Functional Programming - Part 1
philipschwarz
PRO
0
340
えっ!!コードを読まずに開発を!?
hananouchi
0
230
Claude Opus 4.6以後の受託開発エンジニアの変化(Claude Code開発ノウハウ大公開スペシャルbyクラスメソッド)
iidatakuma
1
840
【やさしく解説 設計編・中級 #6】良いアーキテクチャとは ~ 一本の登り道の、行き先 ~
panda728
PRO
0
180
AI時代、エンジニアはどう育つのか -未経験エンジニアの成長を間近で見て考えたこと-
thasu0123
0
140
act2-costs.pdf
sumedhbala
0
120
どこまでゆるくて許されるのか
tk3fftk
0
520
Terraform標準の組織で AWS CDKをどう使うか
mu7889yoon
1
350
ITヒヤリハットを整理してみた ~ライフサイクルと原因から考える再発防止策~
koukimiura
1
110
初めてのKubernetes 本番運用でハマった話
oku053
0
130
【やさしく解説 設計編 #0】DDDのコード、読めるのに分からない人へ
panda728
PRO
2
270
音楽のための関数型プログラミング言語mimiumにおける多段階計算の活用
tomoyanonymous
1
350
Featured
See All Featured
Joys of Absence: A Defence of Solitary Play
codingconduct
1
420
Connecting the Dots Between Site Speed, User Experience & Your Business [WebExpo 2025]
tammyeverts
11
970
The agentic SEO stack - context over prompts
schlessera
0
850
The Hidden Cost of Media on the Web [PixelPalooza 2025]
tammyeverts
2
380
技術選定の審美眼(2025年版) / Understanding the Spiral of Technologies 2025 edition
twada
PRO
118
120k
The B2B funnel & how to create a winning content strategy
katarinadahlin
PRO
1
420
State of Search Keynote: SEO is Dead Long Live SEO
ryanjones
0
220
Building a Modern Day E-commerce SEO Strategy
aleyda
45
9.1k
sira's awesome portfolio website redesign presentation
elsirapls
0
310
Design of three-dimensional binary manipulators for pick-and-place task avoiding obstacles (IECON2024)
konakalab
0
490
Self-Hosted WebAssembly Runtime for Runtime-Neutral Checkpoint/Restore in Edge–Cloud Continuum
chikuwait
0
660
Paper Plane (Part 1)
katiecoart
PRO
1
9.8k
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もある