R2
概要
ファイルの入った箱を預けておき、あとで取り出せる巨大なオンライン倉庫を思い浮かべてください。R2 は Cloudflare のオブジェクトストレージ — まさにその倉庫 — で、ファイルを置く場所です。画像、動画、バックアップ、ユーザーのアップロード、ビルド成果物など。Amazon S3 と同じ (アプリケーション・プログラミング・インターフェース。ツールがやり取りするための命令のまとまり)を話すため、ほとんどの S3 ツールや SDK(ソフトウェア開発キット。あらかじめ用意されたコードのライブラリ)はそのまま動作します。最大の違いは料金です。R2 はストレージと操作に対して課金しますが、egress 料金がかかりません(倉庫からデータが出ていくことに対する料金がありません)。つまりデータを外部に配信するのは無料です。
強み
- egress 料金ゼロ — メディアやダウンロードの多いアプリにとって大きな節約。
- S3 互換 API なので、既存のツールやライブラリがそのまま動きます。
- Worker に直接バインドして、コードに認証情報を入れずに読み書きできます。
- Cloudflare の CDN(コンテンツ・デリバリー・ネットワーク。各訪問者の近くにファイルのコピーを置く世界中のサーバー群)の背後に置いて、高速でキャッシュされた配信が可能です。
- プロビジョニングなしで大きなオブジェクトや大きなバケットにスケールします。
トレードオフ
- オブジェクトストレージであり、ファイルシステムやデータベースではありません — ファイル内部のクエリはできません。
- 操作(PUT/GET/LIST)は課金対象なので、おしゃべりなアクセスパターンは積み重なります。
- 強い一貫性や機能は S3 と細部で異なります。エッジケースを確認しましょう。
- 小さく、頻繁に変更される値には、KV(キーバリューストア。巨大な辞書のようなもの)や D1( データベース)のほうが適しています。
使うべきとき
ユーザーのアップロード、生成されたファイル、大きな静的アセット、データのエクスポート、バックアップに R2 を使いましょう — 特に S3 での帯域幅コストが痛手になるところならどこでも。
バイブコーディングとの相性
R2 は AI 主導のビルドと相性が良いです。バインディングが通常の認証情報のやり取りを取り除いてくれるからです — エージェントは env.BUCKET に直接書き込みます。ファイルが公開(Worker やカスタムドメイン経由で配信)か非公開(署名付きアクセス)かをエージェントに伝え、配信を正しく配線させましょう。次の例はバケットをバインドし、 からファイルをアップロードします。
# wrangler.toml
[[r2_buckets]]
binding = "BUCKET"
bucket_name = "uploads"
npx wrangler r2 bucket create uploads
npx wrangler r2 object put uploads/logo.png --file ./logo.png