Posted at

Firebase Cloud Firestoreを使ってみる

More than 1 year has 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サービス作ってみたい。