ラボの設定手順と要件
アカウントと進行状況を保護します。このラボを実行するには、常にシークレット ブラウジング ウィンドウとラボの認証情報を使用してください。

App Dev - Developing a Backend Service: Python

ラボ 2時間 universal_currency_alt クレジット: 5 show_chart 上級
info このラボでは、学習をサポートする AI ツールが組み込まれている場合があります。
このコンテンツはまだモバイル デバイス向けに最適化されていません。
快適にご利用いただくには、メールで送信されたリンクを使用して、デスクトップ パソコンでアクセスしてください。

概要

Google App Engine では、コマンドラインからのリソース管理、本番環境でのソースコードのデバッグ、API バックエンドの実行といった作業が可能です。このラボではバックエンド サービスに集中し、Pub/Sub、Natural Language、Spanner のサービスと API を組み合わせて、オンライン クイズ アプリケーションからフィードバックとスコアを収集して分析します。

目標

このラボでは、次のタスクを行います。

  • メッセージを作成して Cloud Pub/Sub トピックにパブリッシュする。

  • 独立したワーカー アプリケーションでそのトピックにサブスクライブしてメッセージを受信する。

  • Cloud Natural Language Machine Learning API を使用する。

  • Cloud Spanner のデータベース インスタンスを作成して構成し、そのデータベースにデータを挿入する。

設定と要件

ラボの設定

各ラボでは、新しい 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 の概要ガイド をご覧ください。

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

このセクションでは、Cloud Shell にアクセスして、次の操作を行うコマンドを入力します。

  • クイズ アプリケーションを含む git リポジトリのクローンを作成する

  • 環境変数を設定する

  • アプリケーションを実行する

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

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

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

    ln -s ~/training-data-analyst/courses/developingapps/v1.3/python/pubsub-languageapi-spanner ~/pubsub-languageapi-spanner

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

このセクションでは、Cloud Shell のウィンドウを 2 つ開きます。1 つはクイズ アプリケーションのウェブ部分のためのウィンドウ、もう 1 つはコンソールを処理するワーカー部分のためのウィンドウです。

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

    cd ~/pubsub-languageapi-spanner/start
  2. スクリプトを実行して、ウェブ アプリケーションを構成します。

    このスクリプト ファイルを実行すると、以下の処理が行われます。

    • GCP サービス アカウントを作成し、アプリケーションに使用する GCP サービスにアクセスできるように構成する。

    • App Engine アプリケーションを作成する。

    • 環境変数 GCLOUD_PROJECTGCLOUD_BUCKETGOOGLE_APPLICATION_CREDENTIALS をエクスポートする。

    • Python 3 対応の隔離された virtualenv Python 環境を作成して有効にする。

    • pip を更新し、pip install -r requirements.txt を実行する。

    • Cloud Datastore にエンティティを作成する。

    • Google Cloud Platform のプロジェクト ID を出力する。

    . prepare_web_environment.sh
  3. ウェブ アプリケーションを実行します。

    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: 110-448-781 注: サービス アカウントに Google Cloud Storage バケットへの storage.buckets.get アクセスがないことを示すエラーがある場合、権限が当該のサービス アカウントに反映されていない可能性があります。スクリプトが実行されていることが示されるまで、python コマンドを実行します。
  4. Cloud Shell のタブの右側にある [新しいタブを開く](+)をクリックして、2 つ目の Cloud Shell ウィンドウを追加します。このウィンドウではワーカー(コンソール)アプリケーションを実行します。

  5. 2 つ目のウィンドウで、作業ディレクトリを変更します。

    cd ~/pubsub-languageapi-spanner/start
  6. 2 つ目の Cloud Shell ウィンドウで、ワーカー アプリケーションを実行します。

    . run_worker.sh

    このスクリプト ファイルを実行すると、以下の処理が行われます。

    • 環境変数 GCLOUD_PROJECTGCLOUD_BUCKETGOOGLE_APPLICATION_CREDENTIALS をエクスポートする。
    • Python 3 対応の virtualenv 環境を有効にする。
    • ワーカー アプリケーションを実行する(python -m quiz.console.worker)。

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

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

    preview_on_port_8080.png

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

  3. [Places] をクリックします。

  4. 質問に答えます。

    質問に答えると、フィードバックの送信を求める最終画面が表示されます。

    フォームに情報を入力することはできますが、[Send Feedback] ボタンはまだ機能しません。

  5. 1 つ目の Cloud Shell ウィンドウに戻り、Ctrl+C キーを押してウェブ アプリケーションを停止します。

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

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

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

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

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

