KV バインディング
KV bindings は、Worker と KV 名前空間間の通信を可能にします。
KV バインディングは wrangler.toml ファイル で設定します。
KV 名前空間 は、Cloudflare のグローバルネットワークに複製されたキー・バリューデータベースです。
Worker 内から KV 名前空間に接続するには、名前空間の ID を指すバインディングを定義する必要があります。
バインディングの名前は KV 名前空間の名前と一致する必要はありません。代わりに、バインディングは有効な JavaScript 識別子である必要があります。なぜなら、その識別子は Worker 内のグローバル変数として存在するからです。
KV 名前空間には、あなたが選んだ名前(例えば、My tasks)と、割り当てられた ID(例えば、06779da6940b431db6e566b4846d64db)があります。
Worker を実行するには、バインディングを定義します。
以下の例では、バインディングは TODO と呼ばれています。wrangler.toml ファイルの kv_namespaces 部分に次のように追加します。
name = "worker"
# ...
kv_namespaces = [ { binding = "TODO", id = "06779da6940b431db6e566b4846d64db" }]これにより、デプロイされた Worker はその環境オブジェクト(fetch() リクエストハンドラーの第二引数)に TODO フィールドを持つことになります。TODO バインディングの任意のメソッドは、ID が 06779da6940b431db6e566b4846d64db の KV 名前空間にマッピングされます – これはあなたが以前に My Tasks と呼んだものです。
export default { async fetch(request, env, ctx) { // "to-do:123" キーの値を取得 // NOTE: "My Tasks" 名前空間にマッピングされた `TODO` KV バインディングに依存しています。 let value = await env.TODO.get("to-do:123");
// 値をそのまま Response として返す return new Response(value); },};wrangler dev コマンドを使用してローカルで開発する際、Wrangler はデフォルトで KV のローカルバージョンを使用し、ライブのプロダクションデータに干渉しないようにします。これにより、ローカルに書き込んでいないキーを読み取ると null が返されます。
wrangler dev を使用して Cloudflare のグローバルネットワーク上で実行されている Workers KV 名前空間に接続するには、代わりに wrangler dev --remote を呼び出します。これにより、wrangler.toml ファイルの KV バインディング設定の preview_id が使用されます。以下は、preview_id が指定された wrangler.toml ファイルの例です。
name = "worker"
# ...
kv_namespaces = [ { binding = "TODO", id = "06779da6940b431db6e566b4846d64db", preview_id="06779da6940b431db6e566b484a6a769a7a" }]Durable Objects は ES モジュール形式を使用します。グローバル変数の代わりに、バインディングは コンストラクタに渡される env パラメータのプロパティとして利用可能です。
例は次のようになります。
export class DurableObject { constructor(state, env) { this.state = state; this.env = env; }
async fetch(request) { const valueFromKV = await this.env.NAMESPACE.get("someKey"); return new Response(valueFromKV); }}