データの保存と取得

リージョン ID

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

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

ウェブサービスを更新し、Datastore モード(Datastore)の Firestore でデータに接続して処理します。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
      
    3. Datastore API を有効にします。

      gcloud services enable datastore.googleapis.com
      

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 Console で表示できます。

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

ウェブサービスをデプロイする

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

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

gcloud app deploy

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

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

サービスを表示する

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

gcloud app browse

次のステップ

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