arrow_back

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

参加 ログイン
Test and share your knowledge with our community!
done
Get access to over 700 hands-on labs, skill badges, and courses

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

Lab 50分 universal_currency_alt クレジット: 5 show_chart 中級
Test and share your knowledge with our community!
done
Get access to over 700 hands-on labs, skill badges, and courses

GSP184

Google Cloud セルフペース ラボ

概要

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

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

目標

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

  • Cloud Shell を開発環境として利用する
  • アプリケーションをプレビューする
  • アプリケーション コードを更新して Cloud Datastore を統合する

設定と要件

[ラボを開始] ボタンをクリックする前に

こちらの手順をお読みください。ラボの時間は記録されており、一時停止することはできません。[ラボを開始] をクリックするとスタートするタイマーは、Google Cloud のリソースを利用できる時間を示しています。

このハンズオンラボでは、シミュレーションやデモ環境ではなく、実際のクラウド環境を使ってご自身でラボのアクティビティを行うことができます。そのため、ラボの受講中に Google Cloud にログインおよびアクセスするための、新しい一時的な認証情報が提供されます。

このラボを完了するためには、下記が必要です。

  • 標準的なインターネット ブラウザ(Chrome を推奨)
注: このラボの実行には、シークレット モードまたはシークレット ブラウジング ウィンドウを使用してください。これにより、個人アカウントと受講者アカウント間の競合を防ぎ、個人アカウントに追加料金が発生することを防ぎます。
  • ラボを完了するために十分な時間を確保してください。ラボをいったん開始すると一時停止することはできません。
注: すでに個人の Google Cloud アカウントやプロジェクトをお持ちの場合でも、このラボでは使用しないでください。アカウントへの追加料金が発生する可能性があります。

ラボを開始して Google Cloud コンソールにログインする方法

  1. [ラボを開始] ボタンをクリックします。ラボの料金をお支払いいただく必要がある場合は、表示されるポップアップでお支払い方法を選択してください。 左側の [ラボの詳細] パネルには、以下が表示されます。

    • [Google コンソールを開く] ボタン
    • 残り時間
    • このラボで使用する必要がある一時的な認証情報
    • このラボを行うために必要なその他の情報(ある場合)
  2. [Google コンソールを開く] をクリックします。 ラボでリソースが起動し、別のタブで [ログイン] ページが表示されます。

    ヒント: タブをそれぞれ別のウィンドウで開き、並べて表示しておきましょう。

    注: [アカウントの選択] ダイアログが表示されたら、[別のアカウントを使用] をクリックします。
  3. 必要に応じて、[ラボの詳細] パネルから [ユーザー名] をコピーして [ログイン] ダイアログに貼り付けます。[次へ] をクリックします。

  4. [ラボの詳細] パネルから [パスワード] をコピーして [ようこそ] ダイアログに貼り付けます。[次へ] をクリックします。

    重要: 認証情報は左側のパネルに表示されたものを使用してください。Google Cloud Skills Boost の認証情報は使用しないでください。 注: このラボでご自身の Google Cloud アカウントを使用すると、追加料金が発生する場合があります。
  5. その後次のように進みます。

    • 利用規約に同意してください。
    • 一時的なアカウントなので、復元オプションや 2 要素認証プロセスは設定しないでください。
    • 無料トライアルには登録しないでください。

その後このタブで Cloud Console が開きます。

注: 左上にある [ナビゲーション メニュー] をクリックすると、Google Cloud のプロダクトやサービスのリストが含まれるメニューが表示されます。 ナビゲーション メニュー アイコン

Cloud Shell をアクティブにする

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

  1. Google Cloud コンソールの上部にある「Cloud Shell をアクティブにする」アイコン 「Cloud Shell をアクティブにする」アイコン をクリックします。

接続した時点で認証が完了しており、プロジェクトに各自の PROJECT_ID が設定されます。出力には、このセッションの PROJECT_ID を宣言する次の行が含まれています。

