Pythonを使用したGoogle Firebase Cloud Firestoreの実践的な活用方法

目次

  1. Google Firebaseの主要機能と特徴
  2. 環境構築と初期設定
  3. Cloud Firestoreプロジェクトの作成手順
  4. Firebase Admin SDKの導入方法
  5. 実践的なクエリ例と活用方法

Google Firebaseの主要機能と特徴

高性能なクラウドストレージサービスとして,包括的なインフラストラクチャを提供.

データベース機能:PythonとJavaScriptの双方で最適化された互換性を実現し,シームレスな開発環境を提供.

認証システム(ID,パスワード),セキュリティ管理,課金システムなど,アプリケーション開発に必要な統合機能を完備.

* iOS,Android,Webプラットフォームに完全対応.利用開始にはGoogleアカウントの登録が必要.

環境構築と初期設定

Python 3.12 のインストール

インストール済みの場合は実行不要。

管理者権限でコマンドプロンプトを起動(手順:Windowsキーまたはスタートメニュー > cmd と入力 > 右クリック > 「管理者として実行」)し、以下を実行する。管理者権限は、wingetの--scope machineオプションでシステム全体にソフトウェアをインストールするために必要である。

REM Python をシステム領域にインストール
winget install --scope machine --id Python.Python.3.12 -e --silent
REM Python のパス設定
set "PYTHON_PATH=C:\Program Files\Python312"
set "PYTHON_SCRIPTS_PATH=C:\Program Files\Python312\Scripts"
echo "%PATH%" | find /i "%PYTHON_PATH%" >nul
if errorlevel 1 setx PATH "%PATH%;%PYTHON_PATH%" /M >nul
echo "%PATH%" | find /i "%PYTHON_SCRIPTS_PATH%" >nul
if errorlevel 1 setx PATH "%PATH%;%PYTHON_SCRIPTS_PATH%" /M >nul

関連する外部ページ

Python の公式ページ: https://www.python.org/

AI エディタ Windsurf のインストール

Pythonプログラムの編集・実行には、AI エディタの利用を推奨する。ここでは,Windsurfのインストールを説明する。

管理者権限でコマンドプロンプトを起動(手順:Windowsキーまたはスタートメニュー > cmd と入力 > 右クリック > 「管理者として実行」)し、以下を実行して、Windsurfをシステム全体にインストールする。管理者権限は、wingetの--scope machineオプションでシステム全体にソフトウェアをインストールするために必要となる。

winget install --scope machine Codeium.Windsurf -e --silent

関連する外部ページ

Windsurf の公式ページ: https://windsurf.com/

Gitのインストール

管理者権限でコマンドプロンプトを起動(手順:Windowsキーまたはスタートメニュー > cmd と入力 > 右クリック > 「管理者として実行」)し、以下を実行する。管理者権限は、wingetの--scope machineオプションでシステム全体にソフトウェアをインストールするために必要となる。


REM Git をシステム領域にインストール
winget install --scope machine --id Git.Git -e --silent
REM Git のパス設定
set "GIT_PATH=C:\Program Files\Git\cmd"
if exist "%GIT_PATH%" (
    echo "%PATH%" | find /i "%GIT_PATH%" >nul
    if errorlevel 1 setx PATH "%PATH%;%GIT_PATH%" /M >nul
)

Firebase Admin SDKの設定と秘密鍵の取得手順

公式ドキュメントに基づいて,以下の手順で設定を実施する.

  1. Firebaseの公式ポータルサイトにアクセスする.

    https://firebase.google.com/?hl=ja

  2. メインページから「使ってみる (GET STARTED)」を選択する.
  3. Googleアカウントによる認証を実行する.

    有効なセッションが存在する場合は,自動的に次のステップに移行する.

  4. Firebaseコンソールへのアクセス権限を確認する.
  5. コンソール画面から対象となるプロジェクトを選択する.

    * 新規プロジェクトを作成する場合は,「プロジェクトを追加」から設定を開始する.

  6. Project Overviewメニューから設定ボタンをクリックする.
  7. メニューから「プロジェクトを設定」を選択する.
  8. 左側のサイドメニューから「サービスアカウント」を選択する.
  9. 開発に使用する言語として「Python」を選択する.

    選択後,Firebase Admin SDKの設定に必要なコードスニペットが自動的に表示される.

    * この画面では「Firebase サービスアカウントを使用したPythonアプリケーションの認証機能」の詳細が確認できる.

  10. 新しい秘密鍵の生成」ボタンを選択する.
  11. 表示される確認ダイアログで「キーを生成」を実行する.
  12. 生成された認証用JSONファイルのダウンロードを確認する.

    ダウンロードされた認証用JSONファイルのファイル名を記録する(後続の設定プロセスで使用).

Firebase Admin SDKのPython環境への導入

セットアップガイドおよび クイックスタートの手順に従って実装を進める.

  1. Windows環境でコマンドプロンプトを管理者権限で起動する.
  2. Firebase Admin SDKのインストールを実行する.

    以下のコマンドを実行する.

    pip install -U firebase-admin
    
  3. Pythonプログラムで動作確認を実施する.

    効率的な開発環境として,Jupyter Qt ConsoleSpyderPyCharmPyScripterなどの統合開発環境の利用を推奨する.

    以下のサンプルコードを実行する.

    エディタで「H:/my-project-abcde-firebase-adminsdk-q53ez-5d420dbcf2.json」を,ダウンロードした認証用JSONファイルの実際のパスに置き換える.

    このプログラムは,データベース内の「products」コレクションに格納されているドキュメントを取得して表示する. 実行結果の例も併せて提示する.

    import firebase_admin
    from firebase_admin import credentials
    from firebase_admin import firestore
    
    cred = credentials.Certificate('H:/my-project-abcde-firebase-adminsdk-q53ez-5d420dbcf2.json')
    app = firebase_admin.initialize_app(cred)
    
    db = firestore.client()
    ref = db.collection(u'products')
    docs = ref.stream()
    
    for doc in docs:
        print(u'{} => {}'.format(doc.id, doc.to_dict()))
    
    

    以下のようなコレクション構造を前提としている.

    実行結果:

* Webインターフェースを使用したデータベース管理手順

  1. Firebaseポータルサイトにアクセスする.

    https://firebase.google.com/?hl=ja

    * 必要に応じてGoogleアカウントでの認証が要求される.

  2. 使ってみる (GET STARTED)」を選択する.
  3. Firebaseコンソールの表示を確認する.
  4. 管理対象のプロジェクトを選択する.

    * 新規プロジェクトが必要な場合は「プロジェクトを追加」から作成することができる.

  5. 左側のサイドメニューから「Database」を選択する.
  6. データベース管理画面でコレクションとドキュメントの作成・編集作業が可能となる.

実践的なクエリ例

前述のコード例に続いて,以下のクエリ処理を実行する. 「u'name', u'==', u'apple'」は文字列の完全一致検索を実行する処理である.

a = ref.where(u'name', u'==', u'apple')
docs = a.stream()
for doc in docs:
    print(u'{} => {}'.format(doc.id, doc.to_dict()))

実行結果:

日時データの比較クエリ例

u'time', u'>', datetime(2019,4,13,3,10,0)」の条件式でPythonのdatetimeオブジェクトを使用した日時比較クエリを実行する.

import datetime
a = ref.where(u'time', u'>', datetime(2019,4,13,3,10,0))
docs = a.stream()
for doc in docs:
    print(u'{} => {}'.format(doc.id, doc.to_dict()))