Skip to content

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

キーを一覧する

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

KV 名前空間内のすべてのキーを一覧するには、Worker コードにバインドした任意の KV 名前空間 に対して、KV バインディングlist() メソッドを呼び出します。

env.NAMESPACE.list();
await self.env.NAMESPACE.list()

list() メソッドは Promise を返します。値を取得するには await してください。

Worker 内からキーを一覧する例です。

export default {
  async fetch(request, env, ctx) {
    try {
      const value = await env.NAMESPACE.list();

      return new Response(JSON.stringify(value.keys), {
        status: 200
      });
    }
    catch (e)
    {
      return new Response(e.message, {status: 500});
    }
  },
};
from workers import WorkerEntrypoint, Response

class Default(WorkerEntrypoint):
    async def fetch(self, request):
        try:
            value = await self.env.NAMESPACE.list()

            return Response.json(value["keys"])
        except Exception as e:
            return Response(str(e), status=500)

リファレンス

KV のキーを一覧するには、次のメソッドを使います。

list() メソッド

KV 名前空間内のすべてのキーを一覧するには、Worker コードにバインドした任意の KV 名前空間で list() メソッドを呼び出します。

env.NAMESPACE.list(options?)
self.env.NAMESPACE.list(options)

パラメーター

  • options: { prefix?: string, limit?: string, cursor?: string }
    • prefix(省略可)、limit(省略可)、cursor(省略可)属性を含むオブジェクトです。
      • prefix は、すべてのキーを絞り込むときに使うプレフィックスを表す string です。
      • limit は返すキーの最大数です。デフォルトは 1,000 件で、これが上限です。このデフォルトを変えることは少ないですが、完全性のために記載しています。
      • cursor は、レスポンスをページ分割するために使う string です。

レスポンス

  • response: Promise<{ keys: { name: string, expiration?: number, metadata?: object }[], list_complete: boolean, cursor: string }>
    • keyslist_completecursor 属性を含むオブジェクトに解決する Promise です。
      • keys は、一覧したキーごとのオブジェクトを含む配列です。各オブジェクトには nameexpiration(省略可)、metadata(省略可)属性があります。キーと値のペアに有効期限が設定されている場合、有効期限は絶対値形式で含まれます(TTL 形式で設定した場合も同じです)。キーと値のペアに null でないメタデータが設定されている場合、メタデータが含まれます。
      • list_complete はブール値です。keys 配列が空でも、まだ取得するキーがある場合は false になります。
      • cursor は、レスポンスをページ分割するために使う string です。

list() メソッドは Promise を返します。解決すると、次のようなオブジェクトになります。

{
  "keys": [
    {
      "name": "foo",
      "expiration": 1234,
      "metadata": { "someMetadataKey": "someMetadataValue" }
    }
  ],
  "list_complete": false,
  "cursor": "6Ck1la0VxJ0djhidm1MdX2FyD"
}

keys プロパティには、各キーを表すオブジェクトの配列が含まれます。そのオブジェクトには、キーの name と、省略可能な expiration および metadata の、1〜3 個のキーがあります。

namestringexpiration は数値、metadata は最初に設定した型です。expiration は、キーに有効期限がある場合にだけ返り、TTL 形式で設定しても絶対値形式になります。metadata は、そのキーに null でないメタデータがある場合にだけ返ります。

list_completefalse の場合、keys 配列が空でも、まだ取得するキーがあります。続きのキーを取得するには cursor プロパティを使います。詳細は ページネーション を参照してください。

値が メタデータのサイズ上限 に収まる場合は、値をメタデータに保存することを検討してください。メタデータに値を保存するほうが、list() のあとにキーごとに get() するより効率的です。put() を使うときは、value パラメーターを空にして、代わりにメタデータオブジェクトにプロパティを含めます。

await NAMESPACE.put(key, "", {
  metadata: { value: value },
});
await self.env.NAMESPACE.put(key, "", metadata={"value": value})

このメソッドを KV 名前空間に対して呼び出しているアプリケーションへ反映されるまで、最大 60 秒(または get() / getWithMetadata() メソッドの cacheTtl の値)かかることがあります。

ガイダンス

プレフィックスで一覧する

特定のプレフィックスで始まるキーをすべて一覧します。

たとえば、ユーザー、ユーザー ID、キー名をコロンで区切った構造(user:1:<key> など)にしている場合があります。次のコードで、ユーザー 1 のキーを取得できます。

export default {
  async fetch(request, env, ctx) {
    const value = await env.NAMESPACE.list({ prefix: "user:1:" });
    return new Response(value.keys);
  },
};
from workers import WorkerEntrypoint, Response

class Default(WorkerEntrypoint):
    async def fetch(self, request):
        value = await self.env.NAMESPACE.list(prefix="user:1:")
        return Response(str(value["keys"]))

"user:1:" プレフィックスで始まるすべてのキーが返ります。

並び順

キーは常に、UTF-8 バイトに基づく辞書順で返ります。

ページネーション

まだ取得するキーがある場合、list_completefalse になり、cursor も返ります。この場合、cursor の値を渡してもう一度 list() を呼び出すと、次のキーのバッチを取得できます。

const value = await NAMESPACE.list();

const cursor = value.cursor;

const next_value = await NAMESPACE.list({ cursor: cursor });
value = await self.env.NAMESPACE.list()

cursor = value.get("cursor")

next_value = await self.env.NAMESPACE.list(cursor=cursor)

keys が空配列かどうかを確認するだけでは、続きのキーがあるかは判断できません。代わりに list_complete を使います。

keys が空配列でも、まだ取得するキーがあることがあります。最近期限切れまたは削除されたキー は走査する必要がありますが、返される keys には含まれないためです。

大きな結果セットをページ送りしつつ prefix 引数も渡す場合は、最初の引数に加えて、以降の呼び出しすべてで prefix 引数を渡す必要があります。

list() 操作用にメタデータでストレージを最適化する

値が メタデータのサイズ上限 に収まる場合は、値をメタデータに保存することを検討してください。メタデータに値を保存するほうが、list() のあとにキーごとに get() するより効率的です。put() を使うときは、value パラメーターを空にして、代わりにメタデータオブジェクトにプロパティを含めます。

await NAMESPACE.put(key, "", {
  metadata: { value: value },
});
await self.env.NAMESPACE.put(key, "", metadata={"value": value})

KV にアクセスする他の方法

Wrangler のコマンドラインからキーを一覧する 方法と、REST API 経由でキーを一覧する 方法もあります。

役に立ちましたか?