Slide 1

Slide 1 text

Cloudflare Durable Objects について Cloudflare Workers Durable Objects 1

Slide 2

Slide 2 text

自己紹介 名前 Yugo Ibuki ( 伊吹祐剛) 興味 英語 / チームビルディング 趣味 カラオケ Cloudflare Workers Durable Objects 2

Slide 3

Slide 3 text

目的 今回のLT ではDurable Objects を知っていただくことで、 今後の開発の技術選定の選択肢が一つ増えると嬉しいです Cloudflare Workers Durable Objects 3

Slide 4

Slide 4 text

アジェンダ 概念 Cloudflare について プラットフォームについて Workers について Durable Objects について 実践 デモ 実装 まとめ Cloudflare Workers Durable Objects 4

Slide 5

Slide 5 text

早速ですが、Cloudflare 使ってますでしょうか Cloudflare Workers Durable Objects 5 概念 Cloudflare について プラットフォームについて Workers について Durable Objects について 実践 デモ 実装 まとめ

Slide 6

Slide 6 text

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

Slide 7

Slide 7 text

Cloudflare workers とは 特徴: V8 エンジンで動作するサーバーレス実行環境 エッジでJavaScript/TypeScript を実行 リクエストを最寄りのエッジで即座に処理 メリット: 超低レイテンシー 自動スケーリング サーバー管理不要 Cloudflare Workers Durable Objects 7 概念 Cloudflare について プラットフォームについて Workers について Durable Objects について 実践 デモ 実装 まとめ

Slide 8

Slide 8 text

エッジなのでリクエストベースの実行になってしまう 外部ストレージ(DB など)に データを持つようなアプリケーションであれば特に問題ないが 接続数などのリアルタイムな変更に対して弱い。 例えば ゲーム中の状態 チャットのログやアクセス状況 オークション・入札システム 同時購入時の在庫切れ防止のための在庫管理 Cloudflare Workers Durable Objects 8 概念 Cloudflare について プラットフォームについて Workers について Durable Objects について 実践 デモ 実装 まとめ

Slide 9

Slide 9 text

Durable Objects というものがあります Cloudflare Workers Durable Objects 9 概念 Cloudflare について プラットフォームについて Workers について Durable Objects について 実践 デモ 実装 まとめ

Slide 10

Slide 10 text

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

Slide 11

Slide 11 text

今回作成したのはチャットアプリ Cloudflare Workers Durable Objects 11 概念 Cloudflare について プラットフォームについて Workers について Durable Objects について 実践 デモ 実装 まとめ

Slide 12

Slide 12 text

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

Slide 13

Slide 13 text

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 について 実践 デモ 実装 まとめ

Slide 14

Slide 14 text

Durable Objects のストレージAPI 基本的なストレージメソッド hibernation 時での永続化 // データの取得 const counter = await this.state.storage.get("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 について 実践 デモ 実装 まとめ

Slide 15

Slide 15 text

トランザクションとアラーム // トランザクション処理 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 について 実践 デモ 実装 まとめ

Slide 16

Slide 16 text

デプロイ // 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 について 実践 デモ 実装 まとめ

Slide 17

Slide 17 text

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

Slide 18

Slide 18 text

まとめ Cloudflare Workers エッジでの超低レイテンシーサーバーレス実行環境 Durable Objects グローバル一意のステート管理とWebSocket 通信を実現 強力なストレージAPI 永続化のためのAPI 紹介 実用例 チャットアプリでのメッセージ管理・セッション管理・ルーム管理 ご清聴ありがとうございました! Cloudflare Workers Durable Objects 18 概念 Cloudflare について プラットフォームについて Workers について Durable Objects について 実践 デモ 実装 まとめ