Google Chat アプリのデベロッパーは、変更をテストしたり、複雑な問題のトラブルシューティングを行うために、コードのデバッグが必要になることがあります。Chat アプリのデバッグは、アプリのアーキテクチャ、アプリの機能、アプリのデプロイ方法、設定に応じて、さまざまな方法で実行できます。
このページでは、ローカル開発環境のテストに使用できる統合上り(内向き)プラットフォームである ngrok を使用して、HTTP Chat アプリをデバッグする方法について説明します。このガイドでは、ローカル環境でコードの変更をテストし、リモート環境で問題のトラブルシューティングを行います。
ローカル開発環境からデバッグする
このセクションでは、ローカル環境で実行される Chat アプリを操作します。
図 1. ローカル開発環境でデバッグする。
ワークショップ
Node.js
Python
Java
前提条件
Node.js
node
とnpm
の最新バージョンがローカル環境にインストールされている。最新バージョンの
nodemon
がローカル環境にインストールされており、自動再読み込みのために使用されます。npm install -g nodemon
メッセージング用に構成された HTTP チャットアプリ。クイックスタート ガイドの前提条件、環境を設定する、アプリを Google Chat に公開するをご覧ください。唯一の違いは、[App name] を
Debug App
に設定し、[App URL] をhttp://example.com
などに設定する必要があることです。デバッグ可能なローカル環境でセットアップされた IDE。説明のため、このガイドでは
Visual Studio Code
IDE とデフォルトのデバッグ機能を使用しています。Git
がローカル環境にインストールされている。ngrok
アカウント。
Python
- 最新バージョンの
python3
がローカル環境にインストールされている。 - ローカル環境に最新バージョンの
pip
とvirtualenv
がインストールされており、それぞれ Python パッケージと仮想環境の管理に使用されます。 - メッセージング用に構成された HTTP チャットアプリ。クイックスタート ガイドの前提条件、環境を設定する、アプリを Google Chat に公開するをご覧ください。唯一の違いは、[App name] を
Debug App
に設定し、[App URL] をhttp://example.com
などに設定する必要があることです。 - デバッグ可能なローカル環境でセットアップされた IDE。説明のため、このガイドでは
Visual Studio Code
IDE とデフォルトのデバッグ機能を使用しています。 Git
がローカル環境にインストールされている。ngrok
アカウント。- ローカル環境に最新バージョンの
gcloud
がインストールされ、初期化されている。
Java
- ローカル環境にインストールされている
Java SE 11's JDK
の最新の安定版。 - 最新バージョンの
Apache Maven
がローカル環境にインストールされており、Java プロジェクトの管理に使用されます。 - メッセージング用に構成された HTTP チャットアプリ。クイックスタート ガイドの前提条件、環境を設定する、アプリを Google Chat に公開するをご覧ください。唯一の違いは、[App name] を
Debug App
に設定し、[App URL] をhttp://example.com
などに設定する必要があることです。 - デバッグ可能なローカル環境でセットアップされた IDE。説明のため、このガイドでは
Visual Studio Code
IDE とデフォルトのデバッグ機能を使用しています。 Git
がローカル環境にインストールされている。ngrok
アカウント。- ローカル環境に最新バージョンの
gcloud
がインストールされ、初期化されている。
localhost サービスを一般公開する
Chat アプリがローカル環境にアクセスできるように、ローカル環境をインターネットに接続する必要があります。ngrok
アプリケーションは、公開 URL に対する HTTP リクエストをローカル環境にリダイレクトするために使用されます。
- ローカル環境のブラウザで、
ngrok
アカウントにログインします。 - アプリケーションをインストールして、ローカル環境に
authtoken
を設定します。 ngrok
アカウントで静的ドメインを作成します。このガイドの手順ではNGROK_STATIC_DOMAIN
と呼びます。
Chat アプリを構成する
すべての HTTP リクエストを静的ドメインに送信するように Chat アプリを構成します。
Google Cloud コンソールで、Google Chat API のページを開きます。
[構成] タブをクリックします。
[インタラクティブ機能] > [接続設定] に移動し、[アプリの URL] テキスト フィールドの値を次のように設定します。
https://NGROK_STATIC_DOMAIN
NGROK_STATIC_DOMAIN
は、ngrok
アカウントの静的ドメインに置き換えます。[保存] をクリックします。
図 2. Chat アプリは、すべての HTTP リクエストを静的ドメインに送信します。ngrok
公開サービスは、Chat アプリとローカルで実行されるアプリケーション コードとの間のブリッジとして機能します。
Chat アプリをテストする
Chat アプリはローカルでデプロイ、構成、テスト、デバッグ、自動再読み込みできます。
Node.js
GitHub からローカル環境に
googleworkspace/google-chat-samples
リポジトリのクローンを作成します。ここには、実行するアプリケーションのコードが含まれています。git clone https://github.com/googleworkspace/google-chat-samples.git
ローカル環境にインストールされている
Visual Studio Code
IDE から、次の操作を行います。- 新しいウィンドウで、
google-chat-samples/node/basic-app
フォルダを開きます。 package.json
ファイルに 2 つのスクリプトを追加して、自動再読み込みのデバッグ用にアプリを構成します。{ ... "scripts": { ... "debug": "node --inspect index.js", "debug-watch": "nodemon --watch ./ --exec npm run debug" } ... }
ルート ディレクトリからアプリケーションをインストールします。
npm install
ルート ディレクトリに
.vscode/launch.json
ファイルを作成して、スクリプトdebug-watch
をトリガーするDebug Watch
という名前の起動を作成して構成します。{ "version": "0.2.0", "configurations": [{ "type": "node", "request": "launch", "name": "Debug Watch", "cwd": "${workspaceRoot}", "runtimeExecutable": "npm", "runtimeArgs": ["run-script", "debug-watch"] }] }
index.js
ファイルに HTTP リクエストの処理を一時停止するブレークポイントを追加し、以前に追加したDebug Watch
構成で実行とデバッグを開始します。これでアプリケーションが実行され、ポート9000
で HTTP リクエストをリッスンします。図 3. アプリケーションは実行されており、ポート
9000
で HTTP リクエストをリッスンしています。
- 新しいウィンドウで、
ローカル環境で
ngrok
アプリケーションを起動します。ngrok http --domain=NGROK_STATIC_DOMAIN 9000
NGROK_STATIC_DOMAIN
は、ngrok
アカウントの静的ドメインに置き換えます。これで、すべてのリクエストがローカル環境とアプリケーションで使用されるポートにリダイレクトされます。図 4.
ngrok
サーバーが実行され、リダイレクトされているターミナル。ウェブ インターフェースも
ngrok
アプリケーションによって localhost で起動され、ブラウザで開いてすべてのアクティビティをモニタリングできます。図 5.
ngrok
アプリケーションがホストするウェブ インターフェース。HTTP リクエストは表示されません。ダイレクト メッセージを送信して Chat アプリをテストします。
Google Chat を開きます。
[New chat]
をクリックします。ダイアログで、Chat アプリの名前を入力します。
検索結果で Chat アプリを見つけて、[追加] > [Chat] をクリックします。
ダイレクト メッセージ スペースに「
Hello
」と入力して、enter
キーを押します。デバッグ中であるため、チャットアプリは応答しません。
ローカル環境の
Visual Studio Code
では、設定されたブレークポイントで実行が一時停止していることを確認できます。図 6. 設定されたブレークポイントで実行が一時停止します。
Google Chat が
Your message : Hello
に対する応答を Google Chat がタイムアウトする前に、Visual Studio Code
のデバッガから実行を再開すると、HTTP リクエストとレスポンスのログは、ローカル環境の
ngrok
アプリケーションによってホストされているウェブ インターフェースから確認できます。図 7.
ngrok
アプリケーションがホストするウェブ インターフェースからの HTTP リクエスト。アプリの動作を変更するには、
Your message
を、index.json
のHere was your message
インライン35
に置き換えます。ファイルを保存すると、nodemon
は更新されたソースコードでアプリケーションを自動的に再読み込みしますが、Visual Studio Code
はデバッグモードのままです。図 8. コードの変更が読み込まれ、ポート
9000
でアプリケーションが実行され、HTTP リクエストをリッスンします。今回は、スペースで 2 番目のメッセージ
Hello
を送信する代わりに、ローカル環境のngrok
アプリケーションによってホストされているウェブ インターフェースで最後にログに記録された HTTP リクエストを選択し、Replay
をクリックします。前回と同様、Chat アプリはデバッグ中のため応答しません。Visual Studio Code
のデバッガから実行を再開すると、ローカル環境のngrok
アプリケーションによってホストされているウェブ インターフェースから、アプリケーションが最新バージョンのメッセージHere was your message : Hello
を含むレスポンスを生成していることがわかります。
Python
アプリケーションのデフォルト認証情報に使用する新しいユーザー認証情報を取得します。
gcloud config set project PROJECT_ID gcloud auth application-default login
PROJECT_ID
は、アプリの Cloud プロジェクトのプロジェクト ID に置き換えます。GitHub からローカル環境に
googleworkspace/google-chat-samples
リポジトリのクローンを作成します。このリポジトリにはアプリケーション コードが含まれています。git clone https://github.com/googleworkspace/google-chat-samples.git
ローカル環境にインストールされている
Visual Studio Code
IDE から、次の操作を行います。- 新しいウィンドウで、
google-chat-samples/python/avatar-app
フォルダを開きます。 Python
env
用の新しい仮想環境を作成し、有効にします。virtualenv env
source env/bin/activate
仮想環境で
pip
を使用して、すべてのプロジェクトの依存関係をインストールします。pip install -r requirements.txt
ルート ディレクトリに
.vscode/launch.json
ファイルを作成し、Debug Watch
という名前の起動を構成します。これにより、仮想環境env
のデバッグモードのポート9000
で、モジュールfunctions-framework
からアプリがトリガーされます。{ "version": "0.2.0", "configurations": [{ "type": "python", "request": "launch", "name": "Debug Watch", "python": "${workspaceFolder}/env/bin/python3", "module": "functions_framework", "args": [ "--target", "hello_chat", "--port", "9000", "--debug" ] }] }
main.py
ファイルに HTTP リクエストの処理を一時停止するブレークポイントを追加し、以前に追加したDebug Watch
構成で実行とデバッグを開始します。これでアプリケーションが実行され、ポート9000
で HTTP リクエストをリッスンします。図 3. アプリケーションは実行されており、ポート
9000
で HTTP リクエストをリッスンしています。
- 新しいウィンドウで、
ローカル環境で
ngrok
アプリケーションを起動します。ngrok http --domain=NGROK_STATIC_DOMAIN 9000
NGROK_STATIC_DOMAIN
は、ngrok
アカウントの静的ドメインに置き換えます。これで、すべてのリクエストがローカル環境とアプリケーションで使用されるポートにリダイレクトされます。図 4.
ngrok
サーバーが実行され、リダイレクトされているターミナル。ウェブ インターフェースも
ngrok
アプリケーションによって localhost で起動され、ブラウザで開いてすべてのアクティビティをモニタリングできます。図 5.
ngrok
アプリケーションがホストするウェブ インターフェース。HTTP リクエストは表示されません。ダイレクト メッセージを送信して Chat アプリをテストします。
Google Chat を開きます。
[New chat]
をクリックします。ダイアログで、Chat アプリの名前を入力します。
検索結果で Chat アプリを見つけて、[追加] > [Chat] をクリックします。
ダイレクト メッセージ スペースに「
Hey!
」と入力して、enter
キーを押します。デバッグ中であるため、チャットアプリは応答しません。
ローカル環境の
Visual Studio Code
では、設定されたブレークポイントで実行が一時停止していることを確認できます。図 6. 設定されたブレークポイントで実行が一時停止します。
Google Chat がタイムアウトする前に
Visual Studio Code
のデバッガから実行を再開すると、Chat アプリは、メッセージに名前とアバターの画像を返します。HTTP リクエストとレスポンスのログは、ローカル環境の
ngrok
アプリケーションによってホストされているウェブ インターフェースから確認できます。図 7.
ngrok
アプリケーションがホストするウェブ インターフェースからの HTTP リクエスト。アプリケーションの動作を変更するには、
Hello
を、main.py
ファイルのHey
インライン51
に置き換えます。ファイルを保存すると、Visual Studio Code
はアプリケーションを自動的に更新済みのソースコードで再読み込みし、デバッグモードのままです。図 8. コードの変更が読み込まれ、ポート
9000
でアプリケーションが実行され、HTTP リクエストをリッスンします。今回は、スペースで 2 番目のメッセージ
Hey!
を送信する代わりに、ローカル環境のngrok
アプリケーションによってホストされているウェブ インターフェースで最後にログに記録された HTTP リクエストを選択し、Replay
をクリックします。前回と同様、Chat アプリはデバッグ中のため応答しません。Visual Studio Code
のデバッガから実行を再開すると、ローカル環境のngrok
アプリケーションによってホストされているウェブ インターフェースから、アプリケーションが最新バージョンのメッセージでレスポンスを生成したことがわかります。
Java
アプリケーションのデフォルト認証情報に使用する新しいユーザー認証情報を取得します。
gcloud config set project PROJECT_ID gcloud auth application-default login
PROJECT_ID
は、アプリの Cloud プロジェクトのプロジェクト ID に置き換えます。ローカル環境で GitHub から
googleworkspace/google-chat-samples
リポジトリのクローンを作成します。このリポジトリにはアプリケーション コードが含まれています。git clone https://github.com/googleworkspace/google-chat-samples.git
ローカル環境にインストールされている
Visual Studio Code
IDE から、次の操作を行います。- 新しいウィンドウで、
google-chat-samples/java/avatar-app
フォルダを開きます。 pom.xml
ファイルに Cloud Functions Framework ビルド プラグインfunction-maven-plugin
を追加して、ポート9000
でアプリケーションHelloChat
をローカルで実行するように Maven プロジェクトを構成します。... <plugin> <groupId>com.google.cloud.functions</groupId> <artifactId>function-maven-plugin</artifactId> <version>0.11.0</version> <configuration> <functionTarget>HelloChat</functionTarget> <port>9000</port> </configuration> </plugin> ...
これで、ローカルでデバッグモードで起動できるようになりました。
mvnDebug function:run Preparing to execute Maven in debug mode Listening for transport dt_socket at address: 8000
ルート ディレクトリにファイル
.vscode/launch.json
を作成し、ポート8000
で以前に起動したアプリケーションに接続するRemote Debug Watch
という名前の起動を構成します。{ "version": "0.2.0", "configurations": [{ "type": "java", "request": "attach", "name": "Remote Debug Watch", "projectName": "http-function", "hostName": "localhost", "port": 8000 }] }
HelloChat.java
ファイルに HTTP リクエストの処理を一時停止するブレークポイントを追加し、以前に追加したRemote Debug Watch
構成でアタッチとデバッグを開始します。これでアプリケーションが実行され、ポート9000
で HTTP リクエストをリッスンします。図 3. アプリケーションはポート
9000
で実行され、HTTP リクエストをリッスンしています。
- 新しいウィンドウで、
ローカル環境で
ngrok
アプリケーションを起動します。ngrok http --domain=NGROK_STATIC_DOMAIN 9000
NGROK_STATIC_DOMAIN
は、ngrok
アカウントの静的ドメインに置き換えます。これで、すべてのリクエストがローカル環境とアプリケーションで使用されるポートにリダイレクトされます。図 4.
ngrok
サーバーが実行され、リダイレクトされているターミナル。ウェブ インターフェースも
ngrok
アプリケーションによって localhost で起動され、ブラウザで開いてすべてのアクティビティをモニタリングできます。図 5.
ngrok
アプリケーションがホストするウェブ インターフェース。HTTP リクエストは表示されません。ダイレクト メッセージを送信して Chat アプリをテストします。
Google Chat を開きます。
[New chat]
をクリックします。ダイアログで、Chat アプリの名前を入力します。
検索結果で Chat アプリを見つけて、[追加] > [Chat] をクリックします。
ダイレクト メッセージ スペースに「
Hey!
」と入力して、enter
キーを押します。デバッグ中であるため、チャットアプリは応答しません。
ローカル環境の
Visual Studio Code
では、設定されたブレークポイントで実行が一時停止していることを確認できます。図 6. 設定されたブレークポイントで実行が一時停止します。
Google Chat がタイムアウトする前に
Visual Studio Code
のデバッガから実行を再開すると、Chat アプリは、メッセージに名前とアバターの画像を返します。HTTP リクエストとレスポンスのログは、ローカル環境の
ngrok
アプリケーションによってホストされているウェブ インターフェースから確認できます。図 7.
ngrok
アプリケーションがホストするウェブ インターフェースからの HTTP リクエスト。アプリの動作を変更するには、
Hello
をHelloChat.java
ファイルのHey
インライン55
に置き換え、mvnDebug
プロセスを再起動し、Remote Debug Watch
を再起動してデバッグを再接続して再起動します。今回は、スペースで 2 番目のメッセージ
Hey!
を送信する代わりに、ローカル環境のngrok
アプリケーションによってホストされているウェブ インターフェースで最後にログに記録された HTTP リクエストを選択し、Replay
をクリックします。前回と同様、Chat アプリはデバッグ中のため応答しません。Visual Studio Code
のデバッガから実行を再開すると、ローカル環境のngrok
アプリケーションによってホストされているウェブ インターフェースから、アプリケーションが最新バージョンのメッセージでレスポンスを生成したことがわかります。
リモート環境からデバッグする
このセクションでは、リモート環境で実行される Chat アプリを操作します。
図 9. リモート環境からデバッグする。
前提条件
- Chat アプリを含むダイレクト メッセージ スペース。クイックスタート ガイドの Chat アプリをテストするの手順に沿って、Chat アプリを検索して開始します。
- 特定のポートでデバッガを有効にして、リモート環境で実行されるアプリケーションを、このガイドの手順では
REMOTE_DEBUG_PORT
と表記します。 - ローカル環境からリモート環境に
ssh
できます。 - デバッグ可能なローカル環境でセットアップされた IDE。このガイドでは、説明のために
Visual Studio Code
IDE とそのデフォルトのデバッグ機能を使用しています。
ローカル環境とリモート環境を接続する
デバッグ クライアント接続を開始するローカル環境で、SSH トンネルを設定します。
ssh -L LOCAL_DEBUG_PORT:localhost:REMOTE_DEBUG_PORT REMOTE_USERNAME@REMOTE_ADDRESS
次のように置き換えます。
LOCAL_DEBUG_PORT
: ローカル環境のデバッグポート。REMOTE_USERNAME
: リモート環境のユーザー名。REMOTE_ADDRESS
: リモート環境のアドレス。REMOTE_DEBUG_PORT
: リモート環境のデバッグポート。
これで、ローカル環境のデバッグポートがリモート環境のデバッグポートにリンクされました。
デバッグを開始する
ローカル環境にインストールされている Visual Studio Code
IDE から、次の操作を行います。
- 新しいウィンドウで、アプリのソースコードを開きます。
ルート ディレクトリに
.vscode/launch.json
ファイルを作成し、ローカル環境のデバッグポートに接続するDebug Remote
という名前の起動を構成します。Node.js
{ "version": "0.2.0", "configurations": [{ "type": "node", "request": "attach", "name": "Debug Remote", "address": "127.0.0.1", "port": LOCAL_DEBUG_PORT }] }
Python
{ "version": "0.2.0", "configurations": [{ "type": "python", "request": "attach", "name": "Debug Remote", "connect": { "host": "127.0.0.1", "port": LOCAL_DEBUG_PORT } }] }
Java
{ "version": "0.2.0", "configurations": [{ "type": "java", "request": "attach", "name": "Debug Remote", "hostName": "127.0.0.1", "port": LOCAL_DEBUG_PORT }] }
LOCAL_DEBUG_PORT
は、ローカル環境のデバッグポートに置き換えます。アプリのソースコードに、HTTP リクエストの処理を一時停止するブレークポイントを追加し、以前に追加した
Debug Remote
構成で実行とデバッグを開始します。
Chat アプリのダイレクト メッセージ スペースで、テストする内容を入力して enter
キーを押します。Visual Studio Code
IDE でデバッグが行われているため、Chat アプリは応答しません。
関連トピック
- エラーログをenable方法とクエリする方法を学習する。
- 「アプリが応答しない」、「Google Chat API は Google Workspace ユーザーのみが使用できます」、「ユーザーはスペースから除外できます」などの Google Chat アプリのエラーを解決する方法を確認してください。
- カード メッセージ、ダイアログ、リンク プレビューなど、レンダリングされない、または想定どおりに機能しないなど、カードエラーを修正する方法をご確認ください。