cloud-shell-editor.png

GCP アプリケーションのコード構造を確認する

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

  2. .../quiz/gcp フォルダにある pubsub.py ファイルを選択します。

    このファイルには、アプリケーションが Cloud Pub/Sub トピックにフィードバック メッセージをパブリッシュし、Cloud Pub/Sub サブスクリプションからメッセージを受信するためのコールバックを登録できるようにするモジュールが含まれています。

  3. .../quiz/gcp フォルダにある languageapi.py ファイルを選択します。

    このファイルには、ユーザーが Cloud Natural Language ML API にテキストを送信し、この API から感情スコアを受信できるようにするモジュールが含まれています。

  4. spanner.py ファイルを選択します。

    このファイルには、ユーザーがフィードバックと Natural Language API のレスポンス データを Cloud Spanner データベース インスタンスに保存できるようにするモジュールが含まれています。

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

  1. .../quiz/api フォルダにある api.py ファイルを選択します。

    /api/quizzes/feedback/:quiz ルートに送信された POST メッセージのハンドラは、クライアントから受け取ったフィードバック データを Pub/Sub にパブリッシュします。

  2. .../quiz/console フォルダにある worker.py ファイルを選択します。

    このファイルは、Pub/Sub サブスクリプションに配信されたメッセージを使用する独立したコンソール アプリケーションとして実行されます。

Cloud Pub/Sub を操作する

このセクションでは、Google Cloud Platform プロジェクトで Cloud Pub/Sub のトピックとサブスクリプションを作成し、メッセージをパブリッシュして取得します。

Cloud Pub/Sub トピックを作成する

  1. Cloud Platform Console で、ナビゲーション メニュー > [Pub/Sub] > [トピック] をクリックします。

    nav_pubsub.png

  2. [トピックを作成] をクリックします。

  3. [トピック ID] に「feedback」と入力し、[トピックを作成] をクリックします。

Cloud Pub/Sub サブスクリプションを作成する

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

  2. feedback トピックに対して worker-subscription という名前の Cloud Pub/Sub サブスクリプションを作成します。

    gcloud pubsub subscriptions create worker-subscription --topic feedback

Cloud Pub/Sub トピックにメッセージをパブリッシュする

feedback トピックに "Hello World" というメッセージをパブリッシュします。

gcloud pubsub topics publish feedback --message "Hello World"

Cloud Pub/Sub サブスクリプションからメッセージを取得する

最後に、メッセージの自動確認応答を使用して feedback トピックからメッセージを pull します。

gcloud pubsub subscriptions pull worker-subscription --auto-ack

出力:

message_ack.png

プログラムで Cloud Pub/Sub にメッセージをパブリッシュする

Cloud Pub/Sub にメッセージをパブリッシュするためのコードを記述する

Python の Cloud Pub/Sub モジュールをインポートして使用する

このセクションでは、...quiz/gcp/pubsub.py を更新します。手順は次のとおりです。

  1. エディタで ...quiz/gcp/pubsub.py ファイルを開きます。

  2. google.cloud パッケージから pubsub_v1 モジュールを読み込みます。

quiz/gcp/pubsub.py

# TODO: Cloud Pub/Sub モジュールを読み込む from google.cloud import pubsub_v1 # END TODO
  1. Cloud Pub/Sub パブリッシャー クライアントを作成します。

