Cloud Service
Cloud Storage for Firebase
モバイル/Web アプリから直接ファイルを安全にアップロード・ダウンロードでき、サーバーを書かずに済む。Firebase Security Rules で認可し、不安定回線でも再開できる Cloud Storage for Firebase。AWS の Amplify Storage(S3)に相当。
- 1.クライアント SDK から直接 Cloud Storage のバケットへ読み書きできるマネージドストレージ。
- 2.認可は Firebase Security Rules、認証は Firebase Authentication と連携して宣言的に制御。
- 3.実体は Cloud Storage のバケット。サーバー側からは gcloud や各言語 Admin SDK でも操作できる。
解決する課題
写真・動画・ユーザー生成ファイルを扱うアプリで、アップロード用のサーバーや署名処理を自前で作らずに、クライアントから直接かつ安全にファイルを保存できます。
- 画像・動画・音声などのユーザー生成コンテンツを、独自バックエンドを書かずに保存
- モバイル/Web のクライアント SDK から直接アップロード/ダウンロードできる
- 電波が不安定でもアップロード/ダウンロードを自動で再開(中断に強い)
- Firebase Authentication のユーザーとSecurity Rulesで、ファイル単位の認可を宣言的に記述
主要概念と用語
- バケット: ファイルを入れる入れ物。実体は Cloud Storage のバケットで、Firebase プロジェクトに既定バケットが 1 つ用意される(追加バケットも利用可)
- 参照(reference): バケット内のファイルやフォルダを指すポインタ。
gs://バケット名/パスまたは HTTPS の形で表す - Firebase Security Rules: パスごとに read/write を許可/拒否する宣言的なルール言語。認可はサーバーコードではなくこのルールで行う
- Firebase Authentication 連携: ルール内で
request.authを参照し、ログイン中ユーザーや UID 単位でアクセス制御できる - メタデータ: 各ファイルに付く
contentType(MIME タイプ)、サイズ、作成日時、カスタムメタデータなど - アップロードタスク: 進捗・一時停止・再開・キャンセルを扱える、再開可能アップロードの単位
- ダウンロード URL: クライアントから共有できる、トークン付きの HTTPS ダウンロードリンク(取り消し可能)
- Admin SDK / サーバーアクセス: サーバー側は Google Cloud の認証情報で同じバケットを直接操作できる
仕様・制限・クォータ
- 実体が Cloud Storage のため、1 ファイル最大 5TiB など Cloud Storage 本体の上限・耐久性を引き継ぐ
- 認可は Security Rules が基本。ルールは既定で拒否寄りで、明示的に許可しない限りアクセスできない
- クライアントからの認可は Security Rules、サーバー側(Admin SDK 等)からのアクセスは Cloud IAM に従う(Security Rules はサーバーアクセスには適用されない)
- 既定バケットは Firebase プロジェクト作成時のロケーション設定に従う。ロケーションは後から変更できないため、最初の選定が重要
- アップロード/ダウンロードは再開可能で、ネットワーク中断後に途中から続行できる
- Security Rules の評価には複雑さの上限があり、ルールはなるべく単純に保つ
- リクエスト数や帯域などの実数値・上限はプロジェクト設定や時期で変わるため、最新値は公式を参照
内部の仕組み
Cloud Storage for Firebase は、Cloud Storage のバケットに対してクライアント向けの認可レイヤーと SDK を載せたものです。クライアントは Firebase の SDK から直接バケットへ接続し、リクエストごとに Firebase Authentication のトークンと Security Rules が照合されて許可/拒否が決まります。
- クライアント SDK はファイルパス(参照)への read/write を発行し、Security Rules が
request.authやパス・メタデータを見て判定する - ファイルの実体・冗長化・暗号化・耐久性は下位の Cloud Storage がそのまま担う
- サーバー側(Admin SDK や gcloud)からのアクセスは Security Rules を経由せず、Cloud IAM の権限で同じバケットを操作する
- アップロード/ダウンロードは分割転送で行われ、中断時は完了済みの部分を引き継いで再開する
Security Rules はクライアント SDK 経由のアクセスを制御するためのものです。Admin SDK・gcloud・サーバーコードからのアクセスには適用されず、そこでは Cloud IAM が効きます。両方の経路を前提に権限設計してください。
設計パターン / ベストプラクティス
- ユーザーごとのパス分離:
user/{uid}/...のようにパスへ UID を含め、ルールでrequest.auth.uidと一致するパスだけ許可する - メタデータでバリデーション: ルールで
request.resource.size(サイズ)やrequest.resource.contentType(MIME タイプ)を検査し、巨大ファイルや想定外形式を拒否 - 重い後処理はサーバーへ: サムネ生成や変換は、アップロードをCloud Functions / Eventarc でトリガーし、Cloud Run などで非同期処理
- 公開配信は分離: 公開してよいファイルは専用パス/バケットに分け、非公開データと混在させない
- オフライン耐性: モバイルでは再開可能アップロードを前提に、進捗表示・一時停止・再開の UI を用意する
運用・監視
- バケットは Cloud Storage の実体なので、Cloud Monitoring で容量・リクエスト数・エラー率を可視化できる
- Cloud Audit Logs でアクセスを監査(特にサーバー経路や設定変更)
- アップロード/ダウンロードの失敗の多くは Security Rules の拒否・認証トークン切れ・パス不一致が原因。まずルールとログを確認
- Security Rules は本番反映前にシミュレーター/テストで挙動を検証し、想定外の許可がないかを点検
- ストレージの棚卸し・コスト分析は Storage Insights など Cloud Storage 側のツールを併用
コスト
課金は実体である Cloud Storage の料金に従い、「保存量」「オペレーション(API 呼び出し)」「ネットワーク下り(ダウンロード転送)」が中心です。Firebase 側の料金プラン(無料枠を含む従量課金プラン)と組み合わさります。
| 課金要素 | 課金対象 | 抑え方 |
|---|---|---|
| 保存量 | 保存しているデータ量 | 不要ファイルの削除・ライフサイクル管理 |
| オペレーション | アップロード/ダウンロード等の API 回数 | 無駄な再取得を減らしキャッシュを使う |
| 下り転送 | クライアントへのダウンロード量 | 配信は CDN 併用・画像は適切なサイズに |
実体が Cloud Storage なので、オブジェクトライフサイクル管理やストレージクラス(Nearline/Coldline 等)での階層化もそのまま使えます。古いファイルを自動で安いクラスへ移すとコストを抑えられます。
セキュリティ
- 認可の基本は Firebase Security Rules。既定は拒否寄りで、許可は明示的に書く
- Firebase Authentication と連携し、
request.authでログイン状態や UID 単位の制御ができる - ルールでファイルサイズ・MIME タイプ・パスを検査し、不正なアップロードを入口で弾く
- 保存時暗号化は Cloud Storage により既定で有効。要件に応じて CMEK などへ切替可能(バケット設定に従う)
- サーバー経路は Cloud IAM で最小権限。サービスアカウント鍵の管理に注意
allow read, write: if true; のような全許可ルールは、誰でも全ファイルを読み書きできる状態です。開発初期の暫定設定をそのまま本番に出すと情報漏えい・改ざんの直接原因になります。公開前に必ず認証・パス・メタデータで絞り込んでください。
関連サービス・比較
サーバーレスな保存先という点で Cloud Firestore と混同されがちですが、役割が異なります。バイナリの大きなファイルは Cloud Storage for Firebase、構造化データやリアルタイム同期は Firestore が適します。
| 観点 | Cloud Storage for Firebase | Cloud Firestore |
|---|---|---|
| 主な用途 | 画像/動画など大きなファイル | 構造化データ/ドキュメント |
| データ形式 | オブジェクト(バイナリ) | ドキュメント/コレクション |
| 認可 | Firebase Security Rules | Firebase Security Rules |
| 実体 | Cloud Storage のバケット | Firestore データベース |
| 向く処理 | アップロード/ダウンロード/配信 | クエリ/リアルタイム同期 |
ファイル本体は Cloud Storage for Firebase に保存し、そのパスやメタデータ(URL・所有者・タグ)を Firestore に持つ構成が定番です。検索や一覧は Firestore、実体の取得は Storage に分担させます。
ハンズオン / CLI例
クライアントは Firebase SDK から操作しますが、バケットの実体は Cloud Storage なのでサーバー側からは gcloud storage でも扱えます。Security Rules のデプロイは Firebase CLI を使います。
# Firebase プロジェクトの既定バケットを確認(Google Cloud CLI)
gcloud storage buckets list --project=my-firebase-project
# サーバー側からファイルをアップロード(実体は Cloud Storage バケット)
gcloud storage cp ./avatar.png gs://my-firebase-project.appspot.com/user/uid123/avatar.png
# バケットのライフサイクルを適用(30日経過で Nearline へ等を JSON で定義)
gcloud storage buckets update gs://my-firebase-project.appspot.com \
--lifecycle-file=lifecycle.json
# Security Rules を Firebase CLI でデプロイ(storage.rules を反映)
firebase deploy --only storage
Google Cloud Service
Cloud Storage for Firebaseを実務で読む
TL;DRは入口です。実際に選ぶ・使う段階では、何を解決するか、何と比較するか、導入後にどこで詰まるかまで見る必要があります。
解決すること
ストレージ
比較で見る軸
クラウド: Google Cloud / カテゴリ: ストレージ / 難易度: basic
導入後に効く点
認可は Firebase Security Rules、認証は Firebase Authentication と連携して宣言的に制御。
先に潰すリスク
サービス単体ではなく、権限、ネットワーク、監視、課金、バックアップを含めて設計する必要がある。
- クラウド
- Google Cloud
- カテゴリ
- ストレージ
- 難易度
- basic
- 関連資格
- —
- 設計柱
- security / reliability / operational
判断チェックリスト
- 自社の用途が「ストレージ / security」に近いか確認する。
- 強みである「クライアント SDK から直接 Cloud Storage のバケットへ読み書きできるマネージドストレージ。」が本当に評価軸になるか確認する。
- 注意点の「サービス単体ではなく、権限、ネットワーク、監視、課金、バックアップを含めて設計する必要がある。」を運用で吸収できるか確認する。
- 公開値や仕様値は、対象プラン・対象機種・対象リージョンまで確認する。
- 既存システム、ID、ネットワーク、監視、バックアップとの接続方法を先に洗い出す。
- 小さく試してから、本番移行、権限設計、障害時手順、コスト監視を決める。