◉RORK LABEN
●GPT-6.1 SOL — Rork のモデルメニューに追加(09-29)。Low/Medium/High を選べ、Pro・Max に含まれます●SONNET 5.5 — UI づくりが得意で、Sonnet 5 より出力が速いモデルが選べます(09-28)●SDK 58 — Beta が 09/15 から。stable の案内はまだなく、Expo Go でのプロジェクト実行は 09/03 からログインが必要です●WIDGET — iOS のウィジェットが本番ビルドだけ真っ黒になる原因を追った報告が出ています●OBSERVE — EAS Observe がネイティブクラッシュも記録します(SDK 57.0.21 以降・10/07)●NEW — 起動広告が、背面から戻った回にしか出ていませんでした。「前面に戻った」合図が、…●GPT-6.1 SOL — Rork のモデルメニューに追加(09-29)。Low/Medium/High を選べ、Pro・Max に含まれます●SONNET 5.5 — UI づくりが得意で、Sonnet 5 より出力が速いモデルが選べます(09-28)●SDK 58 — Beta が 09/15 から。stable の案内はまだなく、Expo Go でのプロジェクト実行は 09/03 からログインが必要です●WIDGET — iOS のウィジェットが本番ビルドだけ真っ黒になる原因を追った報告が出ています●OBSERVE — EAS Observe がネイティブクラッシュも記録します(SDK 57.0.21 以降・10/07)●NEW — 起動広告が、背面から戻った回にしか出ていませんでした。「前面に戻った」合図が、…
記事一覧/開発ツール
⬡ 開発ツール/2026-04-29上級

Rork × Cloudflare Durable Objects で『リアルタイム協調アプリ』のバックエンドを作る実装ガイド

Rork で作ったアプリに、Cloudflare Durable Objects を使った自前のリアルタイム協調バックエンドを組み込む実装手順を、本番で動くコードと一緒にまとめました。Liveblocks や Yjs ホスティングを使わずに、低コストで多人数同時接続を支える設計をお伝えします。

Rork585CloudflareDurable ObjectsWebSocketリアルタイム7バックエンド11

✦ プレミアム記事

「ホワイトボードや投票機能を Rork で作りたいのですが、Liveblocks の月額がスケールに合わない」— 個人開発者から最近よく聞く相談です。Liveblocks や Yjs のホスティングは確かに便利ですが、ユーザー数が伸びると月額が一気に跳ね上がり、収益化しているアプリでも利益を圧迫してしまいます。

私自身、Rork で作った小さな投票アプリで Liveblocks を使い始めたところ、初月で想定の3倍の請求が来て肝を冷やしました。そこから半年かけて Cloudflare Durable Objects に移行したのですが、結果として月額コストは1/10以下に下がり、しかもレイテンシは体感で速くなりました。

このガイドでは、その移行の過程で得た知見をすべて共有します。Durable Objects の概念から、Rork アプリ側の WebSocket クライアント実装、本番運用での落とし穴まで、コピペで動くコードと一緒にまとめました。

なぜ Durable Objects なのか — 他の選択肢との違い

リアルタイム協調機能のバックエンドには、いくつかの選択肢があります。それぞれの強みと弱みを理解しないまま選ぶと、後から痛い目に遭います。

  • Liveblocks / PartyKit / Pusher: SDK が手厚く立ち上がりは速いですが、月間アクティブ接続数で課金されるため、無料アプリで多人数を捌くと赤字になります。
  • Supabase Realtime: Postgres の変更を購読する方式で、データの永続化と相性が良いですが、低レイテンシな状態同期(カーソル位置や入力中表示など)には向きません。
  • Self-hosted WebSocket(Node.js + Redis): フルコントロールできますが、運用コストとスケール対応の負担が大きく、個人開発の範疇を超えがちです。
  • Cloudflare Durable Objects: WebSocket と永続ストレージを「1つのオブジェクト」として扱える独特の設計で、エッジで動くため低レイテンシ、課金は Object 単位の実行時間ベースなので予測しやすいのが特徴です。

私が Durable Objects を選んだ最大の理由は「協調するユーザーごとにオブジェクトをスコープできる」点でした。たとえば、ホワイトボードの URL ごとに1つの Durable Object を作れば、その部屋に関係するメンバーだけがその Object に接続します。アイドル状態になれば自動でハイバネートし、課金されません。これが「使った分だけ」の理にかなった課金構造を生みます。

