Cloud Storage for Firebase を使用して画像や動画などのユーザー作成コンテンツをアップロードして共有し、リッチメディア コンテンツをアプリに組み込むことができます。データは Google Cloud Storage バケットに格納されます。これはエクサバイト スケールのオブジェクト ストレージ ソリューションで、高い可用性とグローバルな冗長性を備えています。Cloud Storage を使うと、モバイル デバイスやウェブブラウザから直接ファイルを安全にアップロードでき、不安定なネットワークでも安心して行えます。
前提条件
まだ追加していない場合は、Firebase を Android プロジェクトに追加します。
デフォルトの Storage バケットを作成する
Firebase コンソールのナビゲーション パネルで [Storage] を選択し、[始める] をクリックします。
セキュリティ ルールを使用した Storage データの保護に関するメッセージを確認します。開発時に公開アクセスルールの設定を考慮してください。
デフォルトの Storage バケットのロケーションを選択します。
このロケーション設定が、プロジェクトのデフォルトの Google Cloud Platform(GCP)リソース ロケーションになります。このロケーションは、プロジェクト内のロケーション設定が必要な GCP サービスで使用されます。具体例としては、Cloud Firestore データベースや App Engine アプリ(Cloud Scheduler を使用する場合に必要)などがあります。
ロケーションを選択できない場合は、プロジェクトにデフォルトの GCP リソース ロケーションがすでに設定されています。このロケーションは、プロジェクトの作成時か、ロケーション設定を必要とする別のサービスの設定時に設定されたものです。
Blaze プランをご利用の場合は、それぞれ独自のロケーションを使用する複数のバケットを作成できます。
[完了] をクリックします。
公開アクセスの設定
Cloud Storage for Firebase には宣言型のルール言語が用意されているため、データの構造化、インデックスの作成方法、データの書き込みと読み取りのタイミングを定義できます。認証ユーザーのみがデータの読み取りと書き込みを行えるように、Storage への読み書きアクセスはデフォルトで制限されています。Authentication を設定せずに開始するには、公開アクセスルールを構成します。
この場合、アプリを使用しない人を含むあらゆる人々に Storage が公開されるため、認証を設定するときに必ず Storage へのアクセス制限を再設定してください。
アプリに Cloud Storage SDK を追加する
Firebase Android BoM を使用して、モジュール(アプリレベル)の Gradle ファイル(通常はapp/build.gradle
)で Cloud Storage Android ライブラリの依存関係を宣言します。
Java
dependencies { // Import the BoM for the Firebase platform implementation platform('com.google.firebase:firebase-bom:26.5.0') // Declare 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 { // Declare 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:19.2.1' }
Kotlin+KTX
dependencies { // Import the BoM for the Firebase platform implementation platform('com.google.firebase:firebase-bom:26.5.0') // Declare 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-ktx' }
Firebase Android BoM を使用すると、アプリは常に互換性のあるバージョンの Firebase Android ライブラリを使用します。
(別の方法)BoM を使用せずに Firebase ライブラリの依存関係を宣言する
Firebase BoM を使用しない場合は、依存関係の行でそれぞれの Firebase ライブラリのバージョンを指定する必要があります。
アプリで複数の Firebase ライブラリを使用する場合は、すべてのバージョンの互換性を確保するため、BoM を使用してライブラリのバージョンを管理することを強くおすすめします。
dependencies { // Declare 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-ktx:19.2.1' }
Cloud Storage を設定する
ストレージ バケットにアクセスするための最初の手順は、FirebaseStorage
のインスタンスの作成です。
Java
FirebaseStorage storage = FirebaseStorage.getInstance();
Kotlin+KTX
storage = Firebase.storage
これで Cloud Storage が使えるようになりました。
まず、Cloud Storage 参照を作成する方法を学びましょう。
高度な設定
次のようないくつかの使用例では、追加の設定が必要です。
- 複数のリージョンでストレージ バケットを使用する
- さまざまなストレージ クラスでストレージ バケットを使用する
- 複数の認証ユーザーが同一アプリ内でストレージ バケットを使用する
最初の使用例は、ユーザーが世界中に存在し、それぞれのユーザーの近くにデータを保存したい場合に最適です。たとえば、レイテンシを短縮するため、米国、ヨーロッパ、アジアの各リージョンでバケットを作成して、各リージョンのユーザーのデータをそこに保存するといったことができます。
2 番目の使用例は、アクセス パターンの異なるデータがある場合に役立ちます。たとえば、写真などの頻繁にアクセスされるコンテンツを格納するためにはマルチリージョンまたはリージョン バケットを、またユーザー バックアップなどのアクセス頻度の低いコンテンツを格納するためには Nearline または Coldline バケットをそれぞれ設定できます。
上記のどちらの場合も、複数のストレージ バケットを使用します。
3 番目の使用例は、Google ドライブのような、ユーザーが複数のログイン アカウント(個人用アカウントや仕事用アカウントなど)を持つことができるアプリを作成する場合に役立ちます。カスタムの Firebase アプリ インスタンスを使用して、追加の各アカウントを認証できます。
複数のストレージ バケットを使用する
上記のデフォルト以外のストレージ バケットを使用する場合、または単一のアプリで複数のストレージ バケットを使用する場合は、カスタム バケットを参照する FirebaseStorage
のインスタンスを作成できます。
Java
// Get a non-default Storage bucket FirebaseStorage storage = FirebaseStorage.getInstance("gs://my-custom-bucket");
Kotlin+KTX
// Get a non-default Storage bucket val storage = Firebase.storage("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://<your-cloud-storage-bucket>
プロジェクト番号を確認する方法については、Firebase プロジェクトの概要をご覧ください。
これは、新しく作成されるバケットには影響しません。新しく作成されるバケットには、Firebase を許可するデフォルトのアクセス制御が設定されます。これは暫定的な措置であり、将来は自動的に行われるようになります。
カスタムの Firebase アプリを使用する
カスタム FirebaseApp
を使用してより複雑なアプリを作成するには、このアプリで初期化される FirebaseStorage
のインスタンスを作成します。
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");
Kotlin+KTX
// 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")
次のステップ
アプリをリリースする準備をします。
- Google Cloud Console でプロジェクトの予算アラートを設定する。
- Firebase コンソールで使用量と請求ダッシュボードをモニタリングする。Storage 使用状況ダッシュボードをモニタリングすることもできます。
- Firebase リリース チェックリストを確認する。