はじめに
Unityでアプリケーション作成をするに辺り、Cloud上でDatabaseを構築したい!せっかくなので評判のいいFirebaseを使ってみました。
- 対象読者:FirebaseのDatabaseをとりあえず使いたい人
- 書いてないこと: ユーザー認証処理。ここではDatabaseへの更新は管理者が行います。
後日Unityでの利用方法をまとめる予定
FirebaseのCloud Firestoreとは
FirebaseはGoogleが提供しているPlatform as a serviceで、多数のサービスを提供しています。
その中にDatabaseを扱う為のサービスとしてFirebase Realtime Databaseと今回紹介するCloud Firestoreがあります。
使い分け方も公式で公開してくれています。
Realtime Databaseは1 JSONファイルで全てを管理するので、管理データが複雑になると扱いが難しくなります。
一方でCloud Firestoreはコレクション>ドキュメントという階層でデータを管理する形のNoSQL Databaseなので、Realtime Databaseよりも複雑な構造のデータを扱うことが出来ます。
Cloud Firestore データモデル
利用上限も無料で以下なので、個人開発するには十分な量ですね。
1 GiB total
10GiB/month
2 万/日
5 万/日
2 万/日
使い方
プロジェクトとDatabaseの作成
まずはプロジェクトを作成。トップページにアクセスし、Googleアカウントでログイン後プロジェクトを作成を選びましょう。
作成したプロジェクトを選択して、Cloud Filestoreを作成しましょう。
セキュリティルールの設定。後で細かくルールを変えられるので、ロックを選択。
認証を使うならAuthenticationの設定が必要です。
Databaseにデータを詰める
Document、その中のフィールドを指定することでデータを詰めていきます。
とりあえずクライアントからのデータアクセス
プロジェクトへのアクセスは、秘密鍵を生成することで行うことが出来ます。サービスアカウントで新しい秘密鍵の生成を行うと、鍵やDBアクセス先URL等の情報が入ったjsonファイルが取得できます。
後はこれを使ってアクセス用のコードを書くだけです。使い方はこちら。各言語に合わせたチュートリアルを公式で用意してくれています。
例えばGolangならこんな形でデータの追加、参照、削除が出来ます。
package main
import (
"context"
"fmt"
"log"
"time"
firebase "firebase.google.com/go"
"google.golang.org/api/iterator"
"google.golang.org/api/option"
)
func main() {
// Firebase接続
sa := option.WithCredentialsFile("path/to/key.json")
ctx := context.Background()
app, err := firebase.NewApp(ctx, nil, sa)
if err != nil {
log.Fatalln(err)
}
// Firestore用のクライアント生成
client, err := app.Firestore(ctx)
if err != nil {
log.Fatalln(err)
}
defer client.Close()
//書き込み
docRefs, _, err := client.Collection("users").Add(ctx, map[string]interface{}{
"first": "Ada",
"last": "Lovelace",
"born": time.Now(),
})
if err != nil {
log.Fatalf("Failed adding alovelace: %v", err)
}
//読み込み
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())
}
//削除。ここでは書き込みをした新Documentを削除する
_, err = docRefs.Delete(ctx)
if err != nil {
return
}
}
Firebaseのsnippetにもリンクが張ってありますが、様々な言語でのサンプルコードがgithubで公開されています。
https://github.com/firebase?utf8=%E2%9C%93&q=snippets&type=&language=