Skip to content

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

Workers API

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

Workers ではエッジでコードを実行できます。R2 バケットを Worker にバインドすると、Workers API でオブジェクトを直接読み書きできます。

1. バケットを作成する

バケットは R2 上でオブジェクトを保存します。新しい R2 バケットを作成する手順は次のとおりです。

  1. Cloudflare アカウントにログインします。

    npx wrangler login
  2. my-bucket という名前のバケットを作成します。

    npx wrangler r2 bucket create my-bucket

    求められた場合は、バケットを作成するアカウントを選びます。

  3. バケットが作成されたことを確認します。

    npx wrangler r2 bucket list
  1. Cloudflare ダッシュボードで R2 object storage を開きます。

    Overview を開く ↗
  2. Create bucket を選びます。

  3. バケット名を入力します。

  4. バケットの ロケーションデフォルトのストレージクラス を選びます。

  5. Create bucket を選びます。

2. R2 バインド付きの Worker を作成する

  1. 新しい Worker プロジェクトを作成します。

    npm create cloudflare@latest -- r2-worker

    プロンプトでは、テンプレートとして Hello World exampleJavaScript(または TypeScript)を選びます。

  2. プロジェクトディレクトリに移動します。

    cd r2-worker
  3. Wrangler 設定ファイルに R2 バインドを追加します。my-bucket は自分のバケット名に置き換えます。

    {
      "r2_buckets": [
        {
          "binding": "MY_BUCKET",
          "bucket_name": "my-bucket"
        }
      ]
    }
    [[r2_buckets]]
    binding = "MY_BUCKET"
    bucket_name = "my-bucket"
  4. (任意)TypeScript を使っている場合は、型を再生成します。

    npx wrangler types

3. オブジェクトを読み書きする

バインドを使ってバケットを操作します。この例では、URL パスに基づいてオブジェクトを保存および取得します。

src/index.jsjs
export default {
	async fetch(request, env) {
		// Get the object key from the URL path
		// For example: /images/cat.png → images/cat.png
		const url = new URL(request.url);
		const key = url.pathname.slice(1);

		// PUT: Store the request body in R2
		if (request.method === "PUT") {
			await env.MY_BUCKET.put(key, request.body);
			return new Response(`Put ${key} successfully!`);
		}

		// GET: Retrieve the object from R2
		const object = await env.MY_BUCKET.get(key);
		if (object === null) {
			return new Response("Object not found", { status: 404 });
		}
		return new Response(object.body);
	},
};
src/index.tsts
export default {
	async fetch(request, env): Promise<Response> {
		// Get the object key from the URL path
		// For example: /images/cat.png → images/cat.png
		const url = new URL(request.url);
		const key = url.pathname.slice(1);

		// PUT: Store the request body in R2
		if (request.method === "PUT") {
			await env.MY_BUCKET.put(key, request.body);
			return new Response(`Put ${key} successfully!`);
		}

		// GET: Retrieve the object from R2
		const object = await env.MY_BUCKET.get(key);
		if (object === null) {
			return new Response("Object not found", { status: 404 });
		}
		return new Response(object.body);
	},
} satisfies ExportedHandler<Env>;

4. テストしてデプロイする

  1. Worker をローカルでテストします。

    npx wrangler dev
  2. 開発サーバーが起動したら、オブジェクトの保存と取得をテストします。

    # Store an object
    curl -X PUT http://localhost:8787/my-file.txt -d 'Hello, R2!'
    
    # Retrieve the object
    curl http://localhost:8787/my-file.txt
  3. 本番へデプロイします。

    npx wrangler deploy
  4. デプロイ後、Wrangler は Worker の URL を出力します(例: https://r2-worker.<YOUR_SUBDOMAIN>.workers.dev)。オブジェクトの保存と取得をテストします。

    # Store an object
    curl -X PUT https://r2-worker.<YOUR_SUBDOMAIN>.workers.dev/my-file.txt -d 'Hello, R2!'
    
    # Retrieve the object
    curl https://r2-worker.<YOUR_SUBDOMAIN>.workers.dev/my-file.txt

完全な API リファレンスは、Workers R2 API のドキュメント を参照してください。

次のステップ

署名付き URL

プライベートオブジェクトに一時的にアクセスする URL を生成します。

公開バケット

公開バケットを使って、ファイルを HTTP で直接配信します。

CORS

ブラウザーからのアップロード向けに CORS を設定します。

役に立ちましたか?