Skip to content

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

はじめに

アプリケーション内の全ユーザーの通知設定を保存する、基本的なキーバリューストアを作成します。各ユーザーの通知は enabled または disabled です。

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

Workers KV は、Cloudflare Workers アプリケーション向けの低レイテンシで高スループットのグローバルストレージです。Workers KV は、ユーザー設定、ルーティングデータ、A/B テストの設定、認証トークンの保存に適しており、読み取りが多いワークロードに向いています。

このガイドでは、次の作業を順に進めます。

  • KV 名前空間を作成する。
  • Cloudflare Worker から KV 名前空間へキーバリューペアを書き込む。
  • KV 名前空間からキーバリューペアを読み取る。

作業は Wrangler CLI または Cloudflare ダッシュボードから行えます。

クイックスタート

手順を飛ばしてすぐに始めたい場合は、次のボタンをクリックします。

Deploy to Cloudflare

GitHub アカウントにリポジトリが作成され、アプリケーションが Cloudflare Workers へデプロイされます。Cloudflare Workers に慣れていて、手順ごとの案内を飛ばしたい場合に使います。

Cloudflare Workers が初めてなら、手順を手作業で進める方がよいことがあります。

前提条件

  1. Cloudflare アカウント に登録します。
  2. Node.js をインストールします。

Node.js のバージョンマネージャー

権限の問題を避け、Node.js のバージョンを切り替えられるよう、Voltanvm などの Node バージョンマネージャーを使います。このガイドの後半で説明する Wrangler には、Node バージョン 16.17.0 以降が必要です。

1. Worker プロジェクトを作成する

KV 名前空間への読み書きを行う新しい Worker を作成します。

  1. 次を実行して、kv-tutorial という名前の新しいプロジェクトを作成します。

    npm 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-tutorial Worker が KV データベースへアクセスします。
  2. 作成した Worker プロジェクトのディレクトリへ移動します。

    cd kv-tutorial
  1. Cloudflare ダッシュボードで、Workers & Pages ページを開きます。

    Workers & Pages を開く ↗
  2. Create application を選択します。

  3. Start with Hello World! > Get started を選択します。

  4. Worker に名前を付けます。このチュートリアルでは、Worker 名を kv-tutorial にします。

  5. Deploy を選択します。

2. KV 名前空間を作成する

KV 名前空間 は、Cloudflare のグローバルネットワークに複製されるキーバリューデータベースです。

Wrangler で新しい KV 名前空間を作成できます。put、list、get、delete などの操作も、KV 名前空間に対して実行できます。

Wrangler で KV 名前空間を作成するには、次の手順を実行します。

  1. ターミナルを開き、次のコマンドを実行します。

    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>"
    		}
    	]
    }
  1. Cloudflare ダッシュボードで、Workers KV ページを開きます。

    Workers KV を開く ↗
  2. Create instance を選択します。

  3. 名前空間の名前を入力します。このチュートリアルでは kv_tutorial_namespace を使います。

  4. Create を選択します。

3. Worker を KV 名前空間にバインドする

Worker を KV 名前空間に接続するには、バインディングを作成する必要があります。バインディング により、Worker は KV など Cloudflare 開発者プラットフォーム上のリソースへアクセスできます。

KV 名前空間を Worker にバインドするには、次の手順を実行します。

  1. 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 です。
  1. Cloudflare ダッシュボードで、Workers & Pages ページを開きます。

    Workers & Pages を開く ↗
  2. 手順 1 で作成した kv-tutorial Worker を選択します。

  3. Bindings タブを開き、Add binding を選択します。

  4. KV namespace > Add binding を選択します。

  5. Variable name にバインディング名(BINDING_NAME)を入力し、ドロップダウンから 手順 2 で作成した KV 名前空間(kv_tutorial_namespace)を選びます。

  6. Add binding を選択して、バインディングをデプロイします。

4. KV 名前空間を操作する

KV 名前空間は、Wrangler または Workers アプリケーションから直接操作できます。

4.1. 値を書き込む

空の KV 名前空間へ Wrangler で値を書き込むには、次の手順を実行します。

  1. ターミナルで 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>.
  1. Cloudflare ダッシュボードで、Workers KV ページを開きます。

    Workers KV を開く ↗
  2. 作成した KV 名前空間(kv_tutorial_namespace)を選択します。

  3. KV Pairs タブを開きます。

  4. 任意の <KEY> を入力します。

  5. 任意の <VALUE> を入力します。

  6. Add entry を選択します。

