この記事が役に立つ人

  • Web アプリやモバイルアプリで画像・動画・ドキュメントの保存先を選定中
  • エグレス(データ転送出力)費用がプロジェクトのコストに直結するケースを検討している
  • 日本リージョンの有無やCDN連携の違いを把握してから決めたい

掲載内容は 2026 年 4 月時点 の公式情報に基づきます。料金は構造と桁感のみ記載し、正確な数値は各社公式サイトで確認してください。

結論を先に

🗺️ 用途別クイック選定マップ
「何を最も重視するか」で選ぶ
🏗️ エコシステムの広さ
AWS S3
業界標準の API 仕様。他社サービスも S3 互換 API を採用するほど普及しており、ツール・ライブラリの選択肢が最多。
💰 エグレス費用ゼロ
Cloudflare R2
データ転送出力が無料。画像・動画配信でエグレスがコストの大半を占めるケースで大幅なコスト削減が見込める。
⚡ 最速で認証付きストレージ
Supabase Storage
Supabase Auth と統合された Row Level Security でファイル単位のアクセス制御が即時構築可能。個人開発・プロトタイプに最適。
🤖 GCP / AI 連携
Google Cloud Storage
BigQuery・Vertex AI・Cloud Functions との統合がネイティブ。データ分析パイプラインの起点としてのストレージに。

対象 4 サービスの位置づけ

AWS S3

Amazon が 2006 年にリリースしたオブジェクトストレージ。クラウドストレージの事実上の標準 API であり、多数のサードパーティツールやサービスが S3 互換 API を採用しています。東京リージョン(ap-northeast-1)があり、日本国内からの低レイテンシアクセスが可能。

Cloudflare R2

Cloudflare が提供する S3 互換オブジェクトストレージ。最大の特徴は エグレス(データ転送出力)費用が無料 である点。Cloudflare の CDN エッジネットワークと統合されており、配信パフォーマンスにも強い。

Supabase Storage

Supabase の BaaS プラットフォームに統合されたファイルストレージ。内部的には S3 互換ストレージを使用しつつ、Supabase Auth との連携による Row Level Security(RLS)でファイル単位のアクセス制御を提供。

Google Cloud Storage(GCS)

Google Cloud のオブジェクトストレージ。BigQuery や Vertex AI などの GCP サービスとのネイティブ統合が強み。東京リージョン(asia-northeast1)を持ち、ストレージクラスの自動階層化(Autoclass)機能がある。

料金構造の比較

💡
ストレージ費用よりエグレス費用が問題になるケースが多い

オブジェクトストレージの月額費用は「保存容量」と「データ転送量」の 2 軸で構成されます。保存容量あたりの費用はどのサービスも GB あたり数セントで大差ありませんが、エグレス(データの読み出し・配信)費用は桁違いに差が出ます。画像や動画を大量配信するサービスでは、エグレス費用がストレージ費用の 10 倍以上になることも珍しくありません。

項目 AWS S3 Cloudflare R2 Supabase Storage GCS
保存費用 GB あたり数セント/月 GB あたり数セント/月 無料枠あり、以降 GB 単位 GB あたり数セント/月
エグレス費用 GB あたり数セント〜十数セント 無料 無料枠あり、以降従量 GB あたり数セント〜十数セント
API リクエスト費用 万リクエスト単位 万リクエスト単位 無料枠内は無料 万リクエスト単位
無料枠 12 ヶ月限定 月 10GB 保存 + 無制限エグレス 月 1GB 保存 + 2GB 転送 月 5GB 保存(一部リージョン)
⚠️
AWS S3 のエグレス費用は予想外に膨らみやすい

S3 のエグレスは GB あたり数セント〜十数セントかかり、トラフィックが増えると月額が急増します。CloudFront CDN と組み合わせると軽減できますが、CloudFront 自体にも転送費用が発生します。画像配信中心のサービスでは事前にコスト試算を行ってください。

CDN 連携とパフォーマンス

🔧 CDN 連携パターンの違い
ストレージと CDN の関係が各社で異なる
AWS S3 + CloudFront S3 バケット CloudFront(別設定) ユーザー
<!-- Cloudflare R2(CDN 組み込み) -->
<text x="20" y="110" fill="rgb(251 146 60)" font-size="13" font-weight="700">Cloudflare R2(CDN 一体型)</text>
<rect x="20" y="120" width="280" height="40" rx="8" fill="rgb(251 146 60 / 0.1)" stroke="rgb(251 146 60 / 0.3)" stroke-width="1"/>
<text x="160" y="145" fill="rgb(254 215 170)" font-size="11" font-weight="500" text-anchor="middle">R2 + Cloudflare CDN(自動統合)</text>
<path d="M305 140 L385 140" stroke="rgb(148 163 184)" stroke-width="1.5"/>
<polygon points="385,136 395,140 385,144" fill="rgb(148 163 184)"/>
<text x="430" y="145" fill="rgb(148 163 184)" font-size="11" text-anchor="middle">ユーザー</text>

<!-- Supabase Storage -->
<text x="20" y="195" fill="rgb(52 211 153)" font-size="13" font-weight="700">Supabase Storage</text>
<rect x="20" y="205" width="140" height="40" rx="8" fill="rgb(52 211 153 / 0.1)" stroke="rgb(52 211 153 / 0.3)" stroke-width="1"/>
<text x="90" y="230" fill="rgb(167 243 208)" font-size="11" font-weight="500" text-anchor="middle">Storage API</text>
<path d="M165 225 L195 225" stroke="rgb(148 163 184)" stroke-width="1.5"/>
<polygon points="195,221 205,225 195,229" fill="rgb(148 163 184)"/>
<rect x="210" y="205" width="140" height="40" rx="8" fill="rgb(52 211 153 / 0.1)" stroke="rgb(52 211 153 / 0.3)" stroke-width="1"/>
<text x="280" y="230" fill="rgb(167 243 208)" font-size="11" font-weight="500" text-anchor="middle">CDN(Supabase 管理)</text>
<path d="M355 225 L385 225" stroke="rgb(148 163 184)" stroke-width="1.5"/>
<polygon points="385,221 395,225 385,229" fill="rgb(148 163 184)"/>
<text x="430" y="230" fill="rgb(148 163 184)" font-size="11" text-anchor="middle">ユーザー</text>

