新しい Durable Object の名前空間、KV バックエンドはついに作れなくなるよ!
やっほー、しぃちゃんだよ!今日は Cloudflare の Changelog をチェックしていたら、Durable Objects まわりで地味だけど見逃せない変更を見つけたから紹介するね。しぃちゃん、こういう「地味だけど効いてくる」お知らせも大好きなの!
Cloudflare Changelogなにが発表されたの?
発表されたのは、Cloudflare の Changelog にあったニュース。すでにキー・バリュー(KV)バックエンドの Durable Object 名前空間を持っていないアカウントは、新しく KV バックエンドの名前空間を作れなくなった、っていう内容なんだって。
これから Durable Objects で新しい名前空間を用意するときは、SQLite ストレージバックエンドを使うのが必須になるの。
今までどうだったの?
Durable Objects には、もともとキー・バリュー(KV)バックエンドと SQLite バックエンドの 2 種類のストレージが用意されていたの。KV バックエンドは登場当初からある方式で、SQLite バックエンドは 2024 年に一般提供(GA)されて以来、新規の Durable Objects 全般で推奨されてきた仕組みなんだって。
ただし、あくまで「推奨」であって「必須」ではなかったから、これまでは対象アカウントでも新しい名前空間を KV バックエンドで作ることが普通にできていたの。Workers Free プランだけは例外で、もともと SQLite バックエンドの Durable Objects しかサポートしていなかったんだって。
これで何が変わるの?
今回の変更が直接効いてくるのは、まだ KV バックエンドの名前空間を 1 つも持っていないアカウントだよ。こういうアカウントが、KV バックエンドの名前空間を作ろうとして new_classes マイグレーションをデプロイすると、こんなエラーで弾かれちゃうんだって。
Creating new key-value backed Durable Object namespaces is no longer supported on this account. Please create a namespace using a
new_sqlite_classesmigration instead.
逆に言うと、以下のアカウント・プランには影響がないよ。
- すでに 1 つ以上 KV バックエンドの名前空間を持っているアカウント(引き続き新規の KV バックエンド名前空間を作成できる)
- Workers Free プラン(もともと SQLite バックエンドの Durable Objects しかサポートしていなかった)
SQLite バックエンドは、既存のキー・バリュー ストレージ API とちゃんと機能互換がありつつ、リレーショナルな SQL クエリや、直近 30 日以内の任意の時点までオブジェクトのストレージを復元できるポイントインタイムリカバリー(PITR)にも対応しているの。つまり「今までできたこと」はそのままに、強みが上乗せされている状態なんだよね。
Cloudflare としては、Durable Objects のストレージバックエンドを将来的に SQLite 一本に寄せていきたい、っていう大きな方向性の一歩として、今回の制限を入れてきたみたい。既存の KV バックエンドな Durable Object を移行するための道筋も、この先用意される予定なんだって。なので、「Durable Objects をこれから初めて使い始める」っていう開発者さんが一番影響を受けることになるね。
深く潜ってみよう
新しいクラスを SQLite バックエンドで作るときは、マイグレーション設定に new_sqlite_classes を指定するだけなんだって。
Wrangler の設定が wrangler.jsonc の場合はこんな感じ。
{
"$schema": "./node_modules/wrangler/config-schema.json",
"migrations": [
{
"tag": "v1",
"new_sqlite_classes": ["MyDurableObject"]
}
]
}
wrangler.toml の場合はこう書くみたい。
[[migrations]]
tag = "v1"
new_sqlite_classes = ["MyDurableObject"]
今まで使われていた new_classes マイグレーションを、new_sqlite_classes に変えるだけのシンプルな対応だね。対象アカウントで誤って new_classes を使ってしまった場合は、デプロイ時点でエラーになって教えてくれるから、気づかないまま KV バックエンドの名前空間ができちゃう、みたいな事故は起きにくい作りになっているよ。
まとめ
- KV バックエンドの Durable Object 名前空間を持っていないアカウントは、新規の KV バックエンド名前空間を作成できなくなった
- 新しい名前空間は
new_sqlite_classesマイグレーションで SQLite ストレージバックエンドを使うのが必須 - SQLite バックエンドは KV ストレージ API と互換性がありつつ、SQL クエリやポイントインタイムリカバリー(直近 30 日)にも対応
- すでに KV バックエンド名前空間を持つアカウントや、もとから SQLite のみの Workers Free プランは対象外
- Cloudflare は Durable Objects のストレージをゆくゆく SQLite に統一する方向で、既存 KV バックエンド分の移行手段も今後用意される予定
これから Durable Objects を触り始める人は、最初から new_sqlite_classes を使う前提で覚えておくとつまずかずに済みそうだよ!