OpenAICloudflare Developer Platform2026/04/21 0:00

Workers - WebSocket binary messages now delivered as Blob by default

要点だけを先に読めるように短く再構成したセクションです。

元記事

Quick Digest

要約

要点だけを先に読めるように短く再構成したセクションです。

openaijamodel: gpt-5-mini-2025-08-07

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 フラグ)。
  • 影響範囲:

    • 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 に維持できます。

Developer checklist

  • instanceof ArrayBuffer や直接 ArrayBuffer を想定した処理を検索し、Blob も扱うように修正するか、ソケット作成時に ws.binaryType = "arraybuffer" を設定する。
  • Durable Object の webSocketMessage は変更不要(引き続き ArrayBuffer)。
  • すぐに移行できない場合は Wrangler の no_websocket_standard_binary_type フラグで従来動作を維持する。

Full Translation

翻訳

原文の流れを保ったまま読める翻訳セクションです。

openaijamodel: gpt-5-mini-2025-08-07

Workers - WebSocket バイナリメッセージがデフォルトで Blob として配信されるようになりました

概要

WebSocket で受信したバイナリフレームは、デフォルトで message イベントに Blob ↗ オブジェクトとして渡されるようになりました。これは WebSocket の仕様 ↗ および標準ブラウザの動作に合わせた変更です。以前はバイナリフレームは常に ArrayBuffer ↗ として配信されていました。

binaryType プロパティは、個々の WebSocket ごとの配信形式を制御します。

影響を受ける Workers

この変更は、互換性日付が 2026-03-17 以降に設定されている Workers に対して、websocket_standard_binary_type 互換性フラグを通じて有効になっています。

文書化が遅れたことをお詫びします。もしあなたの Worker がバイナリ WebSocket メッセージを扱い event.data を ArrayBuffer と仮定している場合、フレームは Blob として届き、単純に instanceof ArrayBuffer で判定していると全てのフレームが無視されてしまいます。

ArrayBuffer 配信に戻す方法

WebSocket を受け入れる前に binaryType を設定することで、その WebSocket に限り ArrayBuffer 配信に戻せます(互換性フラグに関係なく動作します)。例:

const resp = await fetch("https://example.com", {
  headers: { Upgrade: "websocket" },
});
const ws = resp.webSocket;
// この WebSocket を ArrayBuffer 配信に戻す
ws.binaryType = "arraybuffer";
ws.accept();
ws.addEventListener("message", (event) => {
  if (typeof event.data === "string") {
    // テキストフレーム
  } else {
    // 上で binaryType を設定したので、event.data は ArrayBuffer です
  }
});

Worker 全体で ArrayBuffer をデフォルトに保つ方法

まだ移行の準備ができておらず、Worker 内の全ての WebSocket で ArrayBuffer をデフォルトにしたい場合は、wrangler の設定ファイルに no_websocket_standard_binary_type フラグを追加してください。例:

# wrangler.toml
compatibility_flags = ["no_websocket_standard_binary_type"]

Durable Object の扱い

この変更は、Durable Object の hibernatable WebSocket webSocketMessage ハンドラには影響しません。そちらは引き続きバイナリデータを ArrayBuffer として受け取ります。

参照

  • 詳細は WebSockets binary messages を参照してください。