firebase emulatorsをlocalで立ち上げて、GoでJSONデータの読み書きをしてみる

thumnail
2020-08-20

この記事では「firebase emulators」を使ってlocalで仮のfirestoreを立ち上げ、接続する方法について紹介する。

firestore emulatorsをlocalで立ち上げる

firestore emulatorsをlocalで立ち上げるのは簡単で、任意のhost-portを指定して、次のコマンドを叩けば良い。

$ gcloud beta emulators firestore start --host-port=localhost:7000
[firestore] API endpoint: http://localhost:7000
[firestore] If you are using a library that supports the FIRESTORE_EMULATOR_HOST environment variable, run:
[firestore] 
[firestore]    export FIRESTORE_EMULATOR_HOST=localhost:7000
[firestore] 
[firestore] Dev App Server is now running.
[firestore] 

コマンドを実行した時の標準出力にもでている通り、FIRESTORE_EMULATOR_HOSTの環境変数を定義することで、firestoreに接続しに行く時にfirebase emulatorsを読みに行ってくれる。

$ export FIRESTORE_EMULATOR_HOST=localhost:7000

Goでfirestore emulatorsに値を書き込む

では早速、Goでlocalで立ち上げた、firestore emulatorsにJSON形式のデータを書き込んでみる。

package main

import (
    "context"
    "log"

    "cloud.google.com/go/firestore"
)

func main() {
    ctx := context.Background()

    store, err := firestore.NewClient(ctx, "test-project-id")
    if err != nil {
        log.Fatal(err)
    }
    doc, _, err := store.Collection("users").Add(ctx, map[string]interface{}{
        "name": "katuo",
    })
    if err != nil {
        log.Fatal(err)
    }
    println(doc.ID) // DlDNU1WSNuNZbeMxNwiA
    println(doc.Path) // projects/test-project-id/databases/(default)/documents/users/DlDNU1WSNuNZbeMxNwiA
}

Addメソッドを使ってJSON形式のデータをfirestore emulatorsに書き込むことに成功した。Addメソッドは公式のドキュメントを参考にした。

https://godoc.org/cloud.google.com/go/firestore#example-CollectionRef-Add

Goでfirestore emulatorsの値を読み込む

次に先ほど保存した、IDがDlDNU1WSNuNZbeMxNwiAのレコードを再度取得できるか試してみる。

package main

import (
    "context"
    "fmt"
    "log"

    "cloud.google.com/go/firestore"
)

func main() {
    ctx := context.Background()

    store, err := firestore.NewClient(ctx, "test-project-id")
    if err != nil {
        log.Fatal(err)
    }
    dsnap, err := store.Collection("users").Doc("DlDNU1WSNuNZbeMxNwiA").Get(ctx)
    if err != nil {
        log.Fatal(err)
    }
    m := dsnap.Data()
    fmt.Printf("Document data: %#v\n", m) // Document data: map[string]interface {}{"name":"katuo"}
}

先程保存したJSON形式のデータの保存ができており、取得することができた。コレクションのドキュメントの取得方法は公式のサンプルコードを参考にした。

https://firebase.google.com/docs/firestore/query-data/get-data?hl=ja#go_1

KATUBLO

Copyright since 2018 KATUO All Rights Reserved.