Skip to content

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

既知の問題

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

Durable Objects は一般提供(GA)です。ただし、いくつか既知の問題があります。

グローバル一意性

グローバル一意性は、ある ID を持つ Durable Object class のインスタンスが、世界中で同時に 1 つだけ動くことを保証します。

一意性は、新しいイベントの開始時(HTTP リクエストの受信など)と、ストレージへのアクセス時に強制されます。

イベントを受け取ったあと、実行に時間がかかり、かつ永続ストレージに一度もアクセスしない場合、その Durable Object は最新ではなくなっている可能性があります。同じ Durable Object ID の別インスタンスが、ほかの場所で作成されていることがあります。この時点でイベントがストレージにアクセスすると、例外 を受け取ります。ストレージに一度もアクセスせずにイベントが完了すると、Durable Object が最新でなくなっていたことに気づかない場合があります。

ネットワーク分断やソフトウェア更新(Durable Object のクラスコードの更新、または Workers システム自体の更新)では、Durable Object が置き換わることがあります。wrangler tailCloudflare ダッシュボード のログを有効にすると、ソフトウェア更新が必要です。

コード更新

Workers と Durable Objects のコード変更は、結果整合でグローバルにリリースされます。各 Durable Object はグローバルに一意なため、次の状況が起きえます。リクエストが Worker の最新バージョン(世界のある場所で動作)に到着し、その Worker が短い時間(通常は数秒から数分)だけ以前のコードで動いている一意の Durable Object を呼び出す、という状況です。段階的デプロイ を作成している場合、この期間は、ライブデプロイが複数バージョンを使うよう設定されている時間で決まります。

このため、Workers と Durable Objects のあいだの API 変更は、コード更新をまたいで前方互換・後方互換にしておくのがベストプラクティスです。

開発ツール

wrangler tail は、WebSocket にアップグレードされたリクエストのログを、WebSocket が閉じるまで遅延します。大量のトラフィックを受け取る想定の Worker には、wrangler tail を接続しないでください。

Cloudflare ダッシュボード の Workers エディターでは、Worker と Durable Objects を対話的に編集・プレビューできます。エディターでは、プレビュー対象の Worker が Durable Object class をエクスポートし、かつそれにバインドしている場合に限り、プレビューリクエストから Durable Objects に話せます。ほかの Worker がエクスポートした Durable Objects には、エディターのプレビューから話せません。

wrangler dev は Durable Object ストレージへの読み取りアクセスがあります。書き込みはメモリ上に保持され、永続データには影響しません。ただし、Durable Object bindingscript_name を明示した場合は、書き込みが永続データに影響します。その場合、Wrangler は警告を出します。

ローカル開発の Alarms

現在、ローカル開発(npx wrangler dev)では、ホットリロード(コード実行中に編集した場合)のあと、Durable Object の alarm メソッド が失敗することがあります。

この問題を避けるには、Durable Object の Alarms を使うときは、コードを編集したあと wrangler dev コマンドを終了して再起動してください。

役に立ちましたか?