Skip to content

非公式本サイトは非公式の日本語ドキュメントであり、Cloudflare 公式サイトではありません。最新情報はdevelopers.cloudflare.comをご確認ください。

Durable Object Namespace

最終更新 Markdown で表示Agent セットアップ

説明

Durable Object 名前空間は、同じ Durable Object class を基盤とする Durable Object の集合です。クラスごとに Durable Object 名前空間は 1 つだけです。1 つの Durable Object 名前空間には、任意の数の Durable Object を含められます。

DurableObjectNamespace インターフェイスは、新規または既存の Durable Object への参照を取得するために使います。Cloudflare Worker の fetch ハンドラーから、env パラメーター経由でアクセスします。env は、Wrangler 設定ファイル で宣言したバインディングを参照するときの標準インターフェイスです。

このインターフェイスには、Durable Object の ID を作成する メソッド がいくつかあります。ID を作成しても、Durable Object 自体は作成されません。Durable Object は、DurableObjectNamespace::get を呼んで DurableObjectId から DurableObjectStub を作ったあと、遅延作成されます。実際にアクセスされるまでオブジェクトが構築されないようにするためです。

import { DurableObject } from "cloudflare:workers";

// Durable Object
export class MyDurableObject extends DurableObject {
  ...
}

// Worker
export default {
  async fetch(request, env) {
    // A stub is a client Object used to invoke methods defined by the Durable Object
    const stub = env.MY_DURABLE_OBJECT.getByName("foo");
    ...
  }
}
import { DurableObject } from "cloudflare:workers";

export interface Env {
  MY_DURABLE_OBJECT: DurableObjectNamespace<MyDurableObject>;
}

// Durable Object
export class MyDurableObject extends DurableObject {
  ...
}

// Worker
export default {
  async fetch(request, env) {
    // A stub is a client Object used to invoke methods defined by the Durable Object
    const stub = env.MY_DURABLE_OBJECT.getByName("foo");
    ...
  }
} satisfies ExportedHandler<Env>;
from workers import DurableObject, WorkerEntrypoint

# Durable Object
class MyDurableObject(DurableObject):
  pass

# Worker
class Default(WorkerEntrypoint):
  async def fetch(self, request):
    # A stub is a client Object used to invoke methods defined by the Durable Object
    stub = self.env.MY_DURABLE_OBJECT.getByName("foo")
    # ...

メソッド

idFromName

idFromName は、Durable Object クラスの個別インスタンスを指す一意の DurableObjectId を作成します。名前付き Durable Objects は、Durable Object を参照する最も一般的な方法です。

const fooId = env.MY_DURABLE_OBJECT.idFromName("foo");
const barId = env.MY_DURABLE_OBJECT.idFromName("bar");

パラメーター

  • Durable Object の名前に対応する DurableObjectId を生成するための必須の文字列。

戻り値

  • Durable Object クラスのインスタンスを指す DurableObjectId

newUniqueId

newUniqueId は、Durable Object クラスの個別インスタンスを指す、ランダム生成の一意な DurableObjectId を作成します。newUniqueId で作った ID は、あとから同じ Durable Object を参照するために、文字列として保存する必要があります。たとえば、Workers KV、別の Durable Object、またはユーザーのブラウザーの cookie に保存できます。

const id = env.MY_DURABLE_OBJECT.newUniqueId();
const euId = env.MY_DURABLE_OBJECT.newUniqueId({ jurisdiction: "eu" });

パラメーター

  • キー jurisdiction管轄 文字列の値を持つ、任意のオブジェクト。

戻り値

  • Durable Object クラスのインスタンスを指す DurableObjectId

idFromString

idFromString は、以前生成され文字列に変換された ID から DurableObjectId を作成します。ID が無効な場合(たとえば、同じ DurableObjectNamespace から作られていない場合)、このメソッドは例外を投げます。

// 新しい一意の ID を作成する
const id = env.MY_DURABLE_OBJECT.newUniqueId();
// ID を文字列に変換し、セッション Cookie など別の場所に保存する
const session_id = id.toString();

...
// 文字列から ID を再作成する
const id = env.MY_DURABLE_OBJECT.idFromString(session_id);

パラメーター

  • newUniqueId または idFromName で以前生成した DurableObjectId に対応する必須の文字列。

戻り値

  • Durable Object クラスのインスタンスを指す DurableObjectId

get

getDurableObjectId から DurableObjectStub を取得し、Durable Object のメソッドを呼び出せるようにします。

このメソッドは スタブ をすぐに返します。多くの場合、Durable Object への接続が確立される前です。ネットワークの往復を待たずに、インスタンスへすぐにリクエストを送れます。

const id = env.MY_DURABLE_OBJECT.newUniqueId();
const stub = env.MY_DURABLE_OBJECT.get(id);

パラメーター

戻り値

getByName

getByName は指定した名前から DurableObjectStub を取得し、Durable Object のメソッドを呼び出せるようにします。

このメソッドは スタブ をすぐに返します。多くの場合、Durable Object への接続が確立される前です。ネットワークの往復を待たずに、インスタンスへすぐにリクエストを送れます。

const fooStub = env.MY_DURABLE_OBJECT.getByName("foo");
const barStub = env.MY_DURABLE_OBJECT.getByName("bar");

パラメーター

  • 指定した名前の Durable Object クラスインスタンスに対応する DurableObjectStub を生成するための必須の文字列。
  • キー locationHintlocationHint 文字列の値を持つ、任意のオブジェクト。

戻り値

jurisdiction

jurisdiction は名前空間からサブ名前空間を作成します。そのサブ名前空間から作るすべての Durable Object ID と参照は、指定した 管轄 に制限されます。

const subnamespace = env.MY_DURABLE_OBJECT.jurisdiction("eu");
const euStub = subnamespace.getByName("foo");

パラメーター

  • 必須の 管轄 文字列。

戻り値

  • 特定の規制上または地理的な管轄にスコープした DurableObjectNamespace。追加の地理的管轄は継続的に評価されています。Durable Objects Discord チャネル でリクエストを共有してください。

関連リソース

役に立ちましたか?