Admin Cloud Storage API の概要

Cloud Storage for Firebase はデータを Google Cloud Storage バケットに格納します。これはエクサバイト スケールのオブジェクト ストレージ ソリューションで、高い可用性とグローバルな冗長性を備えています。Firebase Admin SDK を使用すると、特権環境から Cloud Storage バケットに直接アクセスできます。さらに、Google Cloud Storage API を使用して、バケットに格納されているオブジェクトを操作できます。

Admin SDK では、共有可能な URL を作成して、ユーザーがバケットにオブジェクトをダウンロードできるようにすることも可能です。

デフォルトのバケットを使用する

Admin SDK を初期化するときに、デフォルトのバケット名を指定できます。これにより、認証済みのバケットへの参照を取得できます。

バケット名には、gs:// などのプロトコル接頭辞を含めないでください。たとえば、Firebase コンソールに表示されているバケットの URL が gs://PROJECT_ID.firebasestorage.app の場合、文字列 PROJECT_ID.firebasestorage.app を Admin SDK に渡します。

Node.js

const { initializeApp, cert } = require('firebase-admin/app');
const { getStorage } = require('firebase-admin/storage');

const serviceAccount = require('./path/to/serviceAccountKey.json');

initializeApp({
  credential: cert(serviceAccount),
  storageBucket: '<BUCKET_NAME>.appspot.com'
});

const bucket = getStorage().bucket();

// 'bucket' is an object defined in the @google-cloud/storage library.
// See https://googlecloudplatform.github.io/google-cloud-node/#/docs/storage/latest/storage/bucket
// for more details.

Java

FileInputStream serviceAccount = new FileInputStream("path/to/serviceAccountKey.json");

FirebaseOptions options = FirebaseOptions.builder()
    .setCredentials(GoogleCredentials.fromStream(serviceAccount))
    .setStorageBucket("<BUCKET_NAME>.appspot.com")
    .build();
FirebaseApp.initializeApp(options);

Bucket bucket = StorageClient.getInstance().bucket();

// 'bucket' is an object defined in the google-cloud-storage Java library.
// See http://googlecloudplatform.github.io/google-cloud-java/latest/apidocs/com/google/cloud/storage/Bucket.html
// for more details.

Python

import firebase_admin
from firebase_admin import credentials
from firebase_admin import storage

cred = credentials.Certificate('path/to/serviceAccountKey.json')
firebase_admin.initialize_app(cred, {
    'storageBucket': 'PROJECT_ID.firebasestorage.app'
})

bucket = storage.bucket()

# 'bucket' is an object defined in the google-cloud-storage Python library.
# See https://googlecloudplatform.github.io/google-cloud-python/latest/storage/buckets.html
# for more details.

Go

import (
	"context"
	"log"

	firebase "firebase.google.com/go/v4"
	"firebase.google.com/go/v4/auth"
	"google.golang.org/api/option"
)

config := &firebase.Config{
	StorageBucket: "<BUCKET_NAME>.appspot.com",
}
opt := option.WithCredentialsFile("path/to/serviceAccountKey.json")
app, err := firebase.NewApp(context.Background(), config, opt)
if err != nil {
	log.Fatalln(err)
}

client, err := app.Storage(context.Background())
if err != nil {
	log.Fatalln(err)
}

bucket, err := client.DefaultBucket()
if err != nil {
	log.Fatalln(err)
}
// 'bucket' is an object defined in the cloud.google.com/go/storage package.
// See https://godoc.org/cloud.google.com/go/storage#BucketHandle
// for more details.

Admin SDK から返されたバケット参照を公式の Google Cloud Storage クライアント ライブラリとともに使用すると、Firebase プロジェクトに関連付けられたバケット内のコンテンツのアップロード、ダウンロード、変更を行うことができます。Firebase Admin SDK を使用する場合は、Google Cloud Storage ライブラリを認証する必要はありません。Admin SDK から返されるバケット参照は、Firebase アプリの初期化に使用する認証情報で認証済みです。

カスタム バケットを使用する

このガイドの前半で説明したデフォルト バケット以外の Cloud Storage バケットを使用する場合や、単一のアプリで複数の Cloud Storage バケットを使用する場合は、カスタム バケットへの参照を取得できます。

Node.js

const bucket = getStorage().bucket('my-custom-bucket');

Java

Bucket bucket = StorageClient.getInstance().bucket("my-custom-bucket");

Python

bucket = storage.bucket('my-custom-bucket')

Go

 bucket, err := client.Bucket("my-custom-bucket")

カスタムの Firebase アプリを使用する

複数の Firebase アプリと対話する複雑なアプリケーションを作成する場合には、次のように、特定の Firebase アプリに関連付けられた Cloud Storage バケットにアクセスできます。

Node.js

const bucket = getStorage(customApp).bucket();

Java

Bucket bucket = StorageClient.getInstance(customApp).bucket();

Python

bucket = storage.bucket(app=custom_app)

Go

otherClient, err := otherApp.Storage(context.Background())
bucket, err := otherClient.Bucket("other-app-bucket")

共有可能なダウンロード URL を取得する

Admin SDK を使用して、バケットに保存されているファイルに有効期限のないダウンロード URL を生成できます。この URL を知っているユーザーは誰でもファイルに永続的にアクセスできます。

Node.js

const { getStorage, getDownloadURL } = require('firebase-admin/storage');

const fileRef = getStorage().bucket('my-bucket').file('my-file');
const downloadURL= await getDownloadURL(fileRef);

Google Cloud Storage クライアント ライブラリ

Firebase Admin SDK は、Google Cloud Storage クライアント ライブラリを介して Cloud Storage にアクセスします。Admin SDK から返されるバケット参照は、これらのライブラリで定義されたオブジェクトです。返されたバケット参照をファイルのアップロードダウンロードなどで使用する方法については、Google Cloud Storage クライアント ライブラリのドキュメントと API リファレンスをご覧ください。