Firestore を使用する

Firestore は、自動スケーリングと高性能を実現し、アプリケーション開発を簡素化するように構築された NoSQL ドキュメント データベースです。Datastore の後継である Firestore は、すべての新しいアプリケーションにおすすめのデータベースです。Firestore は、Datastore で構築されたレガシーコードをサポートする Datastore 互換 API など、複数のインターフェースを提供します。

このドキュメントでは、Cloud クライアント ライブラリを使用して Datastore モードのデータベースにデータを格納する方法と、Datastore モードのデータベースからデータを取得する方法について説明します。このガイドのサンプル アプリケーションは、app.yaml ファイルでランタイム バージョンとオペレーティング システムを指定することで、サポート対象の Python のバージョンで使用できます。

前提条件と設定

  • 環境とプロジェクトを設定し、App Engine でのアプリの構造を理解してください。このドキュメントで説明しているサンプルアプリを実行する際に必要となるため、プロジェクト ID を書き留めておきます。

リポジトリのクローン作成

サンプルをダウンロード(クローンを作成)します。

  git clone https://github.com/GoogleCloudPlatform/python-docs-samples
  cd python-docs-samples/appengine/flexible/datastore

プロジェクト構成の編集と依存関係の設定

google-cloud-datastore ライブラリを requirements.txt ファイルに追加します。これは、Datastore モードのクライアント ライブラリです。

Flask==3.1.3; python_version >= '3.9'
google-cloud-datastore==2.20.2
gunicorn==23.0.0

アプリケーション コード

このサンプル アプリケーションは訪問者の IP のロギング、取得、表示を行います。ログエントリがタイプ visit の 2 フィールド クラスであり、put コマンドを使用して Datastore モードに保存されることがわかります。query() コマンドを使用すると、最新 10 件の訪問者のアクセス情報を降順で取得できます。

@app.route("/")
def index():
    ds = datastore.Client()

    user_ip = request.remote_addr

    # Keep only the first two octets of the IP address.
    if is_ipv6(user_ip):
        user_ip = ":".join(user_ip.split(":")[:2])
    else:
        user_ip = ".".join(user_ip.split(".")[:2])

    entity = datastore.Entity(key=ds.key("visit"))
    entity.update(
        {
            "user_ip": user_ip,
            "timestamp": datetime.datetime.now(tz=datetime.timezone.utc),
        }
    )

    ds.put(entity)
    query = ds.query(kind="visit", order=("-timestamp",))

    results = []
    for x in query.fetch(limit=10):
        try:
            results.append("Time: {timestamp} Addr: {user_ip}".format(**x))
        except KeyError:
            print("Error with result format, skipping entry.")

    output = "Last 10 visits:\n{}".format("\n".join(results))

    return output, 200, {"Content-Type": "text/plain; charset=utf-8"}

index.yaml ファイルの使用

サンプルアプリはクエリを実行します。 複雑な Datastore モードのクエリには 1 つ以上のインデックスが必要です。インデックスは、アプリとともにアップロードする index.yaml ファイルで指定する必要があります。このファイルは手動で作成することも、ローカルでアプリをテストする際に自動作成することもできます。

ローカルテスト

アプリケーションを開発してローカルでテストする必要がある場合は、Datastore モードエミュレータを使用できます。

詳細情報

最適化やコンセプトなどの Datastore モードの詳細は、Datastore モードの Firestore に関するドキュメントをご覧ください。