arrow_back

アプリ開発 - Cloud Datastore でのアプリケーション データの保存: Python

ログイン 参加
700 以上のラボとコースにアクセス

アプリ開発 - Cloud Datastore でのアプリケーション データの保存: Python

ラボ 2時間 universal_currency_alt クレジット: 5 show_chart 上級
info このラボでは、学習をサポートする AI ツールが組み込まれている場合があります。
700 以上のラボとコースにアクセス

概要

Google Cloud Datastore は、自動スケーリングと高パフォーマンスを実現し、アプリケーション開発を簡素化するように構築された NoSQL ドキュメント データベースです。このラボでは、この Datastore を使用してオンライン クイズ アプリケーションのアプリケーション データを保存します。また、クイズのデータを Datastore から取得して表示するようアプリケーションを構成します。

クイズ アプリケーションのスケルトンがあらかじめ用意されていますので、まずは Google Cloud Shell を使用して、スケルトンを含むリポジトリのクローンを作成します。次に、Cloud Shell エディタを使ってコードを確認し、Cloud Shell のウェブ プレビュー機能でアプリケーションを表示します。その後、Cloud Datastore を使用してデータを保存するようコードを変更します。

目標

このラボでは、次のタスクの実行方法について学びます。

  • Cloud Shell を開発環境として利用する

  • アプリケーションをプレビューする

  • アプリケーション コードを更新して Cloud Datastore を統合する

設定と要件

ラボの設定

各ラボでは、新しい Google Cloud プロジェクトとリソースセットを一定時間無料で利用できます。

  1. Qwiklabs にシークレット ウィンドウでログインします。

  2. ラボのアクセス時間(例: 1:15:00)に注意し、時間内に完了できるようにしてください。
    一時停止機能はありません。必要な場合はやり直せますが、最初からになります。

  3. 準備ができたら、[ラボを開始] をクリックします。

  4. ラボの認証情報(ユーザー名パスワード)をメモしておきます。この情報は、Google Cloud Console にログインする際に使用します。

  5. [Google Console を開く] をクリックします。

  6. [別のアカウントを使用] をクリックし、このラボの認証情報をコピーしてプロンプトに貼り付けます。
    他の認証情報を使用すると、エラーが発生したり、料金の請求が発生したりします。

  7. 利用規約に同意し、再設定用のリソースページをスキップします。

Google Cloud Shell の有効化

Google Cloud Shell は、開発ツールと一緒に読み込まれる仮想マシンです。5 GB の永続ホーム ディレクトリが用意されており、Google Cloud で稼働します。

Google Cloud Shell を使用すると、コマンドラインで Google Cloud リソースにアクセスできます。

  1. Google Cloud コンソールで、右上のツールバーにある [Cloud Shell をアクティブにする] ボタンをクリックします。

    ハイライト表示された Cloud Shell アイコン

  2. [続行] をクリックします。

環境がプロビジョニングされ、接続されるまでしばらく待ちます。接続した時点で認証が完了しており、プロジェクトに各自のプロジェクト ID が設定されます。次に例を示します。

Cloud Shell ターミナルでハイライト表示されたプロジェクト ID

gcloud は Google Cloud のコマンドライン ツールです。このツールは、Cloud Shell にプリインストールされており、タブ補完がサポートされています。

  • 次のコマンドを使用すると、有効なアカウント名を一覧表示できます。
gcloud auth list

出力:

Credentialed accounts: - @.com (active)

出力例:

Credentialed accounts: - google1623327_student@qwiklabs.net
  • 次のコマンドを使用すると、プロジェクト ID を一覧表示できます。
gcloud config list project

出力:

[core] project =

出力例:

[core] project = qwiklabs-gcp-44776a13dea667a6 注: gcloud ドキュメントの全文については、 gcloud CLI の概要ガイド をご覧ください。

仮想環境を作成する

virtualenv を使用してユーザー空間の仮想環境を作成します。この環境では、プロジェクトごとに異なる Python パッケージ セットをインストールできます。また、virtualenv を使用すると、Python パッケージをグローバルにインストールする必要がなくなるので、インストールが原因で発生するシステムツールや他の Python プロジェクトの障害を回避できます。このラボでは、virtualenv を使用してすべての Python コマンドに Python3 が使用されるようにします。

  1. Python 3 の virtualenv 環境を構成します。

    virtualenv -p python3 vrenv
  2. 仮想環境をアクティブにします。

    source vrenv/bin/activate

クイズ アプリケーションを準備する