<!-- GCS -->
<text x="20" y="280" fill="rgb(59 130 246)" font-size="13" font-weight="700">GCS + Cloud CDN</text>
<rect x="20" y="290" width="140" height="40" rx="8" fill="rgb(59 130 246 / 0.1)" stroke="rgb(59 130 246 / 0.3)" stroke-width="1"/>
<text x="90" y="315" fill="rgb(147 197 253)" font-size="11" font-weight="500" text-anchor="middle">GCS バケット</text>
<path d="M165 310 L195 310" stroke="rgb(148 163 184)" stroke-width="1.5"/>
<polygon points="195,306 205,310 195,314" fill="rgb(148 163 184)"/>
<rect x="210" y="290" width="140" height="40" rx="8" fill="rgb(59 130 246 / 0.1)" stroke="rgb(59 130 246 / 0.3)" stroke-width="1"/>
<text x="280" y="315" fill="rgb(147 197 253)" font-size="11" font-weight="500" text-anchor="middle">Cloud CDN(別設定)</text>
<path d="M355 310 L385 310" stroke="rgb(148 163 184)" stroke-width="1.5"/>
<polygon points="385,306 395,310 385,314" fill="rgb(148 163 184)"/>
<text x="430" y="315" fill="rgb(148 163 184)" font-size="11" text-anchor="middle">ユーザー</text>

Cloudflare R2 は CDN が自動統合されるため、追加設定なしでエッジ配信が行われます。AWS S3 と GCS は CDN(CloudFront / Cloud CDN)を別途設定する必要があり、初期構築の手間が増えます。Supabase Storage は Supabase 側で CDN が管理されますが、細かいキャッシュ制御はできません。

SDK と開発体験

項目 AWS S3 Cloudflare R2 Supabase Storage GCS
API 仕様 S3 独自(事実上の標準) S3 互換 REST + クライアント SDK GCS 独自
公式 SDK 言語数 10+ Workers SDK + S3 互換 JavaScript / Dart / Kotlin / Swift 10+(Cloud Client Libraries)
CLI ツール AWS CLI Wrangler + S3 互換ツール Supabase CLI gcloud CLI
署名付き URL 対応 対応 対応 対応
画像変換 別途 Lambda が必要 Cloudflare Images と連携可 組み込み変換あり 別途処理が必要
📌
S3 互換 API の実用性

Cloudflare R2 は S3 互換 API を実装しているため、既存の S3 向けコードの多くがエンドポイント URL の変更だけで動作します。ただし、S3 の全機能を網羅しているわけではなく、Object Lock やバージョニングの一部機能には差異があります。移行前にアプリケーションが使用している API を確認してください。

日本リージョンとレイテンシ

項目 AWS S3 Cloudflare R2 Supabase Storage GCS
日本リージョン 東京(ap-northeast-1)、大阪 自動分散(リージョン指定なし) 東京リージョン選択可 東京(asia-northeast1)、大阪
データ所在地の指定 リージョン指定で確定 ヒントのみ(保証なし) プロジェクト作成時に選択 リージョン指定で確定
⚠️
Cloudflare R2 のデータ所在地は「保証」ではない

R2 はロケーションヒント機能でデータの保存先を指定できますが、厳密な法的保証ではありません。個人情報保護法やデータローカライゼーション要件がある場合は、AWS S3 または GCS で明示的にリージョンを指定してください。

ユースケース別の判断

画像・動画配信が中心のサービス

エグレス費用が支配的になるため、Cloudflare R2 がコスト面で最も有利。CDN も自動統合されるので追加設定が不要。ただしデータ所在地の厳密な指定が必要な場合は S3 + CloudFront を検討。

BaaS として認証付きストレージが必要

Supabase Storage は Row Level Security との統合により、「このユーザーはこのファイルにのみアクセス可能」というポリシーを SQL で記述できる。Firebase Storage からの移行先としても検討される。

データ分析パイプラインの起点

GCS は BigQuery への直接ロードや Vertex AI との統合がネイティブ。データレイクとしてのストレージなら GCP エコシステム内で完結する GCS が効率的。

既存の AWS インフラがある

AWS S3 を選ぶのが自然。IAM ポリシー、VPC エンドポイント、Lambda トリガーなど、AWS 内のサービスとの統合が最も深い。

🚨
バケットの公開設定には細心の注意を

すべてのクラウドストレージサービスで、バケットやオブジェクトの公開設定ミスによる情報漏洩事故が発生しています。デフォルトでプライベートに設定し、必要なオブジェクトのみ署名付き URL で公開する方式を推奨します。S3 の「Block Public Access」や GCS の「Uniform bucket-level access」を有効にしてください。

まとめ

📋 クラウドストレージ API 選定チェックリスト
コスト構造と既存インフラで選ぶ
エコシステム最大
AWS S3
業界標準 API。ツール・ライブラリ・情報量が最多
エグレス無料
Cloudflare R2
転送費用ゼロ + CDN 自動統合。配信中心ならコスト最安
認証付きストレージ
Supabase Storage
RLS で即アクセス制御。BaaS と一体で最速導入
GCP / AI 連携
Google Cloud Storage
BigQuery・Vertex AI 統合。データ分析パイプラインに