がじぇったー

お金と家電とプログラミングのブログ

Python 3系でFirebase Realtime Databaseの進化版のCloud Firestoreを触る

こんにちわ

がじぇったー (@hackmylife7) | Twitter


です。


PythonでRealtime DBをさわってごにょごにょしたいなぁと思い色々触って見ることにしました。




TL;DR(要約)

  • Cloud FirestoreはFirebase Realtime Databaseの進化版

Cloud Firestoreとは?

みんな大好きFirebase Realtime Databaseの進化版です。
Firebaseの良さはそのまま引き継ぎ、弱点だった複雑で階層が深いデータ構造にも対応することができます。
Realtime Databaseはシングルリージョンでしたが、Cloud Firestoreはマルチリージョンで自動的にスケールアップもされます。

1番の大きな違いはデータの持ち方でしょうか。

Firebaseはデータを 1 つの大きな JSON ツリーとして保存しますが、
CloudFirestoreはデータをドキュメントのコレクションとして保存します。

きになるお金ですが、Realtime Database同様、普通に使うぶんには無料利用枠におさまると思います。



理解するのにとても良い記事を貼っておきます。


firebase.google.com
qiita.com
qiita.com
qiita.com


それではやっていきます。

GCPを普段使っている人は違うPJにリソースを作らないようにコマンドラインで確認しましょう。

❯ gcloud auth login
Your browser has been opened to visit:

~/projects
❯ gcloud config set project [Your Project ID]

~/projects
❯ gcloud config list
[compute]
zone = asia-northeast1-a
[core]
account = hoge@gmail.com
disable_usage_reporting = False
project = [Your Project ID]

firebaseコマンドをインストールします。

$ pip install firebase-admin
$ pip install --upgrade firebase-admin


python ファイルの作成

~/projects/6_study
❯ mkdir study_gcp

~/projects/6_study
❯ cd study_gcp/

projects/6_study/study_gcp
❯ touch cloud_firestore.py

ServiceAccountの作成

CloudFirestoreをPCから操作できるようサービスアカウントを作成しましょう。
「IAMと管理」から「サービスアカウントの作成」を選択します。
鍵ファイルをJSONでダウンロードしましょう。

f:id:gadgeterkun:20190921131311p:plain

保存した鍵ファイルはスクリプトと同じディレクトリに保存します。

f:id:gadgeterkun:20190921131457p:plain

Cloud Datastoreの作成

プラウザを開きCloudDatastoreをスタートしましょう。
モデルはネイティブ、ロケーションはTokyoで良いです。

f:id:gadgeterkun:20190921133848p:plain

データベースの作成が開始されます。
f:id:gadgeterkun:20190921133952p:plain


作成が完了するとこちらの画面に遷移します。
f:id:gadgeterkun:20190921134041p:plain


cloud_firestore.pyの編集

pythonファイルを作成し、中身を以下のように編集します。
サービスアカウントのキーファイルはダウンロードしたものをpythonスクリプトと同じディクレトリにおいてください。

import firebase_admin
from firebase_admin import credentials
from firebase_admin import firestore

cred = credentials.Certificate('./psychic-ruler-168314-595ca3873a8a.json')
firebase_admin.initialize_app(cred)

# SDKの初期化
db = firestore.client()

# コレクションとドキュメントの作成
doc_ref = db.collection(u'users').document(u'alovelace')
doc_ref.set({
    u'first': u'Ada',
    u'last': u'Lovelace',
    u'born': 1815
})


実行します。

projects/6_study/study_gcp via 🐍 v3.6.0 took 2s 
❯ python cloud_firestore.py 


firestoreの画面を見てみましょう。
データが登録されていることがわかります。
f:id:gadgeterkun:20190921134333p:plain

データを読み取る

データをreadする以下のcodeを先ほど作成したpythonファイルに追加してみましょう。

users_ref = db.collection(u'users')
docs = users_ref.stream()

for doc in docs:
    print(u'{} => {}'.format(doc.id, doc.to_dict()))

実行します。

Cloud Firestoreに保存されたデータの読み取りができます。

projects/6_study/study_gcp via 🐍 v3.6.0 
❯ python cloud_firestore.py 
alovelace => {'first': 'Ada', 'last': 'Lovelace', 'born': 1815}

所感

めちゃくちゃ簡単ですね。
そして無料枠がとても充実してます。

1 GB のストレージ
1 日あたり 50,000 回の読み取りオペレーション、20,000 回の書き込みオペレーション、20,000 回の削除オペレーション

個人で使うぶんには超過することはないと思うけど、超えても安い。。
f:id:gadgeterkun:20190921134741p:plain


flaskとセットで簡単なアプリケーションを作って見ようと思います。