クイズ アプリケーションを含むリポジトリは github.com にあります。 このセクションでは、Cloud Shell を使用してコマンドを入力し、リポジトリのクローンを作成してからアプリケーションを実行します。

Cloud Shell でソースコードのクローンを作成する

  1. クラスのリポジトリのクローンを作成します。

git clone https://github.com/GoogleCloudPlatform/training-data-analyst
  1. 作業ディレクトリへのショートカットとしてソフトリンクを作成します。

ln -s ~/training-data-analyst/courses/developingapps/v1.3/python/datastore ~/datastore

クイズ アプリケーションを構成し、実行する

  1. このラボのファイルが含まれているディレクトリに移動します。

    cd ~/datastore/start
  2. GCP プロジェクト ID を参照する環境変数 GCLOUD_PROJECT をエクスポートします。

    export GCLOUD_PROJECT=$DEVSHELL_PROJECT_ID
  3. アプリケーションの依存関係をインストールします。

    pip install -r requirements.txt
  4. アプリケーションを実行します。

    python run_server.py

    アプリケーションの実行が開始されると、次のようなメッセージが表示されます。

    * Running on http://127.0.0.1:8080/ (Press CTRL+C to quit) * Restarting with stat * Debugger is active!* Debugger PIN: 179-313-240

クイズ アプリケーションを確認する

  1. Cloud Shell で、[ウェブでプレビュー] > [ポート 8080 でプレビュー] をクリックして、クイズ アプリケーションをプレビューします。

    web_preview.png

    このウェブ アプリケーションのユーザー インターフェースが表示されます。主に次の 3 つの部分で構成されています。

    • Create Question
    • Take Test
    • Leaderboard

    welcome_to_quiz.png

  2. ナビゲーション バーで、[Create Question] をクリックします。

    質問と答えのテキストボックスと正しい答えを選択するためのラジオボタンを含む、簡単なフォームが表示されます。

  3. ナビゲーション バーで [Take Test]、[GCP] の順にクリックし、GCP の質問にアクセスします。

    質問の例が表示されます。

    gcp_quiz.png

    アプリケーションのこの箇所で解答者が質問に答えます。

  4. サーバー側アプリケーションに戻るには、ナビゲーション バーの [Quite Interesting Quiz] リンクをクリックします。

クイズ アプリケーションのコードを調べる

このラボでは、ファイルの閲覧と編集を行います。Cloud Shell にインストールされている nanovim などの shell エディタや、Cloud Shell コードエディタを使用できます。

このラボでは、Cloud Shell コードエディタを使用してこのクイズ アプリケーションのコードを確認します。

Cloud Shell コードエディタを起動する

Cloud Shell で [エディタを開く] をクリックして、コードエディタを起動します。

OpenEditor11.png

Flask ウェブ アプリケーションを確認する

  1. エディタの左側にあるファイル ブラウザ パネルを使用して、/datastore/start フォルダに移動します。

  2. ...run-server.py ファイルを選択します。

    このファイルにはアプリケーションのエントリポイントが含まれ、ポート 8080 でアプリケーションを実行します。

  3. ...quiz/__init__.py ファイルを選択します。

    このファイルは、ウェブ アプリケーションと REST API のルートをインポートします。

  4. ...quiz/webapp/questions.py ファイルと ...quiz/webapp/routes.py ファイルを選択します。

    これらのファイルには、URI をハンドラにマッピングするルートが含まれています。ハンドラには、フォームを表示するものと、出題者がこのウェブ アプリケーションに投稿したフォームデータを収集するものがあります。

  5. ...quiz/webapp/templates フォルダを選択します。

    このフォルダには、Jinja2 テンプレートを使用するウェブ アプリケーション ユーザー インターフェースのテンプレートが含まれています。

  6. ...quiz/webapp/templates/add.html ファイルを表示します。

    このファイルには、[Create Question] フォームの Jinja2 テンプレートが含まれています。

    クイズを選択するための選択リスト、出題者が質問と答えを入力できるテキストボックス、正しい答えを選択するためのラジオボタンがあることを確認してください。

  7. ...quiz/api/api.py ファイルを選択します。

    このファイルには、テストを受ける解答者に JSON データを送信するハンドラが含まれています。

  8. ...quiz/gcp/datastore.py ファイルを選択します。

    このファイルに、Cloud Datastore を使用してクイズの質問の保存と読み込みを行うための Datastore コードを記述します。

    このモジュールは、ウェブ アプリケーションと API にインポートされます。

Cloud Datastore にエンティティを追加する

このセクションでは、フォームデータを Cloud Datastore に保存するためのコードを記述します。

