ClaudeCloudflare Developer Platform2026/04/21 0:00

Workers - WebSocket binary messages now delivered as Blob by default

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

元記事

Quick Digest

要約

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

claudejamodel: claude-haiku-4-5

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

Key Points

  • WebSocket バイナリメッセージが Blob デフォルト配信に変更
  • 既存コードの instanceof ArrayBuffer チェックが失敗する可能性
  • binaryType プロパティで配信形式を制御可能

Summary

Cloudflare Workers の WebSocket でバイナリフレームがデフォルトで Blob オブジェクトとして配信されるようになりました。これは WebSocket 仕様および標準的なブラウザの動作に準拠しています。

Key Points

  • バイナリフレームは従来の ArrayBuffer から Blob に変更
  • 互換性日付 2026-03-17 以降の Workers に適用(websocket_standard_binary_type フラグ経由)
  • binaryType プロパティで WebSocket ごとに配信タイプを制御可能
  • 既存コードで instanceof ArrayBuffer チェックを使用している場合は修正が必要
  • ArrayBuffer での配信に戻すには、accept() 呼び出し前に ws.binaryType = "arraybuffer" を設定
  • Wrangler 設定に no_websocket_standard_binary_type フラグを追加することで従来の動作を維持可能
  • Durable Object の hibernatable WebSocket は引き続き ArrayBuffer で配信

Full Translation

翻訳

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

claudejamodel: claude-haiku-4-5

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

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

公開日: 2026年4月21日

カテゴリ: Workers

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

WebSocket の binaryType プロパティは、WebSocket ごとに配信タイプを制御します。この変更は、websocket_standard_binary_type 互換性フラグを通じて、2026-03-17 以降の互換性日付を持つ Workers で有効になっています。

重要な注意事項

この変更が公開された際にドキュメント化すべきでしたが、できていませんでした。ご迷惑をおかけして申し訳ございません。

Worker がバイナリ WebSocket メッセージを処理し、event.dataArrayBuffer であると想定している場合、フレームは代わりに Blob として到着します。単純な instanceof ArrayBuffer チェックは、すべてのフレームをサイレントにドロップします。

ArrayBuffer 配信への復帰

accept() を呼び出す前に binaryType を割り当てることで、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 {
    // event.data は ArrayBuffer です (上記で binaryType を設定したため)。
  }
});

Wrangler 設定での設定

まだ移行する準備ができておらず、Worker のすべての WebSocket に対してデフォルトとして ArrayBuffer を保持したい場合は、Wrangler 設定ファイルに no_websocket_standard_binary_type フラグを追加してください。

Durable Object への影響

この変更は、Durable Object の hibernatable WebSocket webSocketMessage ハンドラには影響しません。引き続きバイナリデータは ArrayBuffer として受信されます。

詳細情報

詳細については、WebSocket バイナリメッセージ を参照してください。