Python 3.8が一般提供になりました。

Datastore を使用したデータの保存と取得

リージョン ID

REGION_ID は、アプリの作成時に選択したリージョンに基づいて Google が割り当てる省略形のコードです。一部のリージョン ID は、一般的に使用されている国や州のコードと類似しているように見える場合がありますが、このコードは国または州に対応するものではありません。既存のアプリでは省略可能ですが、間もなく、新しいアプリのすべてにおいて App Engine の URL に REGION_ID.r を含めることが必須となる予定です。

移行がスムーズに行われるように、リージョン ID を使用するよう App Engine を徐々に更新しています。Google Cloud プロジェクトがまだ更新されていない場合、アプリにリージョン ID が表示されません。ID は既存のアプリでは省略可能なため、リージョン ID が既存のアプリで使用可能になったときに、URL を更新する、またはその他の変更を行う必要はありません。

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

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

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

始める前に

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

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

  • 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())
    
        # 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==1.1.2
    google-cloud-datastore==1.12.0
    

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

ウェブサービスのテスト

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

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

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

    http://localhost:8080
    

    ヒント: ページを更新して追加のページ リクエストを作成し、Datastore にさらにエンティティを保存します。

ウェブサービスで作成されたエンティティは、Cloud Console で次のように表示できます。

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

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

以上で Datastore をローカルで使用できるようになったため、ウェブサービスを App Engine に再デプロイできます。

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

gcloud app deploy

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

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

サービスの表示

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

gcloud app browse

次の手順

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