Your Cloud Platform project in this session is set to YOUR_PROJECT_ID

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

  1. (省略可)次のコマンドを使用すると、有効なアカウント名を一覧表示できます。
gcloud auth list
  1. [承認] をクリックします。

  2. 出力は次のようになります。

出力:

ACTIVE: * ACCOUNT: student-01-xxxxxxxxxxxx@qwiklabs.net To set the active account, run: $ gcloud config set account `ACCOUNT`
  1. (省略可)次のコマンドを使用すると、プロジェクト ID を一覧表示できます。
gcloud config list project

出力:

[core] project = <project_ID>

出力例:

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

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

  • Cloud Shell で [エディタを開く] をクリックして、コードエディタを起動します。「新しいウィンドウで開く」アイコンをクリックする必要がある場合があります。

[エディタを開く] ボタン。

注: ブラウザの別のタブでコードエディタが起動します。

タスク 1. 仮想環境を作成する

  1. [ターミナルを開く] をクリックします。

Python 仮想環境を使用して、パッケージのインストール先をシステムとは別の場所にします。

virtualenv -p python3 vrenv
  1. 仮想環境をアクティブにします。
source vrenv/bin/activate

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

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

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

  • クラスのリポジトリのクローンを作成します。
git clone https://github.com/GoogleCloudPlatform/training-data-analyst

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

  1. 作業ディレクトリを変更します。

    cd ~/training-data-analyst/courses/developingapps/python/datastore/start
  2. プロジェクト ID を参照する環境変数 GCLOUD_PROJECT をエクスポートします。

    export GCLOUD_PROJECT=$DEVSHELL_PROJECT_ID 注: Cloud Shell でのプロジェクト ID

    Cloud Shell で作業している間は、`$DEVSHELL_PROJECT_ID` 環境変数でプロジェクト 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 でプレビュー] をクリックして、クイズ アプリケーションをプレビューします。

    ウェブ プレビュー メニュー内でハイライト表示されている「ポート 8080 でプレビュー」オプション。

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

    • Create Question
    • Take Test
    • Leaderboard

    「Create Question」、「Take Test」、「Leaderboard」の 3 つの部分が表示されている「Welcome to the Quite Interesting Quiz」ページ。

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

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

    注: 出題者は、アプリケーションのこの箇所で質問を追加できます。 この箇所は、一般的な Python ウェブ アプリケーション フレームワークである Flask を使用したサーバーサイド ウェブ アプリケーションとして記述されています。
  3. ナビゲーション バーで [Take Test]、[GCP] の順にクリックし、Google Cloud の質問にアクセスします。

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

    質問の例のテンプレート。回答の例と [Submit Answer] ボタンも一緒に表示されている。

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

    注: この箇所は、クライアントサイド ウェブ アプリケーションとして記述されています。
  4. サーバーサイド アプリケーションに戻るには、ナビゲーション バーの [Quite Interesting Quiz] リンクをクリックします。

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

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

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

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

  1. エディタの左側のファイル ブラウザ パネルを使用して、/training-data-analyst/courses/developingapps/python/datastore/start フォルダに移動します。
注: 以降のパスはこのフォルダからの相対パスです。 これは、一般的なアプリケーション フレームワークである Flask を使用して記述された標準的な Python アプリケーションです。
  1. ...run_server.py ファイルを選択します。

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

  2. ...quiz/_init_.py ファイルを選択します。

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

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

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

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

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

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

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

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

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

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

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

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

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

タスク 4. Cloud Datastore にエンティティを追加する

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

注: 次の文字列の間のコードを更新してください。

# TODO

# END TODO

学習効果を最大限に高めるために、セクションの最後にある完成後のコードブロックを参照せずにコードを記述してみてください。また、コード、インライン コメント、Cloud Datastore の関連する Datastore クライアント API ドキュメントも確認してください。

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

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

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

    gcloud app create --region "{{{project_0.startup_script.app_region | REGION }}}"

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