# TODO: Pub/Sub パブリッシャー クライアントを作成する publisher = pubsub_v1.PublisherClient() # END TODO
  1. 先ほど作成した Pub/Sub の feedback トピックを参照する完全修飾パスを取得します。

# TODO: feedback トピックを参照するトピック オブジェクトを作成する topic_path = publisher.topic_path(project_id, 'feedback') # END TODO Cloud Shell エディタはアプリケーションに使用されているものと同じバージョンの python を使用するように構成されていないため、lint が誤エラーを報告することがあります。

Cloud Pub/Sub にメッセージをパブリッシュするためのコードを記述する

  1. publish_feedback(feedback) 関数で、feedback トピックにメッセージをパブリッシュします。

quiz/gcp/pubsub.py、publish_feedback(feedback) 関数

# TODO: フィードバック オブジェクトを feedback トピックにパブリッシュする payload = json.dumps(feedback, indent=2, sort_keys=True) data = payload.encode('utf-8') future = publisher.publish(topic_path, data=data) return future.result() # END TODO
  1. ファイルを保存します。

Pub/Sub のパブリッシュ機能を使用するためのコードを記述する

  1. .../quiz/api/api.py ファイルで、quiz.gcp パッケージから pubsub モジュールを読み込みます。

quiz/api/api.py

# TODO: pubsub をインポート リストに追加する from quiz.gcp import datastore, pubsub # END TODO
  1. publish_feedback(feedback) では、pass プレースホルダ ステートメントを削除して、pubsub.publish_feedback(feedback) 関数を呼び出し、フィードバックが受信されたことを示すレスポンスをクライアントに返します。

quiz/api/api.py、publish_feedback(feedback) 関数

# TODO: pubsub モジュールを使用してフィードバックを # パブリッシュし、結果を返す result = pubsub.publish_feedback(feedback) response = Response(json.dumps(result, indent=2, sort_keys=True)) response.headers['Content-Type'] = 'application/json' return response # END TODO
  1. ファイルを保存します。

アプリケーションを実行して Pub/Sub メッセージを作成する

  1. 1 つ目の Cloud Shell タブで、ウェブ アプリケーションを再度開始します(実行中の場合は停止してから開始します)。

  2. ウェブ アプリケーションをプレビューします。

  3. [Take Test] をクリックします。

  4. [Places] をクリックします。

  5. 質問に答えて評価を選択し、フィードバック テキストを入力してから [Send Feedback] をクリックします。

  6. 2 つ目の Cloud Shell ウィンドウで、次のコマンドを実行して worker-subscription からメッセージを pull します。

    gcloud pubsub subscriptions pull worker-subscription --auto-ack

    出力:

    worker-auto-ack.png

  7. 1 つ目の Cloud Shell タブで、ウェブ アプリケーションを停止します。

プログラムで Cloud Pub/Sub トピックにサブスクライブする

このセクションでは、Cloud Pub/Sub トピックへのサブスクリプションを作成するためのコードと、ワーカー コンソール アプリケーションでメッセージ通知を受信するためのコードを記述します。

Cloud Pub/Sub サブスクリプションを作成してメッセージを受信するためのコードを記述する

  1. ...quiz/gcp/pubsub.py ファイルに戻ります。

  2. Cloud Pub/Sub サブスクライバー クライアントを宣言します。

/quiz/gcp/pubsub.py

# TODO: Pub/Sub サブスクライバー クライアントを作成する sub_client = pubsub_v1.SubscriberClient() # END TODO
  1. 'worker-subscription' を参照する完全修飾パスを取得します。

# TODO: worker-subscription という名前の # サブスクリプション オブジェクトを作成する sub_path = sub_client.subscription_path(project_id, 'worker-subscription') # END TODO
  1. pull_feedback(callback) 関数に移動して、pass プレースホルダ ステートメントを削除します。

  2. サブスクライバー クライアントを使用して worker-subscription にサブスクライブし、メッセージを受信したらコールバックを呼び出します。

