アルアカ - Arcadia Academia

Arcadia Academiaは「エンジニアリングを楽しむ」を合言葉に日本のデジタル競争力を高めることをミッションとするテックコミュニティです。

Cloudflare R2とは?転送量無料のオブジェクトストレージの使い方を初心者向けに解説【ハンズオン】

Featured image of the post

「画像や動画をたくさん配信したいけど、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から取得できるか試してみてください。

あわせて読みたい:

プログラミング学習でお悩みですか?

現役エンジニアがあなたの学習をマンツーマンでサポートします。

  • 学習の進め方がわからない
  • ポートフォリオの作り方を知りたい
  • 現場で使える技術を学びたい
まずは30分の無料相談

相談は完全無料・オンラインで気軽に

あなたを爆速で成長させるメンタリングプログラムはこちら

メンタープログラムバナー

学習・開発のお悩みは現役エンジニアに相談

メンタープログラムの詳細を見る

エンジニアの基礎学習ゲーム

プログラミング学習支援

無料相談はこちら