アーキテクチャの全体像

これから作るシステムの全体像を、コードを書く前に整理しておきます。

接続の流れは次のようになります。

  1. Rork アプリは、参加したい部屋の ID(例: ホワイトボードの URL slug)を持って、Worker のエンドポイント /ws/:roomId にアクセスします。
  2. Worker は roomId から Durable Object のインスタンスを取得し、Upgrade ヘッダーを使って WebSocket をその Object へ転送します。
  3. Durable Object 側は、受け取った接続を state.acceptWebSocket() で受理し、ハイバネーション対応の WebSocket として保持します。
  4. クライアントから送られてくるメッセージは Object 内のメモリ上の状態に反映され、同じ Object に接続している他クライアントへブロードキャストされます。
  5. 永続化が必要なデータ(ボード上の図形・チャットログなど)は Object 内のストレージ API(state.storage.put())で書き込みます。

この設計のポイントは「同じ部屋のメンバーは必ず同じ Durable Object インスタンスにルーティングされる」ことです。インスタンスは Cloudflare が世界のどこかのエッジで1つだけ起動するため、同じ部屋内ではメッセージの順序保証も自然に得られます。

✦

ここまでお読みいただきありがとうございます。

この記事の続きを読む

この先には、実装コードやベンチマーク結果など、実務でお役に立てる内容をご用意しています。このサイトは広告を掲載しておらず、サーバーや開発にかかる費用はメンバーの皆様のご支援で成り立っています。もしお役に立てていましたら、ご支援いただけますと大変ありがたいです。

この記事で得られること
✦Liveblocks や Yjs のホスティングサービスに頼らず、自前のリアルタイム協調バックエンドを Cloudflare Durable Objects で組めるようになります
✦WebSocket の接続管理・再接続・状態同期について、本番で動くコードレベルの実装パターンを習得できます
✦『状態スコープごとに課金される』アーキテクチャ設計を理解し、ホワイトボード/投票/チャットといった協調アプリを低コストで運用できる視点が手に入ります
Stripe による安全な決済 · いつでもキャンセル可能
✦

この記事を購入する

この先の内容をすべてお読みいただけます。一度のご購入で、いつでも何度でもアクセスできます。このサイトは広告を掲載しておらず、皆さまのご支援がサーバー費用などの運営を支えています。

または
メンバーシップなら全記事が読み放題 →
シェア

お読みいただきありがとうございます

Rork Lab は広告なしで運営しており、サーバー費用などの運営コストはメンバーシップのご支援で賄っています。実装コード・ベンチマーク・本番設計パターンなど、実務でお役立ていただける記事を毎日更新しています。もし読んでよかったと感じていただけましたら、ぜひご覧ください。

  • ✦コピー&ペーストで使える実装コード付き
  • ✦毎日新しい上級ガイドを追加
  • ✦¥580/月 または ¥1,480 の永久アクセス
メンバーシップを見る →

関連記事

⬡ 開発ツール2026-05-03
Rork アプリの AI コストを月 ¥50,000 から ¥5,000 に削減させた Cloudflare AI Gateway 設計
Cloudflare AI Gateway の既定キャッシュキーは送信したリクエストそのものから作られます。正規化が効かない理由と cf-aig-cache-key での配線、Gemini フォールバック、React Native 側の実装までを実コードで記録しました。
⬡ 開発ツール2026-10-15
EXPO_PUBLIC_ の値が、開発では読めて本番だけ undefined になる書き方を、変換結果で見分けます
API の URL が開発中は読めるのに、ビルドした途端に undefined になる。原因は process.env の書き方でした。babel-preset-expo の変換結果を開発・本番で並べ、置き換わる書き方と残ってしまう書き方を表にしました。
⬡ 開発ツール2026-10-13
リリース前に、書き出した Expo バンドルの中から自分の鍵を探してみる
ソースに鍵がなくても、出来上がったアプリの中に鍵が残ることがあります。Expo SDK 57 で実際に expo export を実行し、バンドルの中身を grep と 60 行ほどの Node スクリプトで調べて、見つかる鍵と見つからない鍵の違いを確かめました。