概要
google-cloud-go/firestore を使ってローカルからFirestoreを更新してみる。
環境
Go 1.11
環境変数
パッケージ管理にModulesを利用するため環境変数を下記の通り設定する。
GO111MODULE=on
手順
2パターンのcredential設定方法を記述する
-
- Application-defaultの秘密鍵を利用する場合
-
- サービスアカウントを発行してkey発行して確認する場合
1. Application-defaultの秘密鍵を利用する場合
(1) まずはGoogle Cloud SDKのauthorizeを行う。下記コマンドを入力してブラウザで設定を許可する。
$ gcloud auth login
(2) 次にローカルアプリケーションで使用するデフォルトのcredentialを設定する。こちらもブラウザで設定を許可する。
$ gcloud beta auth application-default login
(3) 今回使用するサンプルアプリケーションのディレクトリを作成する。
$ mkdir get-started-cloud-firestore && cd $_
(4) Modulesの初期化を下記コマンドで行う。
$ go mod init
(5) main.go
を作成してコードを実装する
projectID := "[YOUR PROJECT ID]"
の部分はGCPのプロジェクトIDを設定する。
main.go
package main
import (
"fmt"
"log"
"cloud.google.com/go/firestore"
"golang.org/x/net/context"
"google.golang.org/api/iterator"
)
func main() {
ctx := context.Background()
// [START fs_initialize]
// Sets your Google Cloud Platform project ID.
projectID := "[YOUR PROJECT ID]"
// Get a Firestore client.
client, err := firestore.NewClient(ctx, projectID)
if err != nil {
log.Fatalf("Failed to create client: %v", err)
}
// Close client when done.
defer client.Close()
// [END fs_initialize]
fmt.Printf("client: %v\n", client)
// [START fs_add_data_1]
_, _, 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)
}
// [END fs_add_data_1]
// [START fs_add_data_2]
_, _, err = client.Collection("users").Add(ctx, map[string]interface{}{
"first": "Alan",
"middle": "Mathison",
"last": "Turing",
"born": 1912,
})
if err != nil {
log.Fatalf("Failed adding aturing: %v", err)
}
// [END fs_add_data_2]
// [START fs_get_all_users]
iter := client.Collection("users").Documents(ctx)
for {
doc, err := iter.Next()
if err == iterator.Done {
break
}
if err != nil {
log.Fatalf("Failed to iterate: %v", err)
}
fmt.Println(doc.Data())
}
// [END fs_get_all_users]
}
2. サービスアカウントを発行してkey発行して確認する場合
(1) Cloud Datastore編集者ののサービスアカウントを発行する
IAMと管理 > サービスアカウント からサービスアカウントを作成してCloud Datastoreの編集者権限を付与してjsonのキーをダウンロードする
(2) キーを任意のディレクトリに格納する
(3) GCLOUD_CREDENTIAL_FILE_PATH
という環境変数に上記のjsonファイルのパスを設定する
(4) 今回使用するサンプルアプリケーションのディレクトリを作成する。
$ mkdir get-started-cloud-firestore && $_
(5) Modulesの初期化を下記コマンドで行う。
$ go mod init
(6) main.go
を作成してコードを実装する
main.go
package main
import (
"fmt"
"log"
"cloud.google.com/go/firestore"
"golang.org/x/net/context"
"google.golang.org/api/iterator"
"google.golang.org/api/option"
"os"
)
func main() {
ctx := context.Background()
// [START fs_initialize]
// Sets your Google Cloud Platform project ID.
projectID := "[YOUR PROJECT ID]"
opt := option.WithCredentialsFile(os.Getenv("GCLOUD_CREDENTIAL_FILE_PATH"))
// Get a Firestore client.
client, err := firestore.NewClient(ctx, projectID, opt)
if err != nil {
log.Fatalf("Failed to create client: %v", err)
}
// Close client when done.
defer client.Close()
// [END fs_initialize]
fmt.Printf("client: %v\n", client)
// [START fs_add_data_1]
_, _, 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)
}
// [END fs_add_data_1]
// [START fs_add_data_2]
_, _, err = client.Collection("users").Add(ctx, map[string]interface{}{
"first": "Alan",
"middle": "Mathison",
"last": "Turing",
"born": 1912,
})
if err != nil {
log.Fatalf("Failed adding aturing: %v", err)
}
// [END fs_add_data_2]
// [START fs_get_all_users]
iter := client.Collection("users").Documents(ctx)
for {
doc, err := iter.Next()
if err == iterator.Done {
break
}
if err != nil {
log.Fatalf("Failed to iterate: %v", err)
}
fmt.Println(doc.Data())
}
// [END fs_get_all_users]
}
実行する
$ go run main.go
結果を確認する。
ドキュメントが追加されている。