はじめに
仕事仲間とサーバレスな話をしててFirebaseいろいろ無料ですげーみたいな話になった。AWS lambdaやAzure Functionsなんかでビジネスロジックをピタゴラスイッチしてユーザーに向けた出力を考えると、Firebaseはホスティング、データストア、Notificationとアプリに必要なものがタダ同然である。
最近Firebaseのことをみてなかったので久々に調べてたらCloud Firestoreという知らないやつがあったので使ってみることにした。
Firebase Cloud Firestore
FirestoreはRealtime Databaseと同様のデータベースサービス。Realtime DatabaseがJSONで構造化されたデータをストアするのに対し、Firestoreはドキュメント指向DBライクな階層型の構造化データをストアでき、クエリ処理が利用できる。MongoDBみたいな感じのDB。Realtime Databaseに比べてデータの抽出がカンタンにできそうな感じのもの。
2018.3.14 時点ではベータ版として提供されている。たぶん将来的にはRealtime Databaseを置き換えるものになるんだろう。
つかってみる
Quickstartに沿ってnode.jsベースでやってみる。
まずはFirebaseコンソールで新規プロジェクトを作成する。
適当に名前をつけて プロジェクトを作成 をクリックする。
次へ
Databaseをクリック
Firesotoreの 使ってみる をクリック
今回はテストモードを選択して 有効にする をクリックする
プロビジョニングが終了するとデータビューアーが表示される。
ローカルPCの適当な場所にサンプルプログラム用のディレクトリを作ってFirebase SDKをインストールする。
mkdir firestore-test && cd $_
npm init -f
npm install --save firebase-admin@^5.7.0
プロジェクトのダッシュボードから 歯車アイコン -> ユーザーと権限 をクリックする
左端のカギアイコンをマウスオーバーしてサービスアカウントをクリックする
サービスアカウントの画面でデフォルトで設定されているサービスアカウントの右端オプションアイコンから キーを作成 をクリックする
キーのタイプ JSON を選択し、作成をクリック
サービスアカウントの秘密鍵が入ったJSONファイルがダウンロードされる。
このJSONファイルを先ほど作ったディレクトリに配置しておく。
下記のテストコードをディレクトリ下に作成する。[SERVICE ACCOUNT JSON FILE]
の部分を先ほどダウンロードしたサービスアカウントのJSONファイル名に書き換える。
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コレクションが追加されていて、コレクションにドキュメントが追加されている。
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サービス作ってみたい。