App Engine アプリケーションを作成して Cloud Datastore をプロビジョニングする

  1. Cloud Shell に戻り、Ctrl+C キーを押してアプリケーションを停止します。

  2. 次のコマンドを実行して、プロジェクトに App Engine アプリケーションを作成します。

    gcloud app create --region "us-central"

App Engine アプリケーションが作成されると次のメッセージが表示されます。

Creating App Engine application in project [qwiklabs-gcp-f67238775c00cfaa] and region [us-central]....done. Success! The app is now created. Please use `gcloud app deploy` to deploy your first app.

Python の Datastore モジュールをインポートして使用する

Cloud Shell エディタで ...quiz/gcp/datastore.py ファイルを開き、以下の処理を実行するコードを追加します。

  • os モジュールをインポートする。
  • os モジュールを使って GCLOUD_PROJECT 環境変数を取得する。
  • google.cloud パッケージから datastore モジュールをインポートする。
  • datastore_client という名前の datastore.Client クライアント オブジェクトを宣言する。

更新後の datastore.py

# TODO: os モジュールのインポート import os # END TODO # TODO: GCLOUD_PROJECT 環境変数の取得 project_id = os.getenv('GCLOUD_PROJECT') # END TODO from flask import current_app # TODO: google.cloud パッケージから datastore モジュールをインポート from google.cloud import datastore # END TODO # TODO: Cloud Datastore クライアント オブジェクトを作成 # Datastore クライアント オブジェクトにはプロジェクト ID が必要 # 以前に環境変数から検索されたプロジェクト ID を渡す datastore_client = datastore.Client(project_id) # END TODO

Cloud Datastore エンティティを作成するコードを記述する

引き続き ...quiz/gcp/datastore.py で作業します。

save_question() 関数に移動して、既存の pass プレースホルダ ステートメントを削除してから、以下の処理を実行するコードを追加します。

  • Datastore クライアント オブジェクトを使用して、種類が 'Question' の Datastore エンティティのキーを作成する。
  • そのキーを使用して、質問の Datastore エンティティを作成する。
  • ウェブ アプリケーションのフォームから提供される値の辞書の項目を反復処理する。
  • ループの本体で、キーと値を Datastore エンティティ オブジェクトに割り当てる。
  • Datastore クライアントを使用してデータを保存する。

datastore.py - save_question() 関数

""" 各質問のエンティティを作成し、永続化する Datastore キーは、リレーショナル データベースの主キーに相当する キーの主な作成方法は 2 つある: 1. 種類を指定し、Datastore で一意の数値 ID を生成する 2. 種類と一意の文字列 ID を指定する """ def save_question(question): # TODO: 種類が Question である Datastore エンティティのキーを作成する key = datastore_client.key('Question') # END TODO # TODO: キーを使用して Datastore エンティティ オブジェクトを作成する q_entity = datastore.Entity(key=key) # END TODO # TODO: 関数に入力されたフォーム値を反復処理する for q_prop, q_val in question.items(): # END TODO # TODO: 各キーと値を Datastore エンティティに割り当てる q_entity[q_prop] = q_val # END TODO # TODO: エンティティを保存する datastore_client.put(q_entity) # END TODO

datastore.py を保存します。

アプリケーションを実行して Cloud Datastore エンティティを作成する

  1. ...quiz/gcp/datastore.py ファイルを保存し、Cloud Shell コマンド プロンプトに戻ります。

  2. 次のコマンドを実行して、アプリケーションを実行します。

python run_server.py
  1. Cloud Shell で [ウェブでプレビュー] アイコン > [ポート 8080 でプレビュー] をクリックして、クイズ アプリケーションをプレビューします。
  2. [Create Question] をクリックします。
  3. フォームに次の値を入力して、[Save] をクリックします。

フォームの項目

Author

[自分の名前]

Quiz

Google Cloud Platform

Title

Which company owns GCP?

Answer 1

Amazon

Answer 2

Google([Answer 2] のラジオボタンを選択します)

Answer 3

IBM

Answer 4

Microsoft

アプリケーションのホームページに戻ります。

  1. Cloud Platform Console に戻り、ナビゲーション メニュー > [Datastore] > [エンティティ] をクリックします。

datastore_entities.png

作成した新しい質問が表示されます。

Cloud Datastore エンティティを取得する

このセクションでは、Cloud Datastore からエンティティ データを取得してアプリケーションに質問を表示するためのコードを記述します。

Cloud Datastore エンティティを取得するためのコードを記述する