/quiz/gcp/pubsub.py、pull_feedback(callback) 関数

# TODO: worker-subscription にサブスクライブし、 # コールバックを呼び出す sub_client.subscribe(sub_path, callback=callback) # END TODO
  1. ファイルを保存します。

Pub/Sub のサブスクライブ機能を使用するためのコードを記述する

  1. ...quiz/console/worker.py ファイルで、quiz.gcp パッケージから pubsub モジュールを読み込みます。

console/worker.py

# TODO: quiz.gcp パッケージから pubsub、 # languageapi、spanner の各モジュールを読み込む from quiz.gcp import pubsub # END TODO
  1. pubsub_callback(message) 関数で、メッセージの確認応答を行います。

console/worker.py、pubsub_callback(message) 関数

# TODO: メッセージに確認応答する message.ack() # END TODO
  1. メッセージをコンソールに表示します。

# TODO: メッセージをコンソールに表示する log.info('Message received') log.info(message) # END TODO
  1. main() 関数で、このハンドラ関数を Pub/Sub サブスクリプション コールバックとして登録します。

console/worker.py、main() 関数

# TODO: コールバックを登録する pubsub.pull_feedback(pubsub_callback) # END TODO
  1. ファイルを保存します。

ウェブ アプリケーションとワーカー アプリケーションを実行して Pub/Sub メッセージを作成する

  1. 1 つ目の Cloud Shell ウィンドウで、ウェブ アプリケーションがまだ実行されていない場合は開始します。

    python run_server.py
  2. 2 つ目の Cloud Shell ウィンドウで、ワーカー アプリケーションを開始します。

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

  4. [Take Test] をクリックします。

  5. [Places] をクリックします。

  6. 質問に答えて評価を選択し、フィードバック テキストを入力してから [Send Feedback] をクリックします。

  7. 2 つ目の Cloud Shell ウィンドウに戻ります。

    ワーカー アプリケーションがそのハンドラを介してフィードバック メッセージを受信し、その詳細をウィンドウに表示したことがわかります。メッセージそのものは切り捨てられています。

    INFO:root:Worker starting... INFO:root:Message received INFO:root:Message { data: b'{\n "email": "app.dev.student@example.org",\n "fee...' ordering_key: '' attributes: {} }
  8. ウェブ アプリケーションとコンソール アプリケーションを停止します。

Cloud Natural Language API を使用する

このセクションでは、ユーザーが送信したフィードバック テキストの感情分析を行うためのコードを記述します。

Cloud Natural Language API を呼び出すコードを記述する

  1. エディタで ...quiz/gcp/languageapi.py ファイルの先頭に移動します。

  2. google.cloud パッケージから language モジュールを読み込みます。

quiz/gcp/languageapi.py

# TODO: language モジュールをインポートする from google.cloud import language_v1 # END TODO
  1. Cloud Natural Language クライアント オブジェクトを作成します。

# TODO: Language API クライアントを作成する lang_client = language_v1.LanguageServiceClient() # END TODO
  1. analyze(text) 関数に移動して、Natural Language クライアントに渡す Document オブジェクトを作成します。この際、フィードバック テキストを content パラメータに割り当てます。

quiz/gcp/languageapi.py、analyze(text) 関数

# TODO: Document オブジェクトを作成する doc = language_v1.types.Document(content=text, type_='PLAIN_TEXT') # END TODO
  1. Natural Language クライアント オブジェクトを使用して、ドキュメントの感情を分析します。

# TODO: 感情を分析する sentiment = lang_client.analyze_sentiment( document=doc).document_sentiment # END TODO
  1. Natural Language API から感情スコアを返します。

# TODO: 感情スコアを返す return sentiment.score # END TODO
  1. ファイルを保存します。

