Workers — WebSocket のバイナリメッセージが既定で Blob として配信されるようになりました
Key Points
- 既定がBlobに変更
- ws.binaryTypeでArrayBufferへ戻せる
- Durable ObjectはArrayBufferのまま
Summary
Cloudflare Workers の WebSocket で受信したバイナリフレームは、既定で event.message の event.data に Blob として渡されるようになりました(WebSocket 仕様およびブラウザと一致)。これまでは ArrayBuffer が既定でした。変更は互換性日が 2026-03-17 以降の Workers に対して websocket_standard_binary_type フラグ経由で有効になっています。Durable Object の hibernatable WebSocket webSocketMessage ハンドラは影響を受けず、引き続き ArrayBuffer を受け取ります。
Key Points
-
変更点:
- バイナリフレームは既定で Blob として配信されます。
-
互換性:
- 対象は compatibility date >= 2026-03-17(
websocket_standard_binary_typeフラグ)。
- 対象は compatibility date >= 2026-03-17(
-
影響範囲:
instanceof ArrayBufferによる判定をしている Worker はフレームを見逃す可能性があります。Blob を想定していない処理は修正が必要です。
-
個別対応(ソケット単位):
-
各 WebSocket で
binaryTypeを設定してからaccept()を呼ぶと ArrayBuffer 配信に戻せます。const resp = await fetch("https://example.com", { headers: { Upgrade: "websocket" } }); const ws = resp.webSocket; // ArrayBuffer 配信へ戻す(accept 前に設定) ws.binaryType = "arraybuffer"; ws.accept(); ws.addEventListener("message", async (event) => { if (typeof event.data === "string") { // テキストフレーム } else { // event.data は ArrayBuffer(binaryType 設定時) const buf = await event.data.arrayBuffer(); // バッファ処理 } });
-
-
全体対応(Worker 全体):
- Wrangler 設定に
no_websocket_standard_binary_typeフラグを追加すると、Worker 全体で既定を ArrayBuffer に維持できます。
- Wrangler 設定に
Developer checklist
instanceof ArrayBufferや直接 ArrayBuffer を想定した処理を検索し、Blob も扱うように修正するか、ソケット作成時にws.binaryType = "arraybuffer"を設定する。- Durable Object の
webSocketMessageは変更不要(引き続き ArrayBuffer)。 - すぐに移行できない場合は Wrangler の
no_websocket_standard_binary_typeフラグで従来動作を維持する。