Cloud Storage for Firebase を使用すると、画像や動画などのユーザー作成コンテンツをアップロードして共有し、リッチメディア コンテンツをアプリに組み込むことができます。データは Google Cloud Storage バケットに格納されます。これはエクサバイト スケールのオブジェクト ストレージ ソリューションで、高可用性とグローバルな冗長性を備えています。Cloud Storage for Firebase を使用すると、モバイル デバイスやウェブブラウザから直接ファイルを安全にアップロードでき、不安定なネットワークでも安心して行えます。
始める前に
Android アプリのスタートガイドをまだ完了していない場合は、必ず完了してください。これには以下が含まれます。
Firebase プロジェクトの作成。
プロジェクトに Android アプリを登録すること、および Firebase の依存関係、Google サービス プラグイン、Firebase 構成ファイル(
google-services.json
)をアプリに追加して、Firebase にアプリを接続すること。
Firebase プロジェクトが 従量課金制の Blaze 料金プランに登録されていることを確認します。Firebase と Google Cloud を初めて使用する場合は、$300 のクレジットを利用できるかどうかご確認ください。
デフォルトの Cloud Storage バケットを作成する
Firebase コンソールのナビゲーション パネルで [ストレージ] を選択します。
プロジェクトが従量課金制の Blaze の料金プランにまだ登録されていない場合は、プロジェクトをアップグレードするよう求められます。
[開始] をクリックします。
デフォルトのバケットのロケーションを選択します。
、US-CENTRAL1
、US-EAST1
のバケットは、Google Cloud Storage の 「無料枠」を利用できます。他のすべてのロケーションのバケットは、Google Cloud Storage の料金と使用量に従います。US-WEST1
必要に応じて、後で複数のバケットを作成し、それぞれにロケーションを割り当てることができます。
デフォルト バケットの Firebase Security Rules を構成します。開発時に公開アクセスルールの設定を考慮してください。
[完了] をクリックします。
バケットは、Firebase コンソールの [Cloud Storage ファイル] タブで確認できます。デフォルトのバケット名の形式は PROJECT_ID.firebasestorage.app
公開アクセスを設定する
Cloud Storage for Firebase には宣言型のルール言語が用意されているため、データの構造化方法、インデックスの作成方法、データの書き込みと読み取りの許可を定義できます。認証ユーザーのみがデータの読み取りと書き込みができるように、Cloud Storage への読み取りと書き込みのアクセスはデフォルトでは制限されています。Authentication を設定せずに開始するには、公開アクセスルールを構成します。
この場合、アプリを使用しない人を含むあらゆる人々に Cloud Storage が公開されるため、認証を設定するときに必ず Cloud Storage へのアクセス制限を再設定してください。
アプリに Cloud Storage SDK を追加する
モジュール(アプリレベル)の Gradle ファイル(通常は<project>/<app-module>/build.gradle.kts
または <project>/<app-module>/build.gradle
)に、Android 用 Cloud Storage ライブラリの依存関係を追加します。ライブラリのバージョニングの制御には、Firebase Android BoM を使用することをおすすめします。
dependencies { // Import the BoM for the Firebase platform implementation(platform("com.google.firebase:firebase-bom:33.7.0")) // Add the dependency for the Cloud Storage library // When using the BoM, you don't specify versions in Firebase library dependencies implementation("com.google.firebase:firebase-storage") }
Firebase Android BoM を使用すると、アプリは常に互換性のあるバージョンの Firebase Android ライブラリを使用します。
(代替方法)BoM を使用せずに Firebase ライブラリの依存関係を追加する
Firebase BoM を使用しない場合は、依存関係の行でそれぞれの Firebase ライブラリのバージョンを指定する必要があります。
アプリで複数の Firebase ライブラリを使用する場合は、すべてのバージョンの互換性を確保するため、BoM を使用してライブラリのバージョンを管理することを強くおすすめします。
dependencies { // Add the dependency for the Cloud Storage library // When NOT using the BoM, you must specify versions in Firebase library dependencies implementation("com.google.firebase:firebase-storage:21.0.1") }
アプリで Cloud Storage を設定する
アプリのコードベースにある Firebase 構成ファイル(
google-services.json
)が、デフォルトの Cloud Storage バケットの名前で更新されていることを確認します。このダウンロードした構成ファイルを使用して、アプリのモジュール(アプリレベル)ディレクトリにある既存の
google-services.json
ファイルを置き換えます。アプリにダウンロードした最新の構成ファイルのみが含まれていること、ファイル名に
(2)
などの余分な文字が追加されていないことを確認します。
FirebaseStorage
のインスタンスを作成して、Cloud Storage バケットにアクセスします。Kotlin
storage = Firebase.storage
// Alternatively, explicitly specify the bucket name URL. // val storage = Firebase.storage("gs://BUCKET_NAME")
Java
FirebaseStorage storage = FirebaseStorage.getInstance();
// Alternatively, explicitly specify the bucket name URL. // FirebaseStorage storage = FirebaseStorage.getInstance("gs://BUCKET_NAME");
Cloud Storage を使い始める準備ができました。
次のステップでは、Cloud Storage参照を作成する方法を学習する。
高度な設定
次のようないくつかの使用例では、追加の設定が必要です。
- 複数のリージョンで Cloud Storage バケットを使用する
- さまざまなストレージクラスで Cloud Storage バケットを使用する
- 複数の認証ユーザーが同一アプリ内で Cloud Storage バケットを使用する
最初の使用例は、ユーザーが世界中に存在し、それぞれのユーザーの近くにデータを保存したい場合に最適です。たとえば、レイテンシを短縮するため、米国、ヨーロッパ、アジアの各リージョンでバケットを作成して、各リージョンのユーザーのデータをそこに保存するといったことができます。
2 番目の使用例は、アクセス パターンの異なるデータがある場合に役立ちます。たとえば、写真などの頻繁にアクセスされるコンテンツを格納するためにはマルチリージョンまたはリージョン バケットを、またユーザー バックアップなどのアクセス頻度の低いコンテンツを格納するためには Nearline または Coldline バケットをそれぞれ設定できます。
上記のどちらの場合も、複数の Cloud Storage バケットを使用します。
3 番目の使用例は、Google ドライブのような、ユーザーが複数のログイン アカウント(個人用アカウントや仕事用アカウントなど)を持つことができるアプリを作成する場合に役立ちます。カスタムの Firebase アプリ インスタンスを使用して、追加の各アカウントを認証できます。
複数の Cloud Storage バケットを使用する
このガイドの前半で説明したデフォルト バケット以外の Cloud Storage バケットを使用する場合、または単一のアプリで複数の Cloud Storage バケットを使用する場合は、カスタム バケットを参照する FirebaseStorage
のインスタンスを作成できます。
Kotlin
// Get a non-default Storage bucket val storage = Firebase.storage("gs://my-custom-bucket")
Java
// Get a non-default Storage bucket FirebaseStorage storage = FirebaseStorage.getInstance("gs://my-custom-bucket");
インポートされたバケットの操作
既存の Cloud Storage バケットを Firebase にインポートする場合は、Google Cloud SDK に含まれている gsutil
ツールを使用して、Firebase からこれらのファイルにアクセスできるようにする必要があります。
gsutil -m acl ch -r -u service-PROJECT_NUMBER@gcp-sa-firebasestorage.iam.gserviceaccount.com gs://BUCKET_NAME
プロジェクト番号を確認する方法については、Firebase プロジェクトの概要をご覧ください。
これは、新しく作成されるバケットには影響しません。新しく作成されるバケットには、Firebase を許可するデフォルトのアクセス制御が設定されます。これは暫定的な措置であり、将来は自動的に行われるようになります。
カスタムの Firebase アプリを使用する
カスタム FirebaseApp
を使用してより複雑なアプリを作成するには、このアプリで初期化される FirebaseStorage
のインスタンスを作成します。
Kotlin
// Get the default bucket from a custom FirebaseApp val storage = Firebase.storage(customApp!!) // Get a non-default bucket from a custom FirebaseApp val customStorage = Firebase.storage(customApp, "gs://my-custom-bucket")
Java
// Get the default bucket from a custom FirebaseApp FirebaseStorage storage = FirebaseStorage.getInstance(customApp); // Get a non-default bucket from a custom FirebaseApp FirebaseStorage customStorage = FirebaseStorage.getInstance(customApp, "gs://my-custom-bucket");
次のステップ
アプリを起動する準備をする。
App Check を有効にして、自分のアプリだけがストレージ バケットにアクセスできるようにする。
Google Cloud コンソールでプロジェクトの予算アラートを設定する。
Firebase コンソールの [使用量と請求額] ダッシュボードをモニタリングして、複数の Firebase サービスを通じたプロジェクトの全体的な使用状況を確認する。 使用状況の詳しい情報を確認するには、Cloud Storage 使用状況ダッシュボードをご利用ください。
Firebase リリース チェックリストを確認する。