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