12
10

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

GolangでFirebaseのRealtime Databaseにデータを書き込む

Last updated at Posted at 2018-10-21

Go言語用のFirebase Admin SDKを使って、Realtime Databaseを操作してみる。多少公式ドキュメントのサンプルコードだと省略されている部分などがあったので、動作確認に必要な一連の流れをここにまとめておく。(2018年10月現在)

Firebaseの準備

新しいプロジェクトの作成

Firebase consoleから新しいプロジェクトを作成する。

スクリーンショット 2018-10-21 13.59.37.png

秘密鍵の生成とダウンロード

SDKからRealtime Databaseを操作するには、サービス アカウントの秘密鍵が必要となるので生成してダウンロードしておく。

プロジェクト設定を開く
スクリーンショット 2018-10-21 14.00.29.png

サービス アカウントからFirebase Admin SDKの新しい秘密鍵を生成、ダウンロードする
スクリーンショット 2018-10-21 14.02.25.png

Realtime Databaseの作成

Realtime Databaseを作成する。Cloud Firestoreはまだベータ版なので今回は従来のRealtime Databaseを選んだ。

スクリーンショット 2018-10-21 14.05.09.png

ルールを設定する。Admin SDK / サービス アカウントを使ってデータをいじる場合は、ロックモードでもOK。

スクリーンショット 2018-10-21 19.50.02.png

作成されたデータベースのURLをメモっておく

スクリーンショット 2018-10-21 19.51.51.png

プログラムを書く

ライブラリのインストール

go get firebase.google.com/go

プログラムを書く

データの保存 | Firebase Realtime Database | Firebase のサンプルコードを参考に

DatabaseURLは、適宜書き換えてください。

package main

import (
	"fmt"
	"log"

	"golang.org/x/net/context"

	firebase "firebase.google.com/go"

	"google.golang.org/api/option"
)

// User is a json-serializable type.
type User struct {
	DateOfBirth string `json:"date_of_birth,omitempty"`
	FullName    string `json:"full_name,omitempty"`
	Nickname    string `json:"nickname,omitempty"`
}

func main() {
	ctx := context.Background()
	opt := option.WithCredentialsFile("fb_secret.json")
	config := &firebase.Config{DatabaseURL: "https://golang-fb-exp.firebaseio.com/"}
	app, err := firebase.NewApp(ctx, config, opt)
	if err != nil {
		panic(fmt.Sprintf("error initializing app: %v", err))
	}

	client, err := app.Database(ctx)
	if err != nil {
		log.Fatalln("Error initializing database client:", err)
	}

	// Get a database reference to our blog.
	ref := client.NewRef("server/saving-data/fireblog")

	usersRef := ref.Child("users")
	err = usersRef.Set(ctx, map[string]*User{
		"alanisawesome": {
			DateOfBirth: "June 23, 1912",
			FullName:    "Alan Turing",
		},
		"gracehop": {
			DateOfBirth: "December 9, 1906",
			FullName:    "Grace Hopper",
		},
	})
	if err != nil {
		log.Fatalln("Error setting value:", err)
	}

	log.Println("Done")
}

Realtime Databaseを使う場合は、firebase.NewAppの引数でfirebase.Configを与え、その中でDatabaseURLを指定してあげる必要があることに注意。

認証ファイル(秘密鍵)の準備

先ほどダウンロードしてきた認証用jsonを、プログラムと同じ階層にfb_secret.jsonという名前で配置する。

実行+動作確認

プログラムを実行してみる。Firebase consoleのDatabase画面上でデータが追加されていることを確認できる。

スクリーンショット 2018-10-21 23.03.42.png

参考リンク

12
10
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
12
10

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?