Workers KV は、Cloudflare Workers アプリケーション向けの低レイテンシで高スループットのグローバルストレージです。Workers KV は、ユーザー設定、ルーティングデータ、A/B テストの設定、認証トークンの保存に適しており、読み取りが多いワークロードに向いています。
このガイドでは、次の作業を順に進めます。
- KV 名前空間を作成する。
- Cloudflare Worker から KV 名前空間へキーバリューペアを書き込む。
- KV 名前空間からキーバリューペアを読み取る。
作業は Wrangler CLI または Cloudflare ダッシュボードから行えます。
手順を飛ばしてすぐに始めたい場合は、次のボタンをクリックします。
GitHub アカウントにリポジトリが作成され、アプリケーションが Cloudflare Workers へデプロイされます。Cloudflare Workers に慣れていて、手順ごとの案内を飛ばしたい場合に使います。
Cloudflare Workers が初めてなら、手順を手作業で進める方がよいことがあります。
- Cloudflare アカウント ↗ に登録します。
Node.js↗ をインストールします。
Node.js のバージョンマネージャー
権限の問題を避け、Node.js のバージョンを切り替えられるよう、Volta ↗ や nvm ↗ などの Node バージョンマネージャーを使います。このガイドの後半で説明する Wrangler には、Node バージョン 16.17.0 以降が必要です。
KV 名前空間への読み書きを行う新しい Worker を作成します。
-
次を実行して、
kv-tutorialという名前の新しいプロジェクトを作成します。npm create cloudflare@latest -- kv-tutorialyarn create cloudflare kv-tutorialpnpm create cloudflare@latest kv-tutorialセットアップでは、次のオプションを選びます。
- What would you like to start with? では、
Hello World exampleを選びます。 - Which template would you like to use? では、
Worker onlyを選びます。 - Which language do you want to use? では、
TypeScriptを選びます。 - Do you want to use git for version control? では、
Yesを選びます。 - Do you want to deploy your application? では、
Noを選びます(デプロイ前にいくつか変更します)。
次のような
kv-tutorialディレクトリが作成されます。- kv-tutorial/
- node_modules/
- test/
- src
- index.ts
- package-lock.json
- package.json
- testconfig.json
- vitest.config.mts
- worker-configuration.d.ts
- wrangler.jsonc
新しい
kv-tutorialディレクトリには、次が含まれます。index.ts内の"Hello World"Worker。wrangler.jsonc設定ファイル。wrangler.jsoncにより、kv-tutorialWorker が KV データベースへアクセスします。
- What would you like to start with? では、
-
作成した Worker プロジェクトのディレクトリへ移動します。
cd kv-tutorial
-
Cloudflare ダッシュボードで、Workers & Pages ページを開きます。
Workers & Pages を開く ↗ -
Create application を選択します。
-
Start with Hello World! > Get started を選択します。
-
Worker に名前を付けます。このチュートリアルでは、Worker 名を
kv-tutorialにします。 -
Deploy を選択します。
KV 名前空間 は、Cloudflare のグローバルネットワークに複製されるキーバリューデータベースです。
Wrangler で新しい KV 名前空間を作成できます。put、list、get、delete などの操作も、KV 名前空間に対して実行できます。
Wrangler で KV 名前空間を作成するには、次の手順を実行します。
-
ターミナルを開き、次のコマンドを実行します。
npx wrangler kv namespace create <BINDING_NAME>npx wrangler kv namespace create <BINDING_NAME>サブコマンドは、新しいバインディング名を引数に取ります。KV 名前空間は、Worker 名(Wrangler ファイルから取得)と指定したバインディング名を連結して作成されます。<BINDING_ID>はランダムに生成されます。このチュートリアルでは、バインディング名に
USERS_NOTIFICATION_CONFIGを使います。npx wrangler kv namespace create USERS_NOTIFICATION_CONFIG🌀 Creating namespace with title "USERS_NOTIFICATION_CONFIG" ✨ Success! Add the following to your configuration file in your kv_namespaces array: { "kv_namespaces": [ { "binding": "USERS_NOTIFICATION_CONFIG", "id": "<BINDING_ID>" } ] }
-
Cloudflare ダッシュボードで、Workers KV ページを開きます。
Workers KV を開く ↗ -
Create instance を選択します。
-
名前空間の名前を入力します。このチュートリアルでは
kv_tutorial_namespaceを使います。 -
Create を選択します。
Worker を KV 名前空間に接続するには、バインディングを作成する必要があります。バインディング により、Worker は KV など Cloudflare 開発者プラットフォーム上のリソースへアクセスできます。
KV 名前空間を Worker にバインドするには、次の手順を実行します。
-
Wrangler ファイルに、手順 2 でターミナルに出力された値を追加します。
{ "kv_namespaces": [ { "binding": "USERS_NOTIFICATION_CONFIG", "id": "<BINDING_ID>" } ] }[[kv_namespaces]] binding = "USERS_NOTIFICATION_CONFIG" id = "<BINDING_ID>"バインディング名は、作成した名前空間と一致させる必要はありません。バインディング名は参照用です。具体的には次のとおりです。
bindingに設定した値(文字列)が、Worker 内でこの KV 名前空間を参照するときに使われます。このチュートリアルではUSERS_NOTIFICATION_CONFIGにしてください。- バインディングは 有効な JavaScript 変数名 ↗ である必要があります。たとえば
binding = "MY_KV"やbinding = "routingConfig"は、どちらも有効なバインディング名です。 - バインディングは Worker 内の
env.<BINDING_NAME>で使えます。このチュートリアルではenv.USERS_NOTIFICATION_CONFIGです。
-
Cloudflare ダッシュボードで、Workers & Pages ページを開きます。
Workers & Pages を開く ↗ -
手順 1 で作成した
kv-tutorialWorker を選択します。 -
Bindings タブを開き、Add binding を選択します。
-
KV namespace > Add binding を選択します。
-
Variable name にバインディング名(
BINDING_NAME)を入力し、ドロップダウンから 手順 2 で作成した KV 名前空間(kv_tutorial_namespace)を選びます。 -
Add binding を選択して、バインディングをデプロイします。
KV 名前空間は、Wrangler または Workers アプリケーションから直接操作できます。
空の KV 名前空間へ Wrangler で値を書き込むには、次の手順を実行します。
-
ターミナルで
wrangler kv key putサブコマンドを実行し、キーと値をそれぞれ入力します。<KEY>と<VALUE>は任意の値です。npx wrangler kv key put --binding=<BINDING_NAME> "<KEY>" "<VALUE>"このチュートリアルでは、手順 2 で作成した KV 名前空間に、キー
user_1と値enabledを追加します。npx wrangler kv key put --binding=USERS_NOTIFICATION_CONFIG "user_1" "enabled"Writing the value "enabled" to key "user_1" on namespace <BINDING_ID>.
-
Cloudflare ダッシュボードで、Workers KV ページを開きます。
Workers KV を開く ↗ -
作成した KV 名前空間(
kv_tutorial_namespace)を選択します。 -
KV Pairs タブを開きます。
-
任意の
<KEY>を入力します。 -
任意の
<VALUE>を入力します。 -
Add entry を選択します。
Wrangler で KV 名前空間から値を取得するには、次の手順を実行します。
-
ターミナルで
wrangler kv key getサブコマンドを実行し、キーを入力します。npx wrangler kv key get --binding=<BINDING_NAME> "<KEY>"このチュートリアルでは、手順 2 で作成した KV 名前空間から、キー
user_1の値を取得します。npx wrangler kv key get --binding=USERS_NOTIFICATION_CONFIG "user_1" --textputコマンドと同様に、getコマンドでも--bindingまたは--namespace-idの 2 通りで KV 名前空間へアクセスできます。
複数のキーバリューペアをファイルから KV 名前空間へ書き込む方法は、kv bulk のドキュメント を参照してください。
キーバリューペアは、ダッシュボードから直接確認できます。
-
Cloudflare ダッシュボードで、Workers KV ページを開きます。
Workers KV を開く ↗ -
作成した KV 名前空間(
kv_tutorial_namespace)を開きます。 -
KV Pairs タブを開きます。
-
Worker スクリプトの
Envインターフェイスに、KV バインディングを追加します。JavaScript でプロジェクトをブートストラップした場合、この手順は不要です。interface Env { USERS_NOTIFICATION_CONFIG: KVNamespace; // ... other binding types } -
USERS_NOTIFICATION_CONFIGのput()メソッドで、新しいキーバリューペアを作成します。KV 名前空間に、キーuser_2と値disabledを追加します。let value = await env.USERS_NOTIFICATION_CONFIG.put("user_2", "disabled"); -
KV の
get()メソッドで、KV 名前空間に保存したデータを取得します。KV 名前空間から、キーuser_2の値を取得します。let value = await env.USERS_NOTIFICATION_CONFIG.get("user_2");
Worker のコードは次のようになります。
export default {
async fetch(request, env, ctx) {
try {
await env.USERS_NOTIFICATION_CONFIG.put("user_2", "disabled");
const value = await env.USERS_NOTIFICATION_CONFIG.get("user_2");
if (value === null) {
return new Response("Value not found", { status: 404 });
}
return new Response(value);
} catch (err) {
console.error(`KV returned error:`, err);
const errorMessage =
err instanceof Error
? err.message
: "An unknown error occurred when accessing KV storage";
return new Response(errorMessage, {
status: 500,
headers: { "Content-Type": "text/plain" },
});
}
},
};export interface Env {
USERS_NOTIFICATION_CONFIG: KVNamespace;
}
export default {
async fetch(request, env, ctx): Promise<Response> {
try {
await env.USERS_NOTIFICATION_CONFIG.put("user_2", "disabled");
const value = await env.USERS_NOTIFICATION_CONFIG.get("user_2");
if (value === null) {
return new Response("Value not found", { status: 404 });
}
return new Response(value);
} catch (err) {
console.error(`KV returned error:`, err);
const errorMessage =
err instanceof Error
? err.message
: "An unknown error occurred when accessing KV storage";
return new Response(errorMessage, {
status: 500,
headers: { "Content-Type": "text/plain" },
});
}
},
} satisfies ExportedHandler<Env>;上記のコードでは、次を行っています。
- KV の
put()メソッドで、KV 名前空間へキーを書き込みます。 - KV の
get()メソッドで、同じキーを読み取ります。 - キーが null かどうかを確認し、null なら
404レスポンスを返します。 - キーが null でなければ、そのキーの値を返します。
- JavaScript の
try...catch↗ で例外を捕捉します。Workers KV やfetch()を使う外部 API など、何らかのサービスへ書き込みまたは読み取りを行うときは、例外を明示的に処理してください。
-
Cloudflare ダッシュボードで、Workers & Pages ページを開きます。
Workers & Pages を開く ↗ -
作成した
kv-tutorialWorker を開きます。 -
Edit Code を選択します。
-
workers.jsファイルの内容を空にし、次のコードを貼り付けます。export default { async fetch(request, env, ctx) { try { await env.USERS_NOTIFICATION_CONFIG.put("user_2", "disabled"); const value = await env.USERS_NOTIFICATION_CONFIG.get("user_2"); if (value === null) { return new Response("Value not found", { status: 404 }); } return new Response(value); } catch (err) { console.error(`KV returned error:`, err); const errorMessage = err instanceof Error ? err.message : "An unknown error occurred when accessing KV storage"; return new Response(errorMessage, { status: 500, headers: { "Content-Type": "text/plain" }, }); } }, };export interface Env { USERS_NOTIFICATION_CONFIG: KVNamespace; } export default { async fetch(request, env, ctx): Promise<Response> { try { await env.USERS_NOTIFICATION_CONFIG.put("user_2", "disabled"); const value = await env.USERS_NOTIFICATION_CONFIG.get("user_2"); if (value === null) { return new Response("Value not found", { status: 404 }); } return new Response(value); } catch (err) { console.error(`KV returned error:`, err); const errorMessage = err instanceof Error ? err.message : "An unknown error occurred when accessing KV storage"; return new Response(errorMessage, { status: 500, headers: { "Content-Type": "text/plain" }, }); } }, } satisfies ExportedHandler<Env>;上記のコードでは、次を行っています。
- KV の
put()メソッドで、BINDING_NAMEへキーを書き込みます。 - KV の
get()メソッドで同じキーを読み取ります。キーが null の場合(未設定、または存在しない場合)はエラーを返します。 - JavaScript の
try...catch↗ で例外を捕捉します。Workers KV やfetch()を使う外部 API など、何らかのサービスへ書き込みまたは読み取りを行うときは、例外を明示的に処理してください。
ブラウザーは、
get()メソッドで指定したKEYに対応するVALUEを返します。 - KV の
-
Deploy の横にあるドロップダウン矢印を選び、Save を選択します。
Worker を Cloudflare のグローバルネットワークへデプロイします。
-
次のコマンドを実行し、KV を Cloudflare のグローバルネットワークへデプロイします。
npm run deploy -
新しく作成した Workers KV アプリケーションの URL を開きます。
たとえば新しい Worker の URL が
kv-tutorial.<YOUR_SUBDOMAIN>.workers.devなら、https://kv-tutorial.<YOUR_SUBDOMAIN>.workers.dev/へアクセスすると、Worker が Workers KV への書き込み(および読み取り)を行います。
-
Cloudflare ダッシュボードで、Workers & Pages ページを開きます。
Workers & Pages を開く ↗ -
kv-tutorialWorker を選択します。 -
Deployments を選択します。
-
Version History テーブルから Deploy version を選択します。
-
Deploy version ページで Deploy を選択します。
これで、最新バージョンの Worker コードが本番へデプロイされます。
このチュートリアルでは、次を行いました。
- KV 名前空間を作成した
- その名前空間へ書き込みと読み取りを行う Worker を作成した
- プロジェクトをグローバルにデプロイした
機能の要望や不具合を見つけた場合は、Discord の Cloudflare Developers コミュニティ ↗ に参加し、Cloudflare チームへ直接フィードバックを共有してください。
- KV API の詳細を確認する。
- Workers KV で 環境 を使う方法を理解する。
- Wrangler の
kvコマンドドキュメント を読む。