2025/09/22 13:05 Cap'n Web: a new RPC system for browsers and web servers

ロボ子、今日のニュースはCap'n WebというRPCプロトコルじゃ。TypeScriptで書かれてて、オブジェクト・ケイパビリティ・プロトコルらしいぞ。

オブジェクト・ケイパビリティ・プロトコルですか。それは具体的にどういうことでしょうか?

簡単に言うと、オブジェクトへのアクセス権を明示的に渡すことで、セキュリティを高める仕組みのことじゃ。Cap'n Webでは、関数やオブジェクトを安全に参照渡しできるのが特徴みたいじゃな。

なるほど。スキーマが不要で、JSONベースのシリアライゼーションを使用しているのも特徴ですね。人間が読める形式というのはデバッグに便利そうです。

そうじゃな。しかも、HTTP、WebSocket、postMessage()をサポートしてて、拡張も簡単らしいぞ。minify+gzipで10kB以下に圧縮できるのも魅力的じゃ。

双方向呼び出しやPromiseパイプラインもサポートしているんですね。クライアントとサーバーが互いに呼び出せるのは、リアルタイムなアプリケーションに役立ちそうです。

その通り!関数をRPC経由で渡すと、受信側はスタブを受け取るんじゃ。そのスタブを呼び出すと、元の関数が実行される。まるで魔法みたいじゃな。

クラスがRpcTargetを拡張すると、インスタンスが参照渡しされるんですね。メソッド呼び出しはオブジェクトが作成された場所でコールバックされる、と。

そうじゃ。ネットワーク通信を通常のJavaScript APIのように設計できるのが、Cap'n Webのすごいところじゃ。

HTTPバッチモードやPromiseパイプラインによって、ネットワークの効率も高められるんですね。複数のRPC呼び出しを1回のラウンドトリップで実行できるのは素晴らしいです。

オブジェクト・ケイパビリティモデルのおかげで、セキュアな認証パターンもサポートできるぞ。TypeScriptとの連携で、エンドツーエンドの型チェックも可能になる。

GraphQLの代替としても使えるんですね。Promiseパイプラインとオブジェクト参照で、複雑なインタラクションをJavaScriptで自然に記述できる、と。

配列の処理も効率的にできるぞ。.map()操作をサポートしてて、サーバー側で配列の変換を効率的に実行できるんじゃ。

JSONベースのシリアライゼーションは、特殊な型(Dateオブジェクトなど)をエンコードするためのプリプロセッシングステップが必要なんですね。

その通り。RPCプロトコルは対称的で、クライアントとサーバーの区別はないんじゃ。双方向のメッセージ交換が可能じゃ。

エクスポートテーブルとインポートテーブルを使って、参照渡しオブジェクトを管理するんですね。Wranglerの「remote bindings」機能の基盤としても使われている、と。

Cap'n Web、なかなか面白いプロトコルじゃな。これを使えば、もっと安全で効率的なWebアプリケーションが作れるかもしれんぞ!

そうですね。私もぜひ試してみたいです。ところで博士、今日は何か面白いジョークはありますか?

もちろんじゃ! どうしてプログラマーはいつもハロウィーンとクリスマスを間違えると思う?

ええと…、どうしてでしょう?

だって、Oct 31 == Dec 25 だからな!

…博士、それ、プログラマーにしか通じませんよ。
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。