Natural Language API の機能を使用するためのコードを記述する

  1. .../quiz/console/worker.py ファイルで、languageapi をインポート ステートメントに追加します。

console/worker.py

# TODO: quiz.gcp パッケージから pubsub、 # languageapi、spanner の各モジュールを読み込む from quiz.gcp import pubsub, languageapi # END TODO
  1. pubsub_callback(message) 関数で、既存のコードの後に、フィードバックに対して感情検出を行います。

console/worker.py、pubsub_callback(message) 関数

# TODO: languageapi モジュールを使用して # 感情を分析する score = languageapi.analyze(str(data['feedback'])) # END TODO
  1. スコアをコンソールに表示します。

# TODO: 感情スコアをコンソールに表示する log.info('Score: {}'.format(score)) # END TODO
  1. feedback オブジェクトに新しいスコア プロパティを割り当てます。

# TODO: 感情スコアを新しいスコア プロパティに # 割り当てる data['score'] = score # END TODO
  1. ファイルを保存します。

ウェブ アプリケーションとワーカー アプリケーションを実行して Natural Language API をテストする

  1. 1 つ目の Cloud Shell ウィンドウに戻ります。
  2. ウェブ アプリケーションを実行します。
  3. 2 つ目の Cloud Shell ウィンドウに切り替えます。
  4. ワーカー アプリケーションを再び開始します。
  5. ウェブ アプリケーションをプレビューします。
  6. [Take Test] をクリックします。
  7. [Places] をクリックします。
  8. 質問に答えて評価を選択し、フィードバック テキストを入力してから [Send Feedback] をクリックします。
  9. 2 つ目の Cloud Shell ウィンドウに戻ります。

ワーカー アプリケーションが Cloud Natural Language API を呼び出して、感情スコアをコンソールに表示したことがわかります。

sentiment-score.png

  1. ウェブ アプリケーションとコンソール アプリケーションを停止します。

Cloud Spanner にデータを保存する

このセクションでは、Cloud Spanner のインスタンス、データベース、テーブルを作成します。その後、フィードバック データをデータベースに保存するためのコードを記述します。

Cloud Spanner インスタンスを作成する

  1. Cloud Console に戻り、ナビゲーション メニュー > [Spanner] > [インスタンスを作成] をクリックします。

  2. [インスタンス名] に「quiz-instance」と入力します。

  3. [構成を選択] セクションで、リージョンとして [us-central1] を選択します。

  4. [作成] をクリックします。

Cloud Spanner のデータベースとテーブルを作成する

  1. quiz-instance の [インスタンスの詳細] ページで、[データベースを作成] をクリックします。

  2. [データベース名] に、「quiz-database」と入力します。

  3. [スキーマの定義] の [DDL ステートメント] に、次の SQL ステートメントを入力します。

CREATE TABLE Feedback ( feedbackId STRING(100) NOT NULL, email STRING(100), quiz STRING(20), feedback STRING(MAX), rating INT64, score FLOAT64, timestamp INT64 ) PRIMARY KEY (feedbackId);
  1. [作成] をクリックします。

database.png

Cloud Spanner にデータを保存するためのコードを記述する

  1. コードエディタに戻り、.../quiz/gcp/spanner.py ファイルの先頭に移動します。

  2. google.cloud パッケージから spanner モジュールを読み込みます。

quiz/gcp/spanner.py

# TODO: spanner モジュールをインポートする from google.cloud import spanner # END TODO
  1. Cloud Spanner クライアントを作成します。

# TODO: Spanner クライアントを作成する spanner_client = spanner.Client() # END TODO
  1. Spanner インスタンスへの参照を取得します。

# TODO: Cloud Spanner quiz-instance への参照を取得する instance = spanner_client.instance('quiz-instance') # END TODO
  1. Spanner データベースへの参照を取得します。

