データの保存と取得

リージョン ID

REGION_ID は、アプリの作成時に選択したリージョンに基づいて Google が割り当てる省略形のコードです。一部のリージョン ID は、一般的に使用されている国や州のコードと類似しているように見える場合がありますが、このコードは国または州に対応するものではありません。2020 年 2 月以降に作成されたアプリの場合、REGION_ID.r は App Engine の URL に含まれています。この日付より前に作成されたアプリの場合、URL のリージョン ID は省略可能です。

詳しくは、リージョン ID をご覧ください。

ウェブサービスを更新し、Datastore モードの Firestore(Datastore)でデータに接続して処理します。Datastore クライアント ライブラリを使用して、ウェブサービスを Datastore に接続します。Datastore は、自動スケーリング、高性能、アプリケーション開発の簡素化のために構築された非リレーショナル(NoSQL)データベースです。

このステップでは、ページ リクエスト データを Datastore に保存し、直近 10 回のページ リクエストの一覧が表示されるように、ウェブサービスを更新します。ここでは、Firebase Authentication を追加して、認証済みユーザーのデータ ストレージをカスタマイズする前に、ウェブサービスに対してデータ ストレージが機能するようにします。

始める前に

このガイドでこれまでのステップをすべて完了している場合は、このセクションをスキップできます。それ以外の場合は、次のいずれかを実行してください。

  • Python 3 アプリのビルドから始めて、ここまでのステップをすべて完了します。

  • Google Cloud プロジェクトがすでにある場合は、ウェブサービスのコピーをダウンロードすれば続行できます。

    1. Git を使用してサンプル アプリケーション リポジトリをダウンロードします。

      git clone https://github.com/GoogleCloudPlatform/python-docs-samples
      

      または、zip 形式のサンプルをダウンロードして展開します。

    2. 前のステップで用意したファイルのコピーがあるディレクトリに移動します。

      cd python-docs-samples/appengine/standard_python3/building-an-app/building-an-app-1
      

Datastore エンティティの保存と読み込み

次のように、Datastore エンティティとしてサイト リクエスト時間を保存および取得します。

  1. main.py ファイルに次のコードを追加します。

    from google.cloud import datastore
    
    datastore_client = datastore.Client()
    
    def store_time(dt):
        entity = datastore.Entity(key=datastore_client.key("visit"))
        entity.update({"timestamp": dt})
    
        datastore_client.put(entity)
    
    
    def fetch_times(limit):
        query = datastore_client.query(kind="visit")
        query.order = ["-timestamp"]
    
        times = query.fetch(limit=limit)
    
        return times
    
    

    上記の store_time メソッドでは、Datastore クライアント ライブラリを使用して、Datastore 内に新しいエンティティを作成しています。Datastore エンティティは、キーとプロパティで構成されたデータ オブジェクトです。この場合、エンティティのキーはカスタムの kind である visit です。エンティティには timestamp というプロパティがあり、ページ リクエストの時間が含まれています。

    fetch_times メソッドは、キー visit を使用して最近の 10 個の visit エンティティを求めるクエリをデータベースに対して実行し、これらのエンティティを降順でリストに保存します。

  2. root メソッドを更新して新しいメソッドを呼び出します。

    @app.route("/")
    def root():
        # Store the current access time in Datastore.
        store_time(datetime.datetime.now(tz=datetime.timezone.utc))
    
        # Fetch the most recent 10 access times from Datastore.
        times = fetch_times(10)
    
        return render_template("index.html", times=times)
    
    
  3. templates/index.html ファイルを更新して各エンティティの timestamp を出力します。

    <h2>Last 10 visits</h2>
    {% for time in times %}
      <p>{{ time['timestamp'] }}</p>
    {% endfor %}
  4. requirements.txt ファイルに、必要な依存関係がすべて含まれていることを確認します。

    Flask==3.0.0
    google-cloud-datastore==2.15.1
    

Datastore のエンティティ、プロパティ、キーの詳細については、エンティティ、プロパティ、キーをご覧ください。Datastore クライアント ライブラリの使用の詳細については、Datastore クライアント ライブラリをご覧ください。

ウェブサービスのテスト

ウェブサービスを仮想環境でローカルに実行してテストします。

  1. プロジェクトのメイン ディレクトリで次のコマンドを実行して、新しい依存関係をインストールし、ウェブサービスを実行します。ローカルテスト用に仮想環境を設定していない場合は、ウェブサービスのテストをご覧ください。

    pip install -r requirements.txt
    python main.py
    
  2. ウェブサービスを表示するには、ウェブブラウザに次のアドレスを入力します。

    http://localhost:8080
    

ウェブサービスで作成されたエンティティは、Google Cloud コンソールで表示できます。

Datastore の [エンティティ] ページに移動

ウェブサービスのデプロイ

Datastore をローカルで使用できるようになったので、次にウェブサービスを App Engine にデプロイする方法を学習します。

プロジェクトのルート ディレクトリから次のコマンドを実行します。ここで、app.yaml ファイルは次の場所にあります。

gcloud app deploy

すべてのトラフィックは、デプロイした新しいバージョンに自動的にルーティングされます。

バージョン管理の詳細については、サービスとバージョンの管理をご覧ください。

サービスの表示

ブラウザを速やかに起動して https://PROJECT_ID.REGION_ID.r.appspot.com でウェブサービスにアクセスするには、次のコマンドを実行します。

gcloud app browse

次のステップ

Datastore をウェブサービスで使用できるようになったので、次にウェブサービスに Firebase を追加する方法を学習します。