ファイルを置く第09章 ・ 読むのにかかる時間 約7分

R2をつくる

バケットと、フォルダが存在しない世界

倉庫を建てます。といっても、頼んでから10秒で終わります。この章で大事なのは建てることより、R2にはフォルダが存在しないという事実を飲み込むことです。ここを勘違いしたまま進むと、あとで必ず混乱します。

この章でできるようになること

  • 自分のR2バケット(倉庫)を作る
  • キーという名前の付け方を理解して、自分のルールを決める
  • Workerに「この倉庫を使っていい」という権限を渡す

バケットとは、倉庫そのもの

R2では、倉庫のことをバケットと呼びます。バケツのバケットです。この中にファイルを入れていきます。

1つのバケットに、何万個ファイルを入れても構いません。用途ごとに分けたいときだけ、バケットを増やします。この教科書では1つで進めます。

Claude Codeにこう頼みます

画像を置くためのR2バケットを作ってください。名前は my-photos にしてください。 作ったあと、バケットの一覧を表示して、ちゃんとできているか確認してから、結果を日本語で教えてください。

作成に成功すると、Cloudflareが設定に書き足すための文章を一緒に返してきます。あとで使うので、Claude Codeの画面をそのままにしておいてください。

フォルダは、ありません

ここが、この章の本題です。

パソコンでは、写真フォルダの中に2026年フォルダを作って、その中に画像を入れます。R2にはこの入れ子がありません。あるのは、平らな床に並んだ箱だけです。

では、よく見かける images/photo.png という表記は何なのか。あれはファイルの名前そのものです。「images スラッシュ photo.png」という長い1つの名前であって、imagesという入れ物があるわけではありません。

横にスクロールできます

フォルダに見えるものは、名前の一部 パソコンはフォルダの入れ子ですが、R2は平らに並んだ名前だけです。スラッシュは名前に含まれる文字にすぎません。 パソコンの場合 images フォルダ 2026 フォルダ photo.png R2の場合 箱が平らに並んでいるだけ images/2026/photo.png images/2026/cover.png
スラッシュは、ただの文字です。R2から見れば、長い名前が1つあるだけです。

キー(key)

バケットの中でファイルを特定するための名前です。images/2026/photo.png のような文字列全体が、1つのキーです。同じキーで2回入れると、後から入れたもので上書きされます。この性質は、あとで効いてきます。

キーの付け方を、先に決めておく

フォルダが無いということは、名前の付け方が唯一の整理術だということです。ここを適当にすると、1年後に泣きます。おすすめは3つです。

  • 先頭に種類を付けるimages/docs/ のように始める。あとで「images で始まるものだけ出して」という取り出し方ができます
  • 日本語とスペースを使わない… URLに入れたときに化けたり、記号に置き換わったりします
  • 重複しない文字を混ぜるphoto.png のような普通の名前は、別の人がアップしたときに上書きされます。ランダムな文字列を混ぜると安全です

3つめは自分でやる必要はありません。第10章で、Claude Codeが自動で付ける形にします。

Workerに「この倉庫を使っていい」と伝える

バケットを作っただけでは、あなたのWorkerはそれを触れません。第6章で出てきたbindingの出番です。設定ファイルに、使っていい権限を書き足します。

Claude Codeにこう頼みます

いま作った my-photos バケットを、このプロジェクトのWorkerから使えるようにしてください。wrangler.jsonc にR2のbindingを追加して、binding名は BUCKET にしてください。 追加したあと、設定ファイルのどこが変わったかを日本語で説明してください。

設定ファイルには、こういう数行が足されます。

"r2_buckets": [
  { "binding": "BUCKET", "bucket_name": "my-photos" }
]

意味はそのままです。「BUCKETという呼び名で、my-photos という倉庫を使ってよい」。この呼び名は、次の章でプログラムの中に出てきます。

うまくいったか確認する

  • バケットの一覧に my-photos が出てくる
  • Cloudflareの管理画面のR2の項目にも、同じ名前が表示されている
  • wrangler.jsoncr2_buckets の行が増えている

よくあるつまずき

A bucket with this name already exists
その名前は使用済みです。my-photos-2026 のように変えてください。バケット名を変えたら、wrangler.jsoncbucket_name も同じ名前に直す必要があります。
bindingを書いたのに、Workerから使えない
設定ファイルを直しただけでは、公開済みのWorkerには反映されません。もう一度公開する操作が必要です。「変更を公開してください」と頼んでください。
バケットを作ったのに、管理画面に出てこない
アカウントを複数持っていて、別のアカウントに作られている可能性があります。「いまログインしているアカウントを教えてください」と頼めば確認できます。
キーに日本語を使ったら、URLが変な文字列になった
日本語はURLの中で長い記号列に変換されます。壊れてはいませんが読みにくいので、キーは英数字とハイフンで作るのが無難です。

この章のまとめ

倉庫を建てて、Workerに使用許可を渡しました。そしてR2にはフォルダが無く、スラッシュ入りの長い名前で整理するということを押さえました。

次の章で、いよいよファイルを入れます。

章末チェックリスト