コードエディタで ...quiz/gcp/datastore.py ファイルを開き、list_entities(quiz, redact) 関数のコードを削除して、次の処理を実行するクエリに置き換えます。

  • Cloud Datastore から特定のクイズの Question エンティティを取得する。
  • Datastore クライアントを使用してクエリを取得し、返されたデータを使用してリストを作成する。
  • リストの項目を列挙して、各エンティティのキーの識別子を最上位のプロパティに昇格させる。
  • 結果を返す。

元のコード:

""" 該当するクイズの Question エンティティ リストを返します - クイズ名でフィルタ、gcp にデフォルト設定 - ページングなし - ID プロパティとしてエンティティ キーに追加 - redact が true ならば、correctAnswer プロパティを各エンティティから削除 """ def list_entities(quiz='gcp', redact=True): return [{'quiz':'gcp', 'title':'Sample question', 'answer1': 'A', 'answer2': 'B', 'answer3': 'C', 'answer4': 'D', 'correctAnswer': 1, 'author': 'Nigel'}] """

更新後のコード:

""" 該当するクイズの Question エンティティ リストを返します - クイズ名でフィルタ、gcp にデフォルト設定 - ページングなし - ID プロパティとしてエンティティ キーに追加 - redact が true ならば、correctAnswer プロパティを各エンティティから削除 """ def list_entities(quiz='gcp', redact=True): query = datastore_client.query(kind='Question') query.add_filter('quiz', '=', quiz) results =list(query.fetch()) for result in results: result['id'] = result.key.id if redact: for result in results: del result['correctAnswer'] return results """

datastore.py を保存します。

アプリケーションを実行して Cloud Datastore に対するクエリをテストする

最後に、先ほどの質問が Datastore から取得されてクイズ アプリケーションに読み込まれるかどうかをテストします。

Cloud Shell で、Ctrl+C キーを押してアプリケーションを停止してから、再びアプリケーションを開始します。

python run_server.py

クイズをプレビューします。クイズを実行しているブラウザがまだ開いている場合は、ブラウザを再読み込みします。それ以外の場合は、[ウェブでプレビュー] > [ポート 8080 でプレビュー] をクリックします。

[Take Test] > [GCP] をクリックします。

先ほど作成した質問が表示されるはずです。

end_quiz.png

ラボを終了する

ラボが完了したら、[ラボを終了] をクリックします。ラボで使用したリソースが Google Cloud Skills Boost から削除され、アカウントの情報も消去されます。

ラボの評価を求めるダイアログが表示されたら、星の数を選択してコメントを入力し、[送信] をクリックします。

星の数は、それぞれ次の評価を表します。

  • 星 1 つ = 非常に不満
  • 星 2 つ = 不満
  • 星 3 つ = どちらともいえない
  • 星 4 つ = 満足
  • 星 5 つ = 非常に満足

フィードバックを送信しない場合は、ダイアログ ボックスを閉じてください。

フィードバックやご提案の送信、修正が必要な箇所をご報告いただく際は、[サポート] タブをご利用ください。

Copyright 2020 Google LLC All rights reserved. Google および Google のロゴは Google LLC の商標です。その他すべての企業名および商品名はそれぞれ各社の商標または登録商標です。

始める前に

  1. ラボでは、Google Cloud プロジェクトとリソースを一定の時間利用します
  2. ラボには時間制限があり、一時停止機能はありません。ラボを終了した場合は、最初からやり直す必要があります。
  3. 画面左上の [ラボを開始] をクリックして開始します

シークレット ブラウジングを使用する

  1. ラボで使用するユーザー名パスワードをコピーします
  2. プライベート モードで [コンソールを開く] をクリックします

コンソールにログインする

    ラボの認証情報を使用して
  1. ログインします。他の認証情報を使用すると、エラーが発生したり、料金が発生したりする可能性があります。
  2. 利用規約に同意し、再設定用のリソースページをスキップします
  3. ラボを終了する場合や最初からやり直す場合を除き、[ラボを終了] はクリックしないでください。クリックすると、作業内容がクリアされ、プロジェクトが削除されます

このコンテンツは現在ご利用いただけません

利用可能になりましたら、メールでお知らせいたします

ありがとうございます。

利用可能になりましたら、メールでご連絡いたします

1 回に 1 つのラボ

既存のラボをすべて終了して、このラボを開始することを確認してください

シークレット ブラウジングを使用してラボを実行する

このラボの実行には、シークレット モードまたはシークレット ブラウジング ウィンドウを使用してください。これにより、個人アカウントと受講者アカウントの競合を防ぎ、個人アカウントに追加料金が発生することを防ぎます。