durable-objects
Cloudflare の Durable Objects のコードを書かせ、見直させる。チャットの部屋やユーザーごとに 1 つ持つ「状態を持つ部品」を、7 つの決まりと禁止事項で組ませる。細部は最新の公式文書を読みに行かせる
npx skills add cloudflare/skills/durable-objects入れる前にこのスキルがすること・注意点・SKILL.md の原文を確かめてください。解析は安全性の判定ではありません。
- インストール
- 116,001
- 実用度
- 82
- GitHub star
- 3,292
- 最終更新
- 2026/11/7
頼み方の例
そのままコピーして使えますdurable-objectsスキルを使って、この Worker の Durable Object のコードを見直してください。決まりと禁止事項に照らして、問題のある箇所と理由を一覧にしてください。コードはまだ書き換えないでください。
対象のファイルや状況は、ご自身の作業に合わせて置き換えてください。
このスキルがすること
SKILL.md の記述から機械的に抽出- 外部通信・シェル実行・ファイル操作の記述は見つかりませんでした
これは安全性の判定ではありません。 SKILL.md にそう書かれているという事実だけを並べています。実際に問題があるかは使い方と文脈で決まるため、当サイトでは断定しません。導入前に SKILL.md の原文を確認してください。
SKILL.md の規模
コードブロックの言語: jsonc、typescript
この解説は再確認中です。 2026年11月6日に原本(SKILL.md)が更新されており、以下の解説が現在の内容と合っていない可能性があります。最新の内容は GitHub の SKILL.md を確認してください。
いつ使うか
Cloudflare Workers で、状態を持つ処理を作りたいときに効きます。チャットの部屋、多人数のゲーム、共同編集、在庫や予約、ユーザーごとのデータ、WebSocket の接続などです。
Durable Objects は、1 つの名前に 1 つの実体が対応し、その中に保存領域を持つ仕組みです。
- 組み立ての決まり
- 7 つ
- 名指しされた禁止事項
- 5 つ
- 同梱ファイル(決まりの詳細・試験・Workers の設定)
- 3 件
本文が「使う・使わない」を分けている
| 使う | 使わない |
|---|---|
| 調整(チャットの部屋、ゲーム、共同編集) | 状態の要らない処理(普通の Worker で足りる) |
| 強い一貫性(在庫、予約、順番のあるゲーム) | 世界中に最大限ばらまきたいとき |
| 実体ごとの保存(テナントごと、ユーザーごと) | 互いに独立した大量の並列の要求 |
| 続く接続、実体ごとの予約した処理 | — |
7 つの決まり
- 調整の単位で分ける全体で 1 つにしない(部屋ごと、ゲームごと、ユーザーごと)
getByName()を使う同じ入力で同じ実体に行くようにする- 保存は SQLite移行の設定に
new_sqlite_classes - 初期化は作るときに
blockConcurrencyWhile()で表の準備だけをする - RPC のメソッドで呼ぶ
fetch()ではなく RPC のメソッドで呼ぶ(互換日付が 2024-04-03 以降) - 先に保存する先に保存し、あとで手元の値を更新する
- アラームは 1 つの実体に 1 つ予約した処理は 1 つだけ。
setAlarm()は前のものを置き換える
使わないほうがいいとき
- 状態の要らない API普通の Workers で足ります。本文も「使わない」側に挙げています
- Cloudflare 以外の実行環境Workers と Durable Objects に固有の書き方です
- ページの速さの改善同じ公開元の web-perf が、表示の速さを測って直すほうの担当です
表示の速さのほうは、同じ公開元の web-perf が担当です。
注意点
解析では見えない、公式文書の読み込みがある
SKILL.md の解析では、外部通信・シェル実行・ファイル操作の記述は見つかっていません。ただし本文は、細部をCloudflare の公式文書から取ってこいと指示していて、実際には developers.cloudflare.com を読みに行きます。
解析は、この地の文の指示を拾えていません。同梱ファイルは 3 件で、決まりの詳細、試験、Workers の設定の資料です。
「覚えている知識は古いかもしれない」が前提
同梱の資料も、書き方の細部は文書の側に置き、写さない方針です。
禁止事項が具体的
禁止事項は次の 5 つです。
- 1 つの実体で全部受ける全部の要求を 1 つの実体で受ける
- 要求のたびの
blockConcurrencyWhile()要求のたびにblockConcurrencyWhile()を使う - 手元の値だけに持つ大事な状態を手元の値だけに持つ
- 保存の間に
awaitを挟む関連する保存の間にawaitを挟む(まとめて書く性質が崩れる) - 外部への通信をまたいで持ち続ける外部への通信をまたいで
blockConcurrencyWhile()を持ち続ける
権限は実装している Worker に従う
Durable Objects には独自の役割や権限が無く、実装している Worker の権限に従う、と書かれています。監視やデータの閲覧の権限を渡す前に、最新の文書を確かめるよう指示しています。
インストール数
インストール数は約 6.5 万件です。同じリポジトリの 10 件は約 4.7 万〜8.1 万件で(2026-09-07 の上流集計)、1 件ずつ選ばれている形です。
インストール数の推移
日次で記録9月18日 〜 11月7日(49日分)
インストール数と 1 日あたりの増加は Skillselion が に集計した値です。上流の更新は数日おきなので、前日比ではありません。GitHub star と最終更新は に GitHub から取得しました。
併用すると強いスキル
cloudflare
「アップロードを受けたい」「裏で処理を回したい」といった要望から、Cloudflare のどの製品を組み合わせるかを選ばせる。97 行の対応表で製品と担当のスキルに振り分け、細部は公式文書を読みに行かせる
cloudflare-email-service
Cloudflare の Email Service で、取引メールの送信(Workers のバインディングか REST API)と、届いたメールの転送・返信・解析を組ませる。先にドメインの登録とバインディングを確かめさせ、細部は記憶ではなく最新の文書と型から取らせる
turnstile-spin
既存のフォームに Cloudflare Turnstile のボット対策を組み込ませる。部品の作成からサーバー側の検証、使い回した鍵が弾かれる確認まで通す
web-perf
サイトの表示の遅さを実測で調べさせる。Chrome DevTools で計測し、効果が 0 ミリ秒の改善は勧めさせない
よくある質問
実体の作り方はどれを使えばいいですか
本文の既定は、名前から決まる getByName("room-123") です。ID の文字列を保存しているなら idFromString()、新しく一意の ID が要るなら newUniqueId() を使い、その場合は ID と用途の対応を別に保存しておきます。
試験はどう書きますか
Cloudflare の Vitest の連携を使います。同梱の資料は、RPC の試験と HTTP の経路の試験を分けること、1 つの実体が呼び出しをまたいで状態を保ち、別の実体とは独立していることを確かめること、アラームは実時間を待たずに試験用の関数で起こすこと、を挙げています。
SQLite と KV のどちらの保存を使いますか
新しく作るなら SQLite です。SQL は同期で呼べるので推奨、と書かれています。既存のクラスが KV で動いているなら、どちらかを確かめてから API を選ぶよう資料にあります。
設定ファイルは toml と jsonc のどちらですか
資料は wrangler.jsonc を推奨とし、wrangler.toml を代わりの書き方として載せています。