Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Cloudflare Workers Durable Objects

Avatar for Yugo Yugo
May 31, 2025
220

Cloudflare Workers Durable Objects

Cloudflare Workers Durable Objectsについて
全く触れたことがない人が概要を知っていただくことで、これからの技術選定に役立てたり
個人開発に活かしたりすることができるように作っています。

Avatar for Yugo

Yugo

May 31, 2025
Tweet

Transcript

  1. 早速ですが、Cloudflare 使ってますでしょうか Cloudflare Workers Durable Objects 5 概念 Cloudflare について

    プラットフォームについて Workers について Durable Objects について 実践 デモ 実装 まとめ
  2. 二つのプラットフォーム Pages Workers Cloudflare Workers Durable Objects 6 概念 Cloudflare

    について プラットフォームについて Workers について Durable Objects について 実践 デモ 実装 まとめ
  3. Cloudflare workers とは 特徴: V8 エンジンで動作するサーバーレス実行環境 エッジでJavaScript/TypeScript を実行 リクエストを最寄りのエッジで即座に処理 メリット:

    超低レイテンシー 自動スケーリング サーバー管理不要 Cloudflare Workers Durable Objects 7 概念 Cloudflare について プラットフォームについて Workers について Durable Objects について 実践 デモ 実装 まとめ
  4. Durable Objects というものがあります Cloudflare Workers Durable Objects 9 概念 Cloudflare

    について プラットフォームについて Workers について Durable Objects について 実践 デモ 実装 まとめ
  5. Cloudflare Durable Objects の特徴 グローバルな一貫性: 分散環境での状態管理 トランザクショナルな処理 ステートとビジネスロジックの保持 websocket による通信

    Cloudflare Workers Durable Objects 10 概念 Cloudflare について プラットフォームについて Workers について Durable Objects について 実践 デモ 実装 まとめ
  6. アプリ内の Durable Objects の役割 メッセージの永続化 ユーザーセッション管理 ルーム一覧の管理 ルームの管理 最大ルーム数の制御 Cloudflare

    Workers Durable Objects 12 概念 Cloudflare について プラットフォームについて Workers について Durable Objects について 実践 デモ 実装 まとめ
  7. Workers 実装の前提知識 export class RoomManager implements DurableObject { private rooms:

    Room[] = []; private readonly MAX_ROOMS = 5; async fetch(request: Request) { // ルーム管理のロジック if (url.pathname.startsWith('/api/rooms')) { // /api/rooms へのルーティング処理 } } } Cloudflare Workers Durable Objects 13 概念 Cloudflare について プラットフォームについて Workers について Durable Objects について 実践 デモ 実装 まとめ
  8. Durable Objects のストレージAPI 基本的なストレージメソッド hibernation 時での永続化 // データの取得 const counter

    = await this.state.storage.get<number>("counter") || 0; // データの保存 await this.state.storage.put("counter", counter + 1); // データの削除 await this.state.storage.delete("tempData"); // 複数データの一括取得 const { profile, settings } = await this.state.storage.get(["profile", "settings"]); Cloudflare Workers Durable Objects 14 概念 Cloudflare について プラットフォームについて Workers について Durable Objects について 実践 デモ 実装 まとめ
  9. トランザクションとアラーム // トランザクション処理 await this.state.storage.transaction(async txn => { const user

    = await txn.get("user"); if (user?.credits > 0) { user.credits--; await txn.put("user", user); return true; // 成功 } return false; // 失敗 }); // アラームの設定(定期実行) const nextDay = new Date(Date.now() + 86400000); await this.state.storage.setAlarm(nextDay); Cloudflare Workers Durable Objects 15 概念 Cloudflare について プラットフォームについて Workers について Durable Objects について 実践 デモ 実装 まとめ
  10. デプロイ // wrangler.toml ... [durable_objects] bindings = [ { name

    = "CHATROOM", class_name = "ChatRoom" } ] [[migrations]] tag = "v3" new_sqlite_classes = ["ChatRoom"] ... Cloudflare Workers Durable Objects 16 概念 Cloudflare について プラットフォームについて Workers について Durable Objects について 実践 デモ 実装 まとめ
  11. 注意点 責務の持たせすぎ 神コントローラー化 あくまで、一つのDurable Objects に対して 一つのState に対する責務に留めた方が良いかもしれない 多種多様なState を一つのアプリケーションで扱う場合は特に

    Cloudflare Workers Durable Objects 17 概念 Cloudflare について プラットフォームについて Workers について Durable Objects について 実践 デモ 実装 まとめ
  12. まとめ Cloudflare Workers エッジでの超低レイテンシーサーバーレス実行環境 Durable Objects グローバル一意のステート管理とWebSocket 通信を実現 強力なストレージAPI 永続化のためのAPI

    紹介 実用例 チャットアプリでのメッセージ管理・セッション管理・ルーム管理 ご清聴ありがとうございました! Cloudflare Workers Durable Objects 18 概念 Cloudflare について プラットフォームについて Workers について Durable Objects について 実践 デモ 実装 まとめ