Firestoreでちょっとしたクエリの実験するときにNode.jsのREPL(Read-Eval-Print-Loop)使って対話型シェルを利用している人は多いと思います。その時、毎回node
コマンドを実行したあとに.load スクリプト名
などとして接続をしている人はまさかいませんね? 人によってやり方は様々だと思いますが私のスクリプトを以下に貼っておきます。
# !/bin/bash
node --require await-outside/repl -i -e "
const firebase = require('firebase-admin');
var serviceAccount = require('./.service-account.json');
firebase.initializeApp({
credential: firebase.credential.cert(serviceAccount)
});
var db = firebase.firestore();
"
このスクリプトを開発環境のFirebaseプロジェクトのトップにでも設置しておけば./db
のコマンドでFirestoreへの対話型シェルが出現します。以下のような感じで実行できます。便利でしょ?
$ ./db
> await db.collection('tests').doc('hoge').set({name: 'oreore'});
WriteResult {
_writeTime: Timestamp { _seconds: 1576307204, _nanoseconds: 63907000 } }
> (await db.collection('tests').doc('hoge').get()).data()
{ name: 'oreore' }
設置方法
設置方法を簡単に開設しておきます。やるべきことはパッケージのインストールとFirebaseサービスアカウントのキーの配置です。
パッケージのインストール
ここで使うのはこの2つ
npm i firebase-admin --save
npm i await-outside --save
サクッとインストール。
サービスアカウントのキーの配置
FirebaseコンソールにログインしてサイドメニューのSettings>ユーザーと権限
からたどって新しい秘密鍵の生成
をクリックします。
ここから得られるjsonを.service-account.json
という名前で、冒頭のdb
スクリプトと同じディレクトリに配置します。このファイルは機密情報を含んでいるので忘れずにgitignoreしときましょう。
あ、dbスクリプトに実行権限を与えることもお忘れなく。
以上