LoginSignup
12
9

More than 3 years have passed since last update.

とりあえずPythonでFireBase Cloud Firestoreを使ってみる

Posted at

はじめに

「とりあえず、PythonでFireBaseのCloud Firestoreを使ってみたい!」ということで、
FireBaseの公式ドキュメントに従いながら、基本的なところの「データの出入力」をやってみたときの手順を書きます。

まずは...「プロジェクト」を作成しよう

「プロジェクト」は、Firestoreをはじめ,Cloud Functions, Authentication, Hosting などのサービスを使うための"まとめるもの"です。
FireBaseで作成したプロジェクトは、GCPでも共通です。

それでは、プロジェクトを作っていきましょう。

まずは、FireBase Consoleに移動します。
image.png
真ん中の方の「プロジェクトの作成」をクリックします。
image.png
プロジェクトの名前を入力し、「続行」をクリックします。

手順2/3で「Google アナリティクス(Firebase プロジェクト向け)」の説明が出てくるので、有効にするかどうかはお好みで。(今回はオフにします。)
image.png

最後に「プロジェクトの作成」をクリックすると、自動的に作成作業が始まります。

少しすると、以下のように「新しいプロジェクトの準備ができました」と表示されるので、「続行」をクリックします。
image.png

そうすると、コンソールに画面が遷移します。
image.png

これで、プロジェクトの作成が完了しました。

Cloud Firestoreのデータベースを作成しよう

Cloud Firestore では、"データ"を書き込んでいく"ドキュメント"、
ドキュメントをまとめておくための"コレクション"(フォルダーのようなもの)があります。
「データベース」は、コレクションを入れておくための"箱"です。

...。難しいですね。
よくわからない方は、ほかの方のとってもわかりやすい記事を見てみてくださいね!

それでは、まずデータベースを作成していきましょう。

左側のメニューから「Database」をクリックします。
image.png
続いて「データベースの作成」をクリックします。

なんかダイアログが出てくるので、「テストモードで開始」を選択してから「次へ」
image.png
ロケーションの選択はそのままで、「完了」をクリックします。
image.png

プロビジョニングとセキュリティの設定が終わると、自動的に以下の画面に遷移します。

image.png

これでデータベースの作成が完了しました。

コレクションとドキュメントを作成しよう

それでは、データを流し込む準備をしましょう。

真ん中の方の「コレクションを開始」をクリックします。
なんかダイアログが出てくるので、「コレクションID」に任意の文字列(コレクションの名前)を入力します。
image.png

「ドキュメントID」は任意の文字列でもいいですし、「自動ID」をクリックすると、適当に割り当ててくれます。
「フィールド」は設定してもいいですが、データを入れていくと、勝手に生成してくれます。
image.png

そうすると、コレクションとドキュメントを一気に作ってくれるので、これでデータを流し込む準備はおわりです。

APIキーをもってこよう

最後に、PythonからFireBaseをいじるためのAPIキーを生成し,ダウンロードします。

左上の歯車マーク→「プロジェクトの設定」をクリックします。
image.png

続いて、「サービスアカウント」を選択します。
image.png

そのまま、「新しい秘密鍵の生成」をクリックし、「キーを生成」をクリックします。
Jsonファイルがダウンロードされるので、適当なところに保管してください。

ではPythonだ!

ここからは一旦FireBaseを離れ、Python側の作業に入ります。
ここに書いているコードは、公式ドキュメントから引用し、一部を改変しています。

ライブラリを入れよう

PythonからFireBaseをいじるためのライブラリがすでにできています。

pip install firebase-admin

を実行し、FireBaseのライブラリをインストールします。

まずは初期化しよう

Cloud Firestore SDK インスタンスを初期化します。

import firebase_admin
from firebase_admin import credentials
from firebase_admin import firestore

cred = credentials.Certificate('秘密鍵のパスを書いてね.json')
firebase_admin.initialize_app(cred)

db = firestore.client()

これだけでSDKは初期化され、データの出入力が可能となります。

じゃ、データを追加してみよう

それでは、前の手順で作成したデータベースにデータを追加してみましょう。
公式ドキュメントのサンプルをそのまま使います。
下のコードは、先ほどの初期化のコードの下に追記してくださいね!

doc_ref = db.collection(u'users').document(u'alovelace')
doc_ref.set({
    u'first': u'Ada',
    u'last': u'Lovelace',
    u'born': 1815
})

ちょっとした解説
db.collection(u'users')...データベース内のどのコレクションを指定するか
.document(u'alovelace')...前で指定したコレクション内の どのドキュメントを指定するか
u'first': u'Ada',..."first"フィールドに"Ada"という値を追加する

それでは実行してみましょう!

正しく実行されると、FireBase Console側ではこのような表示になっていると思います。
image.png

今度はデータを読み取ってみよう

では、追加したデータを読み取ってみましょう。
ここでは、Pythonの出力ウィンドウにそのまま文字列を出力します。

初期化のコードの下に

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

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

うまくいくと、次のように出力されるかと思います。
image.png

では、追加したデータを削除してみよう

最後に、データを削除してみましょう。

削除する前の構造は下のようになっていると思います
image.png

追加したフィールドだけを削除するには

city_ref = db.collection(u'users').document(u'alovelace')
city_ref.update({
    u'born': firestore.DELETE_FIELD
})

このコードでは、"born"フィールドを削除しています。

ドキュメントごと削除するには

db.collection(u'users').document(u'alovelace').delete()

コレクションも削除するには

def delete_collection(coll_ref, batch_size):
    docs = coll_ref.limit(batch_size).get()
    deleted = 0

    for doc in docs:
        print(u'Deleting doc {} => {}'.format(doc.id, doc.to_dict()))
        doc.reference.delete()
        deleted = deleted + 1

    if deleted >= batch_size:
        return delete_collection(coll_ref, batch_size)

(コレクションを削除するときは、すべてのドキュメントを取得し,削除する必要があります。)

以上で、基本的な操作は終わりになります。

おわりに

読みにくい記事だったと思いますが,ここまで読んでくださりありがとうございました。
よいFireBaseライフを!

12
9
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
12
9