4.2. 値を取得する

Wrangler で KV 名前空間から値を取得するには、次の手順を実行します。

  1. ターミナルで 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" --text

    put コマンドと同様に、get コマンドでも --binding または --namespace-id の 2 通りで KV 名前空間へアクセスできます。

複数のキーバリューペアをファイルから KV 名前空間へ書き込む方法は、kv bulk のドキュメント を参照してください。

キーバリューペアは、ダッシュボードから直接確認できます。

  1. Cloudflare ダッシュボードで、Workers KV ページを開きます。

    Workers KV を開く ↗
  2. 作成した KV 名前空間(kv_tutorial_namespace)を開きます。

  3. KV Pairs タブを開きます。

5. Worker から KV 名前空間へアクセスする

  1. Worker スクリプトの Env インターフェイスに、KV バインディングを追加します。JavaScript でプロジェクトをブートストラップした場合、この手順は不要です。

    interface Env {
    	USERS_NOTIFICATION_CONFIG: KVNamespace;
    	// ... other binding types
    }
  2. USERS_NOTIFICATION_CONFIGput() メソッドで、新しいキーバリューペアを作成します。KV 名前空間に、キー user_2 と値 disabled を追加します。

    let value = await env.USERS_NOTIFICATION_CONFIG.put("user_2", "disabled");
  3. 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>;

上記のコードでは、次を行っています。

  1. KV の put() メソッドで、KV 名前空間へキーを書き込みます。
  2. KV の get() メソッドで、同じキーを読み取ります。
  3. キーが null かどうかを確認し、null なら 404 レスポンスを返します。
  4. キーが null でなければ、そのキーの値を返します。
  5. JavaScript の try...catch で例外を捕捉します。Workers KV や fetch() を使う外部 API など、何らかのサービスへ書き込みまたは読み取りを行うときは、例外を明示的に処理してください。
  1. Cloudflare ダッシュボードで、Workers & Pages ページを開きます。

    Workers & Pages を開く ↗
  2. 作成した kv-tutorial Worker を開きます。

  3. Edit Code を選択します。

  4. 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>;

    上記のコードでは、次を行っています。

    1. KV の put() メソッドで、BINDING_NAME へキーを書き込みます。
    2. KV の get() メソッドで同じキーを読み取ります。キーが null の場合(未設定、または存在しない場合)はエラーを返します。
    3. JavaScript の try...catch で例外を捕捉します。Workers KV や fetch() を使う外部 API など、何らかのサービスへ書き込みまたは読み取りを行うときは、例外を明示的に処理してください。

    ブラウザーは、get() メソッドで指定した KEY に対応する VALUE を返します。

  5. Deploy の横にあるドロップダウン矢印を選び、Save を選択します。

6. Worker をデプロイする

Worker を Cloudflare のグローバルネットワークへデプロイします。

  1. 次のコマンドを実行し、KV を Cloudflare のグローバルネットワークへデプロイします。

    npm run deploy
  2. 新しく作成した Workers KV アプリケーションの URL を開きます。

    たとえば新しい Worker の URL が kv-tutorial.<YOUR_SUBDOMAIN>.workers.dev なら、https://kv-tutorial.<YOUR_SUBDOMAIN>.workers.dev/ へアクセスすると、Worker が Workers KV への書き込み(および読み取り)を行います。

  1. Cloudflare ダッシュボードで、Workers & Pages ページを開きます。

    Workers & Pages を開く ↗
  2. kv-tutorial Worker を選択します。

  3. Deployments を選択します。

  4. Version History テーブルから Deploy version を選択します。

  5. Deploy version ページで Deploy を選択します。

    これで、最新バージョンの Worker コードが本番へデプロイされます。

まとめ

このチュートリアルでは、次を行いました。

  1. KV 名前空間を作成した
  2. その名前空間へ書き込みと読み取りを行う Worker を作成した
  3. プロジェクトをグローバルにデプロイした

次のステップ

機能の要望や不具合を見つけた場合は、Discord の Cloudflare Developers コミュニティ に参加し、Cloudflare チームへ直接フィードバックを共有してください。

役に立ちましたか?