チェックポイント
Create an App Engine application
/ 50
Create a Cloud Datastore entity
/ 50
アプリ開発: Cloud Datastore でのアプリケーション データの保存 - Python
GSP184
概要
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 コンソールを開く] ボタン
- 残り時間
- このラボで使用する必要がある一時的な認証情報
- このラボを行うために必要なその他の情報(ある場合)
-
[Google コンソールを開く] をクリックします。 ラボでリソースが起動し、別のタブで [ログイン] ページが表示されます。
ヒント: タブをそれぞれ別のウィンドウで開き、並べて表示しておきましょう。
注: [アカウントの選択] ダイアログが表示されたら、[別のアカウントを使用] をクリックします。 -
必要に応じて、[ラボの詳細] パネルから [ユーザー名] をコピーして [ログイン] ダイアログに貼り付けます。[次へ] をクリックします。
-
[ラボの詳細] パネルから [パスワード] をコピーして [ようこそ] ダイアログに貼り付けます。[次へ] をクリックします。
重要: 認証情報は左側のパネルに表示されたものを使用してください。Google Cloud Skills Boost の認証情報は使用しないでください。 注: このラボでご自身の Google Cloud アカウントを使用すると、追加料金が発生する場合があります。 -
その後次のように進みます。
- 利用規約に同意してください。
- 一時的なアカウントなので、復元オプションや 2 要素認証プロセスは設定しないでください。
- 無料トライアルには登録しないでください。
その後このタブで Cloud Console が開きます。
Cloud Shell をアクティブにする
Cloud Shell は、開発ツールと一緒に読み込まれる仮想マシンです。5 GB の永続ホーム ディレクトリが用意されており、Google Cloud で稼働します。Cloud Shell を使用すると、コマンドラインで Google Cloud リソースにアクセスできます。
- Google Cloud コンソールの上部にある「Cloud Shell をアクティブにする」アイコン をクリックします。
接続した時点で認証が完了しており、プロジェクトに各自の PROJECT_ID が設定されます。出力には、このセッションの PROJECT_ID を宣言する次の行が含まれています。
gcloud
は Google Cloud のコマンドライン ツールです。このツールは、Cloud Shell にプリインストールされており、タブ補完がサポートされています。
- (省略可)次のコマンドを使用すると、有効なアカウント名を一覧表示できます。
-
[承認] をクリックします。
-
出力は次のようになります。
出力:
- (省略可)次のコマンドを使用すると、プロジェクト ID を一覧表示できます。
出力:
出力例:
gcloud
ドキュメントの全文については、gcloud CLI の概要ガイドをご覧ください。
Cloud Shell コードエディタを起動する
- Cloud Shell で [エディタを開く] をクリックして、コードエディタを起動します。「新しいウィンドウで開く」アイコンをクリックする必要がある場合があります。
タスク 1. 仮想環境を作成する
- [ターミナルを開く] をクリックします。
Python 仮想環境を使用して、パッケージのインストール先をシステムとは別の場所にします。
- 仮想環境をアクティブにします。
タスク 2. クイズ アプリケーションを準備する
クイズ アプリケーションを含むリポジトリは GitHub.com
にあります。
このセクションでは、Cloud Shell を使用してコマンドを入力し、リポジトリのクローンを作成してからアプリケーションを実行します。
Cloud Shell でソースコードのクローンを作成する
- クラスのリポジトリのクローンを作成します。
クイズ アプリケーションを構成し、実行する
-
作業ディレクトリを変更します。
cd ~/training-data-analyst/courses/developingapps/python/datastore/start -
プロジェクト ID を参照する環境変数
GCLOUD_PROJECT
をエクスポートします。export GCLOUD_PROJECT=$DEVSHELL_PROJECT_ID 注: Cloud Shell でのプロジェクト ID Cloud Shell で作業している間は、`$DEVSHELL_PROJECT_ID` 環境変数でプロジェクト ID にアクセスできます。 -
アプリケーションの依存関係をインストールします。互換性に関する警告は無視してください。
pip install -r requirements.txt -
アプリケーションを実行します。
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
クイズ アプリケーションを確認する
-
Cloud Shell で 「ウェブでプレビュー」 アイコン > [ポート 8080 でプレビュー] をクリックして、クイズ アプリケーションをプレビューします。
このウェブ アプリケーションのユーザー インターフェースが表示されます。主に次の 3 つの部分で構成されています。
- Create Question
- Take Test
- Leaderboard
-
ナビゲーション バーで、[Create Question] をクリックします。
質問と答えのテキスト ボックス、正しい答えを選択するためのラジオボタンを含む、簡単なフォームが表示されます。
注: 出題者は、アプリケーションのこの箇所で質問を追加できます。 この箇所は、一般的な Python ウェブ アプリケーション フレームワークである Flask を使用したサーバーサイド ウェブ アプリケーションとして記述されています。 -
ナビゲーション バーで [Take Test]、[GCP] の順にクリックし、Google Cloud の質問にアクセスします。
質問の例が表示されます。
アプリケーションのこの箇所で解答者が質問に答えます。
注: この箇所は、クライアントサイド ウェブ アプリケーションとして記述されています。 -
サーバーサイド アプリケーションに戻るには、ナビゲーション バーの [Quite Interesting Quiz] リンクをクリックします。
タスク 3. クイズ アプリケーションのコードを調べる
このラボでは、ファイルの閲覧と編集を行います。Cloud Shell にインストールされている nano
や vim
などの shell エディタや、Cloud Shell コードエディタを使用できます。
このラボでは、Cloud Shell コードエディタを使用してクイズ アプリケーションのコードを確認します。
Flask ウェブ アプリケーションを確認する
- エディタの左側のファイル ブラウザ パネルを使用して、
/training-data-analyst/courses/developingapps/python/datastore/start
フォルダに移動します。
-
...run_server.py
ファイルを選択します。このファイルにはアプリケーションのエントリポイントが含まれ、ポート 8080 でアプリケーションを実行します。
-
...quiz/_init_.py
ファイルを選択します。このファイルは、ウェブ アプリケーションと REST API のルートをインポートします。
-
...quiz/webapp/questions.py
ファイルと...quiz/webapp/routes.py
ファイルを選択します。これらのファイルには、URI をハンドラにマッピングするルートが含まれています。ハンドラには、フォームを表示するものと、出題者がこのウェブ アプリケーションに投稿したフォームデータを収集するものがあります。
-
...quiz/webapp/templates
フォルダを選択します。このフォルダには、Jinja2 テンプレートを使用するウェブ アプリケーション ユーザー インターフェースのテンプレートが含まれています。
-
...quiz/webapp/templates/add.html
ファイルを表示します。このファイルには、[Create Question] フォームの Jinja2 テンプレートが含まれています。
クイズを選択するための選択リスト、出題者が質問と答えを入力できるテキストボックス、正しい答えを選択するためのラジオボタンがあることを確認してください。
-
...quiz/api/api.py
ファイルを選択します。このファイルには、テストを受ける解答者に JSON データを送信するハンドラが含まれています。
-
...quiz/gcp/datastore.py
ファイルを選択します。このファイルに、Cloud Datastore を使用してクイズの質問の保存と読み込みを行うための Datastore コードを記述します。
このモジュールは、ウェブ アプリケーションと API にインポートされます。
タスク 4. Cloud Datastore にエンティティを追加する
このセクションでは、フォームデータを Cloud Datastore に保存するためのコードを記述します。
# TODO
# END TODO
学習効果を最大限に高めるために、セクションの最後にある完成後のコードブロックを参照せずにコードを記述してみてください。また、コード、インライン コメント、Cloud Datastore の関連する Datastore クライアント API ドキュメントも確認してください。
App Engine アプリケーションを作成して Cloud Datastore をプロビジョニングする
-
Cloud Shell に戻り、Ctrl+C キーを押してアプリケーションを停止します。
-
次のコマンドを使用して、プロジェクトに App Engine アプリケーションを作成します。
gcloud app create --region "{{{project_0.startup_script.app_region | REGION }}}"
App Engine アプリケーションが作成されると次のメッセージが表示されます。
下の [進行状況を確認] をクリックして、ラボの進行状況を確認します。
Python の Datastore モジュールをインポートして使用する
-
Cloud Shell エディタで
...quiz/gcp/datastore.py
ファイルを開き、下に記載されている、次の処理を実行する更新後の datastore.py コードを追加します。 -
os
モジュールをインポートする。 -
os モジュールを使って
GCLOUD_PROJECT
環境変数を取得する。 -
google.cloud
パッケージからdatastore
モジュールをインポートする。 -
datastore_client
という名前のdatastore.Client
クライアント オブジェクトを宣言する。
更新後の datastore.py
Cloud Datastore エンティティを作成するコードを記述する
- 引き続き
...quiz/gcp/datastore.py
で、save_question()
関数に移動して、既存のpass
プレースホルダ ステートメントを削除してから、下に記載されている、次の処理を実行する datastore.py - save_question() 関数コードを追加します。
- Datastore クライアント オブジェクトを使用して、種類が
'Question'
の Datastore エンティティのキーを作成する。 - Datastore を使用して、そのキーで質問の Datastore エンティティを作成する。
- ウェブ アプリケーションのフォームから提供される値の辞書の項目を反復処理する。
- ループの本体で、キーと値を Datastore エンティティ オブジェクトに割り当てる。
- Datastore クライアントを使用してデータを保存する。
datastore.py - save_question() 関数
-
datastore.py
を保存します。
アプリケーションを実行して Cloud Datastore エンティティを作成する
-
...quiz/gcp/datastore.py
ファイルを保存し、Cloud Shell コマンド プロンプトに戻ります。 - 次のコマンドを実行して、アプリケーションを実行します。
- Cloud Shell で「ウェブでプレビュー」アイコン > [ポート 8080 でプレビュー] をクリックして、クイズ アプリケーションをプレビューします。
- [Create Question] をクリックします。
- フォームに次の値を入力して、[Save] をクリックします。
フォームの項目 |
値 |
Author |
|
Quiz |
|
Title |
|
Answer 1 |
|
Answer 2 |
|
Answer 3 |
|
Answer 4 |
|
アプリケーションのホームページに戻ります。
- コンソールに戻り、ナビゲーション メニュー > [Datastore] の順にクリックします。
- [デフォルト] のデータベースを選択して、[エンティティ] をクリックします。
作成した新しい質問が表示されます。
下の [進行状況を確認] をクリックして、ラボの進行状況を確認します。
Cloud Datastore エンティティを取得する
このセクションでは、Cloud Datastore からエンティティ データを取得してアプリケーションに質問を表示するためのコードを記述します。
Cloud Datastore エンティティを取得するためのコードを記述する
- コードエディタで
...quiz/gcp/datastore.py
ファイルを開き、list_entities(quiz, redact)
関数のコードを削除して、次の処理を実行するクエリに置き換えます。
- Cloud Datastore から特定のクイズの Question エンティティを取得する。
- Datastore クライアントを使用してクエリを取得し、返されたデータを使用してリストを作成する。
- リストの項目を列挙して、各エンティティのキーの識別子を最上位のプロパティに昇格させる。
- 結果を返す。
- 元のコード:
更新後のコード:
-
datastore.py
を保存します。
アプリケーションを実行し、Cloud Datastore に対するクエリをテストする
最後に、先ほどの質問が Datastore から取得されてクイズ アプリケーションに読み込まれるかどうかをテストします。
- Cloud Shell で、Ctrl+C キーを押してアプリケーションを停止してから、再びアプリケーションを開始します。
-
クイズをプレビューします。クイズを実行しているブラウザがまだ開いている場合は、ブラウザを再読み込みします。それ以外の場合は、「ウェブでプレビュー」アイコン > [ポート 8080 でプレビュー] をクリックします。
-
[Take Test] > [GCP] をクリックします。
先ほど作成した質問が表示されるはずです。
お疲れさまでした
セルフペース ラボ「アプリケーション開発: Cloud Datastore でのアプリケーション データの保存 - Python」はこれで終了です。このラボでは、Datastore を使用してオンライン クイズ アプリケーションのアプリケーション データを保存しました。また、データを取得してクイズに表示するようアプリケーションを構成しました。
クエストを完了する
このセルフペース ラボは、「Application Development - Python」クエストの一部です。クエストとは学習パスを構成する一連のラボのことで、完了すると成果が認められてバッジが贈られます。バッジは公開して、オンライン レジュメやソーシャル メディア アカウントにリンクできます。このラボの修了後、こちらのクエストまたはこのラボが含まれるクエストに登録すれば、すぐにクレジットを受け取ることができます。受講可能なすべてのクエストについては、Google Cloud Skills Boost カタログをご覧ください。
次のステップと詳細情報
-
Datastore の詳細については、Google Cloud Datastore ドキュメントをご覧ください。
-
Google Cloud 上の Python をご確認ください。
マニュアルの最終更新日: 2023 年 10 月 16 日
ラボの最終テスト日: 2023 年 10 月 18 日
Copyright 2024 Google LLC All rights reserved. Google および Google のロゴは Google LLC の商標です。その他すべての企業名および商品名はそれぞれ各社の商標または登録商標です。