Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
92
Help us understand the problem. What is going on with this article?
@bathtimefish

Firebase Cloud Firestoreを使ってみる

More than 3 years have passed since last update.

はじめに

仕事仲間とサーバレスな話をしててFirebaseいろいろ無料ですげーみたいな話になった。AWS lambdaやAzure Functionsなんかでビジネスロジックをピタゴラスイッチしてユーザーに向けた出力を考えると、FirebaseはホスティングデータストアNotificationとアプリに必要なものがタダ同然である。

最近Firebaseのことをみてなかったので久々に調べてたらCloud Firestoreという知らないやつがあったので使ってみることにした。

Firebase Cloud Firestore

FirestoreRealtime Databaseと同様のデータベースサービス。Realtime DatabaseがJSONで構造化されたデータをストアするのに対し、Firestoreはドキュメント指向DBライクな階層型の構造化データをストアでき、クエリ処理が利用できる。MongoDBみたいな感じのDB。Realtime Databaseに比べてデータの抽出がカンタンにできそうな感じのもの。

2018.3.14 時点ではベータ版として提供されている。たぶん将来的にはRealtime Databaseを置き換えるものになるんだろう。

つかってみる

Quickstartに沿ってnode.jsベースでやってみる。
まずはFirebaseコンソールで新規プロジェクトを作成する。

スクリーンショット 2018-03-14 22.51.32.png

適当に名前をつけて プロジェクトを作成 をクリックする。

スクリーンショット 2018-03-14 22.52.20.png

次へ

スクリーンショット 2018-03-14 22.53.25.png

Databaseをクリック

スクリーンショット 2018-03-14 22.53.50.png

Firesotoreの 使ってみる をクリック

スクリーンショット 2018-03-14 22.55.14.png

今回はテストモードを選択して 有効にする をクリックする

スクリーンショット 2018-03-14 22.56.16.png

プロビジョニングが終了するとデータビューアーが表示される。

スクリーンショット 2018-03-14 22.57.17.png

ローカルPCの適当な場所にサンプルプログラム用のディレクトリを作ってFirebase SDKをインストールする。

mkdir firestore-test && cd $_
npm init -f
npm install --save firebase-admin@^5.7.0

プロジェクトのダッシュボードから 歯車アイコン -> ユーザーと権限 をクリックする

スクリーンショット 2018-03-14 23.32.42.png

左端のカギアイコンをマウスオーバーしてサービスアカウントをクリックする

スクリーンショット 2018-03-14 23.34.06.png

サービスアカウントの画面でデフォルトで設定されているサービスアカウントの右端オプションアイコンから キーを作成 をクリックする

スクリーンショット 2018-03-14 23.36.58.png

キーのタイプ JSON を選択し、作成をクリック

スクリーンショット 2018-03-14 23.39.40.png

サービスアカウントの秘密鍵が入ったJSONファイルがダウンロードされる。
このJSONファイルを先ほど作ったディレクトリに配置しておく。

下記のテストコードをディレクトリ下に作成する。[SERVICE ACCOUNT JSON FILE] の部分を先ほどダウンロードしたサービスアカウントのJSONファイル名に書き換える。

index.js
const admin = require('firebase-admin');

var serviceAccount = require("./[SERVICE ACCOUNT JSON FILE]");

admin.initializeApp({
  credential: admin.credential.cert(serviceAccount)
});

var db = admin.firestore();

var docRef = db.collection('users').doc('alovelace');

var setAda = docRef.set({
    first: 'Ada',
    last: 'Lovelace',
    born: 1815
});

実行してみる

node index.js

正常に実行できたら、Firestoreのデータビューアーを見てみる。usersコレクションが追加されていて、コレクションにドキュメントが追加されている。

スクリーンショット 2018-03-14 23.45.31.png

index.js を以下のように更新する。

index.js
const admin = require('firebase-admin');

var serviceAccount = require("./[SERVICE ACCOUNT JSON FILE]");

admin.initializeApp({
  credential: admin.credential.cert(serviceAccount)
});

var db = admin.firestore();

db.collection('users').get()
    .then((snapshot) => {
        snapshot.forEach((doc) => {
            console.log(doc.id, '=>', doc.data());
        });
    })
    .catch((err) => {
        console.log('Error getting documents', err);
    });

実行してみる

node index.js
alovelace => { last: 'Lovelace', first: 'Ada', born: 1815 }

usersコレクションのドキュメントが取得できた。

まとめ

FirestoreはいまのところMongoDBのダイエット版といった感じか。単純なアプリで利用するデータストアとしては十分使えると思う。これでスケール気にせずに1GBまで無料か。やべえな。。上手く使ってなんか超節約Webサービス作ってみたい。

92
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
92
Help us understand the problem. What is going on with this article?