PythonでFirebaseCloudFirestoreを使用する

PythonでFirebase Cloud Firestoreを使用することについて解説しています。

Cloud Firestoreは、GoogleFirebaseアプリケーション開発プラットフォームの一部で、モバイル、ウェブ、サーバー開発に対応したデータを保存および同期するためのクラウドでホストされるNoSQLデータベースです。

■PC環境

Windows 10 Pro

■Python

今回のPythonのバージョンは、「3.8.5」を使用しています。(Windows10)(pythonランチャーでの確認)

■プロジェクトを作成する

Cloud Firestoreを使用してみますので、まずは「Firebase」(https://firebase.google.com/)にアクセスします。

アクセスすると、サイトに「使ってみる」ボタンがありますので、こちらをクリックします。

クリックすると、Firebaseコンソールに「プロジェクトを作成」ボタンが表示されていますので、こちらをクリックします。

クリックすると、「プロジェクトの作成」の手順が表示されます。まずは、プロジェクトの名前をつけますので、「プロジェクト名」にプロジェクトの名前を入力します。今回は、「firestoretest」とします。

入力後、「Firebase の規約に同意します」の「Firebaseの規約」をクリックし、「Terms of Service for Firebase Services(https://firebase.google.com/terms?hl=ja)」を翻訳ツールなどを活用し、確認。確認後、チェックボックスにチェックを入れます。

その後、「続行」ボタンをクリックします。

クリックすると、「プロジェクトの作成」の次の手順が表示されます。「Google アナリティクス (Firebase プロジェクト向け)」と表示されていますので、作成するプロジェクトでGoogle アナリティクスを有効にするかどうするか決めます。今回は有効にするに設定します。

設定後、「続行」ボタンをクリックします。

クリックすると、「プロジェクトの作成」の最後の手順が表示されます。「Google アナリティクスの構成」と表示されていますので、「アナリティクスの地域」下の地域名をクリックし、メニューから「日本」を選択します。選択後、「Google アナリティクス データの共有にデフォルト設定を使用します。 」のチェックボックスにチェックが入っていることを確認し、「Google アナリティクス利用規約に同意します。」のために、Google アナリティクス利用規約(https://marketingplatform.google.com/about/analytics/terms/jp/)を確認します。確認後、チェックボックスにチェックを入れます。

入れた後に「プロジェクトを作成」ボタンをクリックします。

クリックすると、プロジェクトの作成が開始されます。

しばらくすると、「新しいプロジェクトの準備ができました」と表示されますので、「続行」ボタンをクリックします。

クリックすると、Firebaseコンソールの作成したプロジェクトの概要ページが表示されます。これでプロジェクトの作成は完了となります。

■サービスアカウントの資格情報を取得する

完了後、サービスアカウントの資格情報を取得します。取得するためには、Firebaseコンソールの左側にあるメニューの「プロジェクトの概要」の右側に歯車のアイコンがありますので、こちらをクリックします。クリックするとメニューが表示されますので、「プロジェクトの設定」をクリックします。

クリックすると、「プロジェクトの設定」が表示されます。このページ内で「サービスアカウント」をクリックします。クリックすると「Firebase Admin SDK」という項目があるので、「新しい秘密鍵の生成」ボタンをクリックします。

クリックすると「新しい秘密鍵の生成」というウインドウが表示されます。ウインドウ内の「キーを生成」ボタンをクリックします。

クリックすると、JSON形式のファイルのダウンロードが開始されます。その後、Webブラウザで指定されている保存場所にJSON形式のファイルがダウンロードされます。

サービスアカウントの資格情報の取得は完了となります。

■Firebase AdminSDKをインストール

完了後、pipを経由してFirebase AdminSDKのライブラリをインストールします。

まずWindowsのコマンドプロンプトを起動します。

pip install firebase-admin

起動後、上記のコマンドを入力し、Enterキーを押します。

なお、今回は、pythonランチャーを使用しており、Python Version 3.8.5にインストールを行うために、pipを使う場合にはコマンドでの切り替えを行います。

py -3.8 -m pip install firebase-admin

切り替えるために、上記のコマンドを入力し、Enterキーを押します。

Defaulting to user installation because normal site-packages is not writeable
Collecting firebase-admin
Downloading firebase_admin-5.0.1-py3-none-any.whl (113 kB)
|████████████████████████████████| 113 kB 1.3 MB/s
Collecting google-api-core[grpc]<2.0.0dev,>=1.22.1; platform_python_implementation != "PyPy"
Downloading google_api_core-1.30.0-py2.py3-none-any.whl (93 kB)
|████████████████████████████████| 93 kB 532 kB/s
Collecting google-cloud-storage>=1.37.1
Downloading google_cloud_storage-1.40.0-py2.py3-none-any.whl (104 kB)
|████████████████████████████████| 104 kB 3.3 MB/s
Collecting cachecontrol>=0.12.6
Downloading CacheControl-0.12.6-py2.py3-none-any.whl (19 kB)
Collecting google-cloud-firestore>=2.1.0; platform_python_implementation != "PyPy"
Downloading google_cloud_firestore-2.1.3-py2.py3-none-any.whl (212 kB)
|████████████████████████████████| 212 kB 1.7 MB/s
Collecting google-api-python-client>=1.7.8
Downloading google_api_python_client-2.11.0-py2.py3-none-any.whl (7.0 MB)
|████████████████████████████████| 7.0 MB 3.3 MB/s
Collecting googleapis-common-protos<2.0dev,>=1.6.0
Downloading googleapis_common_protos-1.53.0-py2.py3-none-any.whl (198 kB)
|████████████████████████████████| 198 kB 3.3 MB/s
Requirement already satisfied: requests<3.0.0dev,>=2.18.0 in c:\users\user_\appdata\roaming\python\python38\site-packages (from google-api-core[grpc]<2.0.0dev,>=1.22.1; platform_python_implementation != "PyPy"->firebase-admin) (2.25.1)
Collecting google-auth<2.0dev,>=1.25.0
Downloading google_auth-1.32.1-py2.py3-none-any.whl (147 kB)
|████████████████████████████████| 147 kB 6.4 MB/s
Requirement already satisfied: packaging>=14.3 in c:\users\user_\appdata\roaming\python\python38\site-packages (from google-api-core[grpc]<2.0.0dev,>=1.22.1; platform_python_implementation != "PyPy"->firebase-admin) (20.9)
Requirement already satisfied: six>=1.13.0 in c:\users\user_\appdata\roaming\python\python38\site-packages (from google-api-core[grpc]<2.0.0dev,>=1.22.1; platform_python_implementation != "PyPy"->firebase-admin) (1.16.0)
Requirement already satisfied: setuptools>=40.3.0 in c:\program files\python38\lib\site-packages (from google-api-core[grpc]<2.0.0dev,>=1.22.1; platform_python_implementation != "PyPy"->firebase-admin) (47.1.0)
Requirement already satisfied: pytz in c:\users\user_\appdata\roaming\python\python38\site-packages (from google-api-core[grpc]<2.0.0dev,>=1.22.1; platform_python_implementation != "PyPy"->firebase-admin) (2021.1)
Requirement already satisfied: protobuf>=3.12.0 in c:\users\user_\appdata\roaming\python\python38\site-packages (from google-api-core[grpc]<2.0.0dev,>=1.22.1; platform_python_implementation != "PyPy"->firebase-admin) (3.17.3)
Collecting grpcio<2.0dev,>=1.29.0; extra == "grpc"
Downloading grpcio-1.38.1-cp38-cp38-win_amd64.whl (3.2 MB)
|████████████████████████████████| 3.2 MB 3.3 MB/s
Collecting google-resumable-media<2.0dev,>=1.3.0
Downloading google_resumable_media-1.3.1-py2.py3-none-any.whl (75 kB)
|████████████████████████████████| 75 kB 1.6 MB/s
Collecting google-cloud-core<2.0dev,>=1.4.1
Downloading google_cloud_core-1.7.1-py2.py3-none-any.whl (28 kB)
Requirement already satisfied: msgpack>=0.5.2 in c:\users\user_\appdata\roaming\python\python38\site-packages (from cachecontrol>=0.12.6->firebase-admin) (1.0.2)
Collecting proto-plus>=1.10.0
Downloading proto_plus-1.19.0-py3-none-any.whl (42 kB)
|████████████████████████████████| 42 kB 555 kB/s
Collecting uritemplate<4dev,>=3.0.0
Downloading uritemplate-3.0.1-py2.py3-none-any.whl (15 kB)
Collecting httplib2<1dev,>=0.15.0
Downloading httplib2-0.19.1-py3-none-any.whl (95 kB)
|████████████████████████████████| 95 kB 1.6 MB/s
Collecting google-auth-httplib2>=0.1.0
Downloading google_auth_httplib2-0.1.0-py2.py3-none-any.whl (9.3 kB)
Requirement already satisfied: idna<3,>=2.5 in c:\users\user_\appdata\roaming\python\python38\site-packages (from requests<3.0.0dev,>=2.18.0->google-api-core[grpc]<2.0.0dev,>=1.22.1; platform_python_implementation != "PyPy"->firebase-admin) (2.10)
Requirement already satisfied: certifi>=2017.4.17 in c:\users\user_\appdata\roaming\python\python38\site-packages (from requests<3.0.0dev,>=2.18.0->google-api-core[grpc]<2.0.0dev,>=1.22.1; platform_python_implementation != "PyPy"->firebase-admin) (2021.5.30)
Requirement already satisfied: urllib3<1.27,>=1.21.1 in c:\users\user_\appdata\roaming\python\python38\site-packages (from requests<3.0.0dev,>=2.18.0->google-api-core[grpc]<2.0.0dev,>=1.22.1; platform_python_implementation != "PyPy"->firebase-admin) (1.26.5)
Requirement already satisfied: chardet<5,>=3.0.2 in c:\users\user_\appdata\roaming\python\python38\site-packages (from requests<3.0.0dev,>=2.18.0->google-api-core[grpc]<2.0.0dev,>=1.22.1; platform_python_implementation != "PyPy"->firebase-admin) (4.0.0)
Requirement already satisfied: cachetools<5.0,>=2.0.0 in c:\users\user_\appdata\roaming\python\python38\site-packages (from google-auth<2.0dev,>=1.25.0->google-api-core[grpc]<2.0.0dev,>=1.22.1; platform_python_implementation != "PyPy"->firebase-admin) (4.2.2)
Collecting pyasn1-modules>=0.2.1
Downloading pyasn1_modules-0.2.8-py2.py3-none-any.whl (155 kB)
|████████████████████████████████| 155 kB 3.3 MB/s
Collecting rsa<5,>=3.1.4; python_version >= "3.6"
Downloading rsa-4.7.2-py3-none-any.whl (34 kB)
Requirement already satisfied: pyparsing>=2.0.2 in c:\users\user_\appdata\roaming\python\python38\site-packages (from packaging>=14.3->google-api-core[grpc]<2.0.0dev,>=1.22.1; platform_python_implementation != "PyPy"->firebase-admin) (2.4.7)
Collecting google-crc32c<2.0dev,>=1.0; python_version >= "3.5"
Downloading google_crc32c-1.1.2-cp38-cp38-win_amd64.whl (34 kB)
Collecting pyasn1<0.5.0,>=0.4.6
Downloading pyasn1-0.4.8-py2.py3-none-any.whl (77 kB)
|████████████████████████████████| 77 kB 1.8 MB/s
Requirement already satisfied: cffi>=1.0.0 in c:\users\user_\appdata\roaming\python\python38\site-packages (from google-crc32c<2.0dev,>=1.0; python_version >= "3.5"->google-resumable-media<2.0dev,>=1.3.0->google-cloud-storage>=1.37.1->firebase-admin) (1.14.5)
Requirement already satisfied: pycparser in c:\users\user_\appdata\roaming\python\python38\site-packages (from cffi>=1.0.0->google-crc32c<2.0dev,>=1.0; python_version >= "3.5"->google-resumable-media<2.0dev,>=1.3.0->google-cloud-storage>=1.37.1->firebase-admin) (2.20)
Installing collected packages: googleapis-common-protos, pyasn1, pyasn1-modules, rsa, google-auth, grpcio, google-api-core, google-crc32c, google-resumable-media, google-cloud-core, google-cloud-storage, cachecontrol, proto-plus, google-cloud-firestore, uritemplate, httplib2, google-auth-httplib2, google-api-python-client, firebase-admin
Successfully installed cachecontrol-0.12.6 firebase-admin-5.0.1 google-api-core-1.30.0 google-api-python-client-2.11.0 google-auth-1.32.1 google-auth-httplib2-0.1.0 google-cloud-core-1.7.1 google-cloud-firestore-2.1.3 google-cloud-storage-1.40.0 google-crc32c-1.1.2 google-resumable-media-1.3.1 googleapis-common-protos-1.53.0 grpcio-1.38.1 httplib2-0.19.1 proto-plus-1.19.0 pyasn1-0.4.8 pyasn1-modules-0.2.8 rsa-4.7.2 uritemplate-3.0.1

Enterキーを押すと、インストールが開始され、上記のように「Successfully installed」と表示されます。これが表示されれば、firebase-adminが正常にインストールされたことになります。

■新しいデータベースを作成する

インストール後、新しいデータベースを作成します。作成するために、Firebaseコンソールの左側の「構築」から「Firestore Database」をクリックします。クリックすると、「Cloud Firestore」のページが表示されます。ページ内の「データベースの作成」ボタンをクリックします。

クリックすると、「データベースの作成」というウインドウが表示されます。ウインドウ内では「本番環境モードで開始する」か「テストモードで開始する」のいずれかを選択します。今回は「テストモードで開始する」を選択します。

選択後、「次へ」ボタンをクリックします。

クリックすると、「Cloud Firestore のロケーションを設定します」という項目が表示されます。Cloud Firestore データが格納される場所を設定できます。「Cloud Firestore のロケーション」のデフォルトである「nam5 (us-central)」をクリックすると、メニューが表示されますので、ロケーションを選択します。今回は「nam5 (us-central)」を選択します。

選択後、「有効にする」ボタンをクリックします。

クリックすると、Cloud Firestoreを運用が可能な状態にするために設定が開始されます(プロビジョニング)。そしてセキュリティルールの設定などが行われます。

しばらくすると、空のデータベースが作成されます。

■Pythonを使用し空のデータベースにコレクションを作成しデータを追加する

作成後、Pythonを使用し空のデータベースにコレクションを作成しデータを追加してみます。

■コード

import firebase_admin
from firebase_admin import credentials
from firebase_admin import firestore

cred = credentials.Certificate("firestoretest-fab60-firebase-adminsdk.json(生成された秘密鍵・JSONファイル)")
firebase_admin.initialize_app(cred)

db= firestore.client()

db.collection('prsons').add({'name':'kobayashi','age':40,'occupation':'programmer'})

サービス アカウント(生成された秘密鍵・JSONファイル)を使用し承認を行う

その後、「firestore_db = firestore.client()」でfirestoreインスタンスを初期化します。

初期化後、データベースに「prsons」というコレクションを作成し、add()関数を使用します。add()関数の括弧内には、コレクションに追加するデータを渡します。

これでデータが追加されます。

■実行(検証)

このスクリプトを「database_add.py」という名前で保存し、コマンドプロンプトから実行してみます。

実行してみると、スクリプト内のコードにはprint()関数でコレクションの作成の結果を文字列で出力するといったことは記述していないので、何も出力されません。

何も出力されませんが、Firebaseコンソールの「Cloud Firestore」の作成したデータベースのページを確認すると、指定したデータが追加されていることが確認できました。

コメント

タイトルとURLをコピーしました