# TODO: Cloud Spanner quiz-database への参照を取得する database = instance.database('quiz-database') # END TODO
  1. saveFeedback(data) 関数に移動します。

  2. with ブロックを使用して database.batch オブジェクトを作成します。このオブジェクトを使用すると、Spanner データベースに対して複数のオペレーションを実行できます。

quiz/gcp/spanner.py、save_feedback(data) 関数

# TODO: データベース オペレーション用の batch オブジェクトを作成する with database.batch() as batch: # END TODO
  1. data のプロパティである email、quiz、timestamp からフィードバック レコードのキーを作成します。reverse_email(...) 関数では、入力されたメールアドレスを反転させた文字列を作成し、これを主キーとして使用します。たとえば、app.dev.student@example.comcom_example_student_dev_app に変換します。

# TODO: email、quiz、timestamp から # レコードのキーを作成する feedback_id = '{}_{}_{}'.format( reverse_email(data['email']), data['quiz'], data['timestamp']) # END TODO
  1. batch オブジェクトを使用してレコードを挿入します。一連の列と値を使用します。

# TODO: batch を使用してレコードを # feedback テーブルに挿入する # これには列と値が必要 batch.insert( table='feedback', columns=( 'feedbackId', 'email', 'quiz', 'timestamp', 'rating', 'score', 'feedback' ), values=[ ( feedback_id, data['email'], data['quiz'], data['timestamp'], data['rating'], data['score'], data['feedback'] ) ] ) # END TODO
  1. ファイルを保存します。

Cloud Spanner の機能を使用するためのコードを記述する

  1. .../quiz/console/worker.py ファイルで、spanner モジュールを読み込みます。

quiz/console/worker.py

# TODO: quiz.gcp パッケージから pubsub、 # languageapi、spanner の各モジュールを読み込む from quiz.gcp import pubsub, languageapi, spanner # END TODO
  1. pubsub_callback(message) 関数の既存のコードの後で、フィードバックを Spanner に保存します。

quiz/console/worker.py、pubsub_callback(message) 関数

# TODO: spanner モジュールを使用してフィードバックを保存する spanner.save_feedback(data) # END TODO
  1. フィードバックが保存されたことを伝えるメッセージをコンソールに表示します。

# TODO: フィードバックが保存されたことを伝える # メッセージをコンソールに表示する log.info('Feedback saved') # END TODO
  1. ファイルを保存します。

ウェブ アプリケーションとワーカー アプリケーションを実行して Cloud Spanner をテストする

  1. すべてのファイルを保存してから、1 つ目の Cloud Shell ウィンドウでウェブ アプリケーションを再び開始します。
  2. 2 つ目の Cloud Shell ウィンドウで、ワーカー アプリケーションを再び開始します。
  3. ウェブ アプリケーションをプレビューします。
  4. [Take Test] > [Places] をクリックします。
  5. 質問に答えて評価を選択し、フィードバック テキストを入力してから [Send Feedback] をクリックします。
  6. 2 つ目の Cloud Shell ウィンドウに戻ります。

ワーカー アプリケーションが Cloud Spanner API を呼び出して、コンソール ウィンドウにメッセージを表示したことがわかります。

feedback-saved.png

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

  2. [quiz-instance] > [quiz-database] > [クエリ] を選択します。

  3. クエリを実行するには、クエリ欄に「SELECT * FROM Feedback」と入力し、[クエリを実行] をクリックします。

SELECT * FROM Feedback

Cloud Spanner データベースの新しいフィードバック レコードが表示されます。このレコードには、Cloud Pub/Sub からのメッセージ データと、Cloud Natural Language API からのスコアが含まれています。

database-query.png

ラボを終了する

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

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

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

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

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

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

Copyright 2026 Google LLC All rights reserved. Google および Google のロゴは、Google LLC の商標です。その他すべての社名および製品名は、それぞれ該当する企業の商標である可能性があります。

始める前に

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

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

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

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

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

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

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

ありがとうございます。

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

1 回に 1 つのラボ

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

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

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