BETA

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

投稿日:2019-06-29
最終更新:2019-06-29
※この記事は外部サイト(https://qiita.com/developer-kikikaikai/ite...)からのクロス投稿です

はじめに

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の設定が必要です。

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

Databaseにデータを詰める

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=

技術ブログをはじめよう Qrunch(クランチ)は、プログラマの技術アプトプットに特化したブログサービスです
駆け出しエンジニアからエキスパートまで全ての方々のアウトプットを歓迎しております!
or 外部アカウントで 登録 / ログイン する
クランチについてもっと詳しく

この記事が掲載されているブログ

@dOpIa1PQNPi5jLrnの技術ブログ

よく一緒に読まれる記事

0件のコメント

ブログ開設 or ログイン してコメントを送ってみよう
目次をみる
技術ブログをはじめよう Qrunch(クランチ)は、プログラマの技術アプトプットに特化したブログサービスです
or 外部アカウントではじめる
10秒で技術ブログが作れます!