Creating App Engine application in project [qwiklabs-gcp-f67238775c00cfaa] and region {{{project_0.startup_script.app_region | REGION}}}....done. Success! The app is now created. Please use `gcloud app deploy` to deploy your first app. 注: この段階ではまだクイズのウェブ アプリケーションで App Engine を使用していません。Cloud Datastore を使用するには、プロジェクトに App Engine アプリケーションを作成する必要があります。

下の [進行状況を確認] をクリックして、ラボの進行状況を確認します。

App Engine アプリケーションの作成

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

  1. Cloud Shell エディタで ...quiz/gcp/datastore.py ファイルを開き、下に記載されている、次の処理を実行する更新後の datastore.py コードを追加します。

  2. os モジュールをインポートする。

  3. os モジュールを使って GCLOUD_PROJECT 環境変数を取得する。

  4. google.cloud パッケージから datastore モジュールをインポートする。

  5. 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 エンティティを作成するコードを記述する

  1. 引き続き ...quiz/gcp/datastore.py で、save_question() 関数に移動して、既存の pass プレースホルダ ステートメントを削除してから、下に記載されている、次の処理を実行する datastore.py - save_question() 関数コードを追加します。
  • Datastore クライアント オブジェクトを使用して、種類が 'Question' の Datastore エンティティのキーを作成する。
  • 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
  1. 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 Google Cloud?

Answer 1

Amazon

Answer 2

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

Answer 3

IBM

Answer 4

Microsoft

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

  1. コンソールに戻り、ナビゲーション メニュー > [Datastore] の順にクリックします。
  2. [デフォルト] のデータベースを選択して、[エンティティ] をクリックします。

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

下の [進行状況を確認] をクリックして、ラボの進行状況を確認します。

Cloud Datastore エンティティの作成

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

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

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

  1. コードエディタで ...quiz/gcp/datastore.py ファイルを開き、list_entities(quiz, redact) 関数のコードを削除して、次の処理を実行するクエリに置き換えます。
  • Cloud Datastore から特定のクイズの Question エンティティを取得する。
  • Datastore クライアントを使用してクエリを取得し、返されたデータを使用してリストを作成する。
  • リストの項目を列挙して、各エンティティのキーの識別子を最上位のプロパティに昇格させる。
  • 結果を返す。
  1. 元のコード:
""" 該当するクイズの 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 """
  1. datastore.py を保存します。

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

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

  1. Cloud Shell で、Ctrl+C キーを押してアプリケーションを停止してから、再びアプリケーションを開始します。
python run_server.py
  1. クイズをプレビューします。クイズを実行しているブラウザがまだ開いている場合は、ブラウザを再読み込みします。それ以外の場合は、「ウェブでプレビュー」アイコン > [ポート 8080 でプレビュー] をクリックします。

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

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

クイズの質問。可能な回答のリストと、[Submit Answer] ボタンも一緒に表示されている。

お疲れさまでした

セルフペース ラボ「アプリケーション開発: Cloud Datastore でのアプリケーション データの保存 - Python」はこれで終了です。このラボでは、Datastore を使用してオンライン クイズ アプリケーションのアプリケーション データを保存しました。また、データを取得してクイズに表示するようアプリケーションを構成しました。

クエストを完了する

このセルフペース ラボは、「Application Development - Python」クエストの一部です。クエストとは学習パスを構成する一連のラボのことで、完了すると成果が認められてバッジが贈られます。バッジは公開して、オンライン レジュメやソーシャル メディア アカウントにリンクできます。このラボの修了後、こちらのクエストまたはこのラボが含まれるクエストに登録すれば、すぐにクレジットを受け取ることができます。受講可能なすべてのクエストについては、Google Cloud Skills Boost カタログをご覧ください。

次のステップと詳細情報

マニュアルの最終更新日: 2023 年 10 月 16 日

ラボの最終テスト日: 2023 年 10 月 18 日

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