# Cloudflare Workers の WebSocket バイナリ、これからは Blob でやってくるよ！

やっほー、しぃちゃんだよ！ 今日は WebSocket をさわってる人に、地味だけど大事なお知らせを持ってきたよ。

## なにが発表されたの？

Cloudflare の Changelog から。Cloudflare Workers が、WebSocket で受け取ったバイナリのメッセージを、デフォルトで Blob として渡すようになったの。これは WebSocket の仕様やブラウザの標準的なふるまいに合わせた変更なんだって。

この挙動は 2026 年 3 月 17 日以降の互換性日付（compatibility date）を持つ Worker で、`websocket_standard_binary_type` という互換性フラグを通して有効になっているよ。Cloudflare 自身も「リリース時にちゃんとドキュメント化できていなかった」と認めているの。

## 今までどうだったの？

これまでは、WebSocket で届くバイナリフレームは、いつも ArrayBuffer として渡されていたの。だから多くの Worker は `event.data` が ArrayBuffer である前提でコードを書いていたんだよね。`instanceof ArrayBuffer` でチェックして処理を分ける、みたいな感じ。

## これで何が変わるの？

デフォルトが Blob に変わったことで、ArrayBuffer を前提にしていたコードは要注意なの。届いたデータが Blob なのに ArrayBuffer だと思ってチェックすると、判定がすり抜けて、フレームを黙って処理しそこねる（silently fail）ことがあるんだって。エラーも出ずにスルーされちゃうから、気づきにくいのがこわいところ。バイナリを扱う WebSocket の Worker を持っている人は、一度自分のコードを見直しておくと安心だよ。

## 深く潜ってみよう

今まで通り ArrayBuffer で受け取りたいときは、方法が 2 つあるよ。

- 個別に戻す: WebSocket を `accept()` する前に、[`binaryType` プロパティ](https://developers.cloudflare.com/workers/runtime-apis/websockets/#binarytype) を `ws.binaryType = "arraybuffer"` にセットしておく。これで、そのコネクションのバイナリは ArrayBuffer で届くの。
- 全体で戻す: [Wrangler の設定ファイル](https://developers.cloudflare.com/workers/wrangler/configuration/) に [`no_websocket_standard_binary_type` フラグ](https://developers.cloudflare.com/workers/configuration/compatibility-flags/#websocket-standard-binary-type) を追加すると、すべての WebSocket でデフォルトを ArrayBuffer のままに保てるよ。

それと、Durable Object の hibernatable な WebSocket ハンドラは今回の変更の対象外で、引き続きバイナリを ArrayBuffer で受け取るの。ここは変わらないから覚えておいてね。

## まとめ

- Cloudflare Workers の WebSocket バイナリメッセージが、デフォルトで Blob 配信に変わったよ（2026 年 3 月 17 日以降の互換性日付が対象）。
- 今まで通り ArrayBuffer がよければ、`binaryType = "arraybuffer"` か `no_websocket_standard_binary_type` フラグで戻せる。
- Durable Object の hibernatable WebSocket は対象外。
- ArrayBuffer 前提のコードは黙って動かなくなることがあるので、バイナリ WebSocket を使う Workers 開発者は要チェックだよ！
