LoginSignup
6
3

More than 3 years have passed since last update.

FirebaseのCloud Firestoreを使い、サクッとCloud上にDatabaseを構築する

Posted at

はじめに

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アカウントでログイン後プロジェクトを作成を選びましょう。
first.png

作成したプロジェクトを選択して、Cloud Filestoreを作成しましょう。
start.png

セキュリティルールの設定。後で細かくルールを変えられるので、ロックを選択。
認証を使うならAuthenticationの設定が必要です。
realtime_db.png

後はDBを作るロケーションを設定して完了
location.png

Databaseにデータを詰める

Databaseを選ぶとコレクションを追加画面があるので、
after_creating.png

コレクションの名前を指定して、
collectin.png

Document、その中のフィールドを指定することでデータを詰めていきます。
document.png

とりあえずクライアントからのデータアクセス

プロジェクトへのアクセスは、秘密鍵を生成することで行うことが出来ます。サービスアカウントで新しい秘密鍵の生成を行うと、鍵やDBアクセス先URL等の情報が入ったjsonファイルが取得できます。
key_configuration.png

後はこれを使ってアクセス用のコードを書くだけです。使い方はこちら。各言語に合わせたチュートリアルを公式で用意してくれています。
例えばGolangならこんな形でデータの追加、参照、削除が出来ます。

main.go
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=

6
3
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
6
3