「画像や動画をたくさん配信したいけど、S3の転送量課金(egress)が怖い」——その悩みを解消するのが Cloudflare R2 です。
R2は、Amazon S3と互換のオブジェクトストレージで、下り(ダウンロード)の転送量が無料なのが最大の特徴です。配信が多いサイトほどコストメリットが大きくなります。
この記事は Cloudflareとは?初心者向けに使い方・設定・料金をわかりやすく解説 の関連記事です。R2の仕組みから、バケット作成・アップロード、Workers連携、S3互換APIでのアクセスまでをハンズオンで解説します。
[目次を開く]
Cloudflare R2とは?
Cloudflare R2は、Amazon S3互換のオブジェクトストレージサービスです。画像・動画・バックアップファイルなど、あらゆるファイル(オブジェクト)をクラウドに保存できます。
オブジェクトストレージとは
ファイルを「バケット」と呼ばれる入れ物にフラットに保存し、URLやAPIで出し入れするストレージです。大量の静的ファイルを扱うのに適しています。
最大の特徴:転送量(egress)が無料
R2の最大の差別化は、データを外に出すときの転送料金(egress)がかからないことです。一般的なクラウドストレージは、ダウンロード量に応じて転送料が積み上がりますが、R2はそれが無料です。
| Amazon S3 | Cloudflare R2 | |
|---|---|---|
| 互換性 | S3 API | S3 API互換 |
| ストレージ料金 | あり | あり |
| 転送量(egress) | 有料 | 無料 |
| 用途 | 汎用 | 配信多めの用途で特に有利 |
何に使える?
- 画像・動画の配信(メディアサイト、ECの商品画像など)
- ファイルのダウンロード提供(資料・ソフトウェア等)
- バックアップ・アーカイブ
- 静的アセット置き場(Workers/Pagesと組み合わせ)
料金
個人・学習なら無料枠で始められます。
| 項目 | 無料枠の目安 |
|---|---|
| ストレージ | 月たり一定容量まで無料 |
| 操作回数(読み/書き) | 一定回数まで無料 |
| 転送量(egress) | 常に無料 |
具体的な無料枠の数値は改定されることがあるため、最新は公式ドキュメントで確認してください。ダウンロードが多くても転送料がかからない点が、他サービスとの最大の違いです。
事前に準備するもの
- Cloudflareアカウント(無料。R2の利用開始にはクレジットカード登録が必要な場合があります)
- コマンドで操作する場合は wrangler(Cloudflare公式CLI)
ハンズオン①:バケットを作ってアップロード
最も簡単なのはダッシュボードですが、ここでは再現性の高い wrangler での手順を紹介します。
# バケットを作成
npx wrangler r2 bucket create my-bucket
# ファイルをアップロード
npx wrangler r2 object put my-bucket/hello.txt --file ./hello.txt
# ファイルを取得
npx wrangler r2 object get my-bucket/hello.txt ダッシュボードの場合は「R2」→「バケットを作成」→ファイルをドラッグ&ドロップでアップロードできます。
ハンズオン②:Workersから読み書きする
WorkersとR2をバインディングでつなぐと、コードから直接ファイルを出し入れできます(Workersの基本は Cloudflare Workers入門 を参照)。
wrangler.jsonc でバインディングを設定します。
{
"r2_buckets": [
{ "binding": "MY_BUCKET", "bucket_name": "my-bucket" }
]
} コードからは env.MY_BUCKET でアクセスできます。
export default {
async fetch(request, env) {
// アップロード
await env.MY_BUCKET.put('hello.txt', 'Hello R2!')
// 取得
const obj = await env.MY_BUCKET.get('hello.txt')
if (!obj) return new Response('Not Found', { status: 404 })
return new Response(obj.body)
},
} ハンズオン③:S3互換APIでアクセスする
R2はS3互換なので、既存のS3ツール(aws-cliやAWS SDK)がそのまま使えます。R2の「APIトークン」からアクセスキーを発行し、エンドポイントに R2 のものを指定します。
# エンドポイント例: https://<アカウントID>.r2.cloudflarestorage.com
aws s3 ls --endpoint-url https://<アカウントID>.r2.cloudflarestorage.com 認証情報(アクセスキーID・シークレット)は、S3と同じ要領で aws configure や環境変数に設定します。これにより、S3前提の既存アプリをエンドポイント変更だけでR2に移行しやすいのも利点です。
ファイルを一般公開する
R2のバケットは初期状態では非公開です。Webで配信したい場合は次の2つの方法があります。
- r2.dev ドメイン: 開発・動作確認向けに手軽に公開できる(本番常用には推奨されません)
- カスタムドメイン: 本番推奨。Cloudflareで管理しているドメインを紐づけ、CDN・キャッシュと組み合わせて高速配信
よくあるつまずき(FAQ)
Q. S3のコードをそのまま使える?
基本的な操作(put/get/list/delete等)はS3互換で動きます。エンドポイントをR2に変えるだけで移行できるケースが多いです。ただし、S3固有の高度な機能は一部未対応のことがあるため、ドキュメントで対応状況を確認しましょう。
Q. 本当に転送量は無料?
下り(egress)の転送料は無料です。ただしストレージ容量や操作回数(リクエスト)には無料枠を超えると課金されます。「転送量が無料」であって「完全無料」ではない点に注意しましょう。
Q. 公開したのにアクセスできない
バケットが非公開のままか、カスタムドメイン/r2.devの有効化が未完了の可能性があります。公開設定を見直してください。
まとめ
Cloudflare R2は、S3互換で、転送量(egress)が無料のオブジェクトストレージです。要点を振り返ります。
- 画像・動画など 配信が多い用途でコストメリットが大きい
-
wrangler r2・ ダッシュボード ・ Workersバインディング ・ S3互換API の4ルートでアクセス - 公開は カスタムドメイン(本番) が推奨
まずはテスト用バケットを1つ作ってファイルをアップロードし、WorkersやS3互換APIから取得できるか試してみてください。
あわせて読みたい:
