# firestore を server side で使う
# ポイント
firestore server
でググると筆頭にでてくるクイックスタート: サーバー クライアント ライブラリの使用 (opens new window)が罠で、この Google Cloud の fireStore のドキュメントがなんのためのドキュメントなのかよくわからないのですがタイトルに反してこのドキュメントは firestore を Server で使う事に全く関係ありません
参照すべきドキュメントは サーバーに Firebase Admin SDK を追加する (opens new window)のこちらです
# 手順
- SDK の取得
go の場合は以下
go get firebase.google.com/go
- サービスアカウント用秘密鍵ファイルの取得
- Firebase コンソールで、当該プロジェクトの [設定] > [サービス アカウント] を開く
- [新しい秘密鍵の生成] をクリックし、[キーを生成] をクリックします。ファイルのダウンロードがはじまる
- ダウンロードした JSON ファイルを当該サーバにアップロード
- 鍵ファイルのパスを環境変数に設定、もしくはコードで直に指定
- 環境変数を使う場合
export GOOGLE_APPLICATION_CREDENTIALS="/path/to/the/file/hogehoge.json"
- コード
環境変数で鍵ファイルのパスを指定する場合は
import (
"log"
"context"
"cloud.google.com/go/firestore"
)
func createClient(ctx context.Context) *firestore.Client {
// Sets your Google Cloud Platform project ID.
projectID := "firebase-project-id"
client, err := firestore.NewClient(ctx, projectID)
if err != nil {
log.Fatalf("Failed to create client: %v", err)
}
// Close client when done with
// defer client.Close()
return client
}
main(){
ctx := context.Background()
client := createClient(ctx)
_, _, err := client.Collection("users").Add(ctx, map[string]interface{}{
"first": "Ada",
"last": "Lovelace",
"born": 1815,
})
if err != nil {
log.Fatalf("Failed adding alovelace: %v", err)
}
}
コード内で鍵ファイルのパスを読み込む場合は
import (
"log"
"context"
"cloud.google.com/go/firestore"
"google.golang.org/api/option" // 追加
)
func createClient(ctx context.Context) *firestore.Client {
// Sets your Google Cloud Platform project ID.
projectID := "firebase-project-id"
opt := option.WithCredentialsFile("/path/to/the/keyfile/hogehoge.json") // 鍵ファイルを読むコードを追加
client, err := firestore.NewClient(context.Background(), projectID, opt) // ★こっちを使う★
// client, err := firestore.NewClient(ctx, projectID)
if err != nil {
log.Fatalf("Failed to create client: %v", err)
}
// Close client when done with
// defer client.Close()
return client
}
main(){
ctx := context.Background()
client := createClient(ctx)
_, _, err := client.Collection("users").Add(ctx, map[string]interface{}{
"first": "Ada",
"last": "Lovelace",
"born": 1815,
})
if err != nil {
log.Fatalf("Failed adding alovelace: %v", err)
}
}
実行して users コレクションになにかドキュメントができていて Ada Lovelace さんのアカウントができていたら正解です