クラウドストレージ10社のアップロード上限・料金・特徴を徹底比較|S3/GCS/Azure/R2
クラウドストレージサービスを選ぶとき、単体アップロードの上限・マルチパートアップロードの対応・無料枠・料金・エグレス(転送)コストは重要な比較ポイントです。AWS S3 が事実上の業界標準ですが、コスト・エッジ配信・特定用途によってはより適した選択肢があります。本記事では主要10サービスの仕様と用途別の推奨を整理します。
単体アップロード上限・マルチパート上限・無料枠 比較表
| サービス | 単体上限 | マルチパート上限 | 無料枠 | 月額目安(100GB) |
|---|---|---|---|---|
| AWS S3 | 5 GB | 5 TB | 5GB・2,000リクエスト/月(12か月) | $2.30〜 |
| Google Cloud Storage | 5 TB(単一オブジェクト) | 5 TB | 5GB(Standard、US東部) | $2.00〜 |
| Azure Blob Storage | ブロック: 4.75TB、ページ: 8TB | 195GB/ブロック × 50,000ブロック | 12か月5GB(LRS) | $1.84〜 |
| Cloudflare R2 | 5 GB | 5 TB | 10GB/月・100万操作/月(恒久) | $1.50(エグレス無料) |
| Backblaze B2 | 5 GB | 10 TB | 10GB(恒久) | $0.60〜 |
| DigitalOcean Spaces | 5 GB | 5 TB | 250GB + 1TB転送/月($5〜) | $5(250GBまで込み) |
| Wasabi | 1 TB | 1 TB | なし(試用のみ) | $0.68(エグレス無料) |
| MinIO | 5 TB(実装依存) | 5 TB | セルフホスト(無制限) | インフラコストのみ |
| Firebase Storage | 実質無制限(GCS利用) | GCS準拠 | 5GB(Sparkプラン) | $0.026/GB〜 |
| Supabase Storage | 50MB(Free)/ 50GB(Pro) | Pro以上で対応 | 1GB(Freeプラン) | $0.021/GB(Pro) |
※料金は2026年4月時点の目安です。リージョン・ストレージクラス・利用量によって変動します。エグレス(データ転送)コストは上表に含まれていないものが大半です。
各サービスの特徴と選び方
AWS S3
クラウドストレージの事実上の標準。S3 互換 API を多くのサービスが実装しており、ライブラリやツールのエコシステムが最も充実しています。マルチパートアップロードは aws-sdk で自動化でき、最小チャンクサイズ 5MB・最大 10,000パーツで最大 5TB のオブジェクトをアップロードできます。CloudFront との連携でエッジ配信も容易です。ただしエグレスコストが高く($0.09/GB〜)、大量転送があるサービスではコストが課題になります。
Google Cloud Storage(GCS)
単一オブジェクトの上限が 5TB と大きく、大容量ファイルを単一オブジェクトとして管理したいユースケースに向いています。BigQuery・Vertex AI などの GCP サービスとのシームレスな連携が強みで、データ分析パイプラインを構築する場合の第一候補です。転送コストは S3 より若干安い傾向があります。
Azure Blob Storage
Microsoft エコシステム(Office 365・Active Directory・Azure Functions など)との親和性が高く、エンタープライズ向けの認証・コンプライアンス機能が充実しています。ブロック BLOB は最大 4.75TB のオブジェクト、ページ BLOB(仮想ディスク用)は最大 8TB をサポートします。ホットティア・クールティア・アーカイブティアでコストを最適化できます。
Cloudflare R2
最大の特徴はエグレスコストが無料という点。S3 互換 API を採用しているため、既存の S3 クライアントをほぼそのまま使えます。Workers(エッジコンピューティング)との統合が強力で、エッジで直接ストレージを操作するアーキテクチャが可能です。無料枠が恒久的に 10GB/月あり、個人開発や小規模サービスの出発点に最適です。
Backblaze B2
業界最安値クラスの料金($0.006/GB/月)で、コスト重視のバックアップ・メディアアーカイブ用途に向いています。Cloudflare との「Bandwidth Alliance」でB2からCloudflareへのエグレスが無料になる組み合わせが人気です。S3 互換 API を提供しており、移行も容易です。
DigitalOcean Spaces
月 $5 から 250GB ストレージ + 1TB 転送帯域が含まれる定額制が特徴。小規模サービスで予算を予測しやすいのが利点です。CDN が標準で付属し、設定が簡単です。DigitalOcean Droplets(仮想マシン)と同リージョンで使うと転送が無料になります。
Wasabi
S3 互換でエグレスが無料(Wasabi から直接ダウンロードする場合)、ストレージ料金も安価($0.0068/GB/月)です。ただし、保存から 90日以内に削除したデータにも 90日分の料金が発生する最低保存期間ルールがある点に注意が必要です。バックアップ・コールドデータの長期保管に向いています。
MinIO
オープンソースの S3 互換オブジェクトストレージで、オンプレミスやプライベートクラウドにセルフホストできます。Kubernetes との親和性が高く、Helm チャートが公式提供されています。データをクラウドに出したくない規制産業やオンプレ環境での開発・テスト用途に活用されます。
Firebase Storage
内部的には GCS を使用しており、Firebase SDK を使ったモバイル/Webアプリからの直接アップロードが簡単に実装できます。Firebase Authentication と連携した細かいアクセス制御(Security Rules)が強みです。ただし Spark(無料)プランでは単一ファイルの上限が事実上低く設定されている場合があります。
Supabase Storage
PostgreSQL ベースの BaaS(Backend as a Service)である Supabase のストレージ機能。Supabase Auth との RLS(Row Level Security)ベースのアクセス制御が独自の強みです。Free プランはファイルサイズ上限が 50MB と低いため、大容量ファイルには Pro プラン(50GB/ファイル)以上が必要です。
用途別おすすめ
| 用途 | 第1候補 | 理由 |
|---|---|---|
| 小規模 SaaS の出発点 | Cloudflare R2 | エグレス無料・無料枠が恒久的・S3互換 |
| 大容量メディアアーカイブ | Backblaze B2 + Cloudflare | 最安値ストレージ+エグレス無料の組み合わせ |
| エッジ配信・グローバル展開 | Cloudflare R2 / AWS S3 + CloudFront | CDN統合・低レイテンシ配信 |
| コスト最重視 | Wasabi / Backblaze B2 | 業界最安値クラスのストレージ料金 |
| エンタープライズ・コンプライアンス | AWS S3 / Azure Blob | 豊富な認証・暗号化・監査機能 |
| モバイルアプリ直接アップロード | Firebase Storage / Supabase Storage | SDKと認証の統合が容易 |
| オンプレミス・プライベートクラウド | MinIO | S3互換・セルフホスト・OSS |
| GCP サービスとの連携 | Google Cloud Storage | BigQuery・Vertex AI とのシームレス連携 |
マルチパートアップロードとは
大容量ファイルを小さなパーツに分割して並列アップロードする仕組みがマルチパートアップロードです。S3 では 100MB を超えるファイルに推奨され、5GB を超えるファイルには必須です。主なメリットは以下のとおりです。
- 並列アップロードによるスループット向上
- ネットワーク断時に失敗したパーツのみ再送信できる(再開可能)
- 単体リクエストの 5GB 制限を回避して最大 5TB を送信できる
// AWS SDK v3 でのマルチパートアップロード例
import { S3Client, CreateMultipartUploadCommand,
UploadPartCommand, CompleteMultipartUploadCommand } from '@aws-sdk/client-s3';
const s3 = new S3Client({ region: 'ap-northeast-1' });
async function multipartUpload(bucket, key, file) {
// アップロードの開始
const { UploadId } = await s3.send(new CreateMultipartUploadCommand({
Bucket: bucket, Key: key,
}));
const chunkSize = 10 * 1024 * 1024; // 10MB
const parts = [];
for (let i = 0; i * chunkSize < file.size; i++) {
const chunk = file.slice(i * chunkSize, (i + 1) * chunkSize);
const { ETag } = await s3.send(new UploadPartCommand({
Bucket: bucket, Key: key,
UploadId, PartNumber: i + 1,
Body: chunk,
}));
parts.push({ ETag, PartNumber: i + 1 });
}
// パーツの結合(完了)
await s3.send(new CompleteMultipartUploadCommand({
Bucket: bucket, Key: key,
UploadId, MultipartUpload: { Parts: parts },
}));
}
この記事で使えるテストファイル(無料)
- → 境界値テスト用ファイル一覧 — 各クラウドストレージの上限付近でアップロードをテスト
- → PNGテスト画像一覧 — 様々なサイズの画像でストレージの動作を確認