HTTP Google Workspace アドオンをテストしてデバッグする

Google Workspace アドオン デベロッパーは、変更をテストしたり、複雑な問題をトラブルシューティングしたりするために、コードをデバッグする必要がある場合があります。Google Workspace アドオンのデバッグ方法は、アプリのアーキテクチャ、アプリの機能、アプリのデプロイ方法、デベロッパーの好みに応じてさまざまな方法があります。

このページでは、ローカル開発環境のテストに使用できる統合イングレステーション プラットフォームである ngrok を使用して、HTTP Google Workspace アドオンをデバッグする方法について説明します。このガイドでは、ローカル環境でコードの変更をテストし、リモート環境で問題をトラブルシューティングします。

ローカル開発環境からデバッグする

このセクションでは、ローカル環境で実行される Google Workspace アドオンを操作します。

ローカル開発環境でデバッグします。
図 1.ローカル開発環境でデバッグする。

前提条件

Node.js

Python

Java

localhost サービスを一般公開する

Google Workspace アドオンがアクセスできるように、ローカル環境をインターネットに接続する必要があります。ngrok アプリケーションは、パブリック URL への HTTP リクエストをローカル環境にリダイレクトするために使用されます。

  1. ローカル環境のブラウザで、ngrok アカウントにログインします。
  2. アプリケーションをインストールし、ローカル環境に authtoken を設定します。
  3. 静的ドメインngrokアカウントに作成します。このガイドの手順ではNGROK_STATIC_DOMAIN として参照されます。

アドオン デプロイを作成してインストールする

  1. すべての HTTP リクエストを静的ドメインに送信するように Google Workspace アドオンを構成します。デプロイ ファイルは次のようになります。

    {
      "oauthScopes": [
        "https://www.googleapis.com/auth/workspace.linkpreview",
        "https://www.googleapis.com/auth/workspace.linkcreate"
      ],
      "addOns": {
        "common": {
          "name": "Manage support cases",
          "logoUrl": "https://developers.google.com/workspace/add-ons/images/support-icon.png",
          "layoutProperties": {
            "primaryColor": "#dd4b39"
          }
        },
        "docs": {
          "linkPreviewTriggers": [
            {
              "runFunction": "NGROK_STATIC_DOMAIN",
              "patterns": [
                {
                  "hostPattern": "example.com",
                  "pathPrefix": "support/cases"
                },
                {
                  "hostPattern": "*.example.com",
                  "pathPrefix": "cases"
                },
                {
                  "hostPattern": "cases.example.com"
                }
              ],
              "labelText": "Support case",
              "localizedLabelText": {
                "es": "Caso de soporte"
              },
              "logoUrl": "https://developers.google.com/workspace/add-ons/images/support-icon.png"
            }
          ],
          "createActionTriggers": [
            {
              "id": "createCase",
              "labelText": "Create support case",
              "localizedLabelText": {
                "es": "Crear caso de soporte"
              },
              "runFunction": "$URL2",
              "logoUrl": "https://developers.google.com/workspace/add-ons/images/support-icon.png"
            }
          ]
        },
        "httpOptions": {
          "granularOauthPermissionSupport": "OPT_IN"
        }
      }
    }
    

    NGROK_STATIC_DOMAIN は、ngrok アカウントの静的ドメインに置き換えます。

  2. 使用する Google Cloud プロジェクトを設定します。

    gcloud config set project PROJECT_ID
  3. アプリケーションのデフォルト認証情報として使用する新しいユーザー認証情報を取得します。

    gcloud auth application-default login

    PROJECT_ID は、アプリの Google Cloud プロジェクトのプロジェクト ID に置き換えます。

  4. デプロイを作成します。

    gcloud workspace-add-ons deployments create manageSupportCases \
        --deployment-file=DEPLOYMENT_FILE_PATH

    DEPLOYMENT_FILE_PATH は、デプロイ ファイルのパスに置き換えます。

  5. デプロイをインストールします。

    gcloud workspace-add-ons deployments install manageSupportCases
    Google Workspace アドオンは、すべての HTTP リクエストを静的ドメインに送信します。
    図 2.Google Workspace アドオンは、すべての HTTP リクエストを静的ドメインに送信します。`ngrok` 公開サービスは、 Google Workspace アドオンとローカルで実行されるアプリケーション コードのブリッジとして機能します。

Google Workspace アドオンをテストする

Google Workspace アドオンをローカルでデプロイ、テスト、デバッグ、自動再読み込みできます。

Node.js

  1. ローカル環境にインストールされている Visual Studio Code IDE で、次の操作を行います。

    1. 新しいウィンドウで、add-ons-samples/node/3p-resources フォルダを開きます。
    2. package.json ファイルに 1 つの依存関係と 2 つのスクリプトを追加して、ローカル実行と自動再読み込みデバッグ用にアプリケーションを構成します。

      {
          ...
          "dependencies": {
            ...
            "@google-cloud/functions-framework": "^3.3.0"
          },
          "scripts": {
              ...
              "start": "npx functions-framework --target=createLinkPreview --port=9000",
              "debug-watch": "nodemon --watch ./ --exec npm start"
          }
          ...
      }
      
    3. ルート ディレクトリから、アプリケーションをインストールします。

      npm install
    4. ルート ディレクトリに .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"]
          }]
      }
      
    5. index.js ファイルで HTTP リクエスト処理を一時停止するブレークポイントを追加し、先ほど追加した Debug Watch 構成で 実行とデバッグを開始します。これで、アプリケーションが実行され、ポート 9000 で HTTP リクエストをリッスンします。

      アプリケーションが実行され、ポート 9000 で HTTP リクエストをリッスンしています。
      図 3.アプリケーションが実行され、ポート 9000 で HTTP リクエストをリッスンしています。
  2. ローカル環境で ngrok アプリケーションを起動します。

    ngrok http --domain=NGROK_STATIC_DOMAIN 9000

    NGROK_STATIC_DOMAIN は、ngrok アカウントの静的ドメインに置き換えます。これで、すべてのリクエストがローカル環境とアプリケーションで使用されるポートにリダイレクトされます。

    ngrok サーバーが実行され、リダイレクトされているターミナル。
    図 4.ngrok サーバーが実行され、リダイレクトされるターミナル。
  3. ngrok アプリケーションによって、localhost にウェブ インターフェースも起動します。ブラウザで開いて、すべてのアクティビティをモニタリングできます。

    ngrok アプリケーションでホストされているウェブ インターフェースに HTTP リクエストが表示されていない。
    図 5.ngrok アプリケーションでホストされているウェブ インターフェースに HTTP リクエストが表示されない。
  4. テスター アカウントを使用して新しい Google ドキュメントでケース URL をプレビューして、Google Workspace アドオンをテストします。

    • Google ドキュメントを作成します。

      Google ドキュメントを作成する

    • 次のリンクを入力して enter キーを押します。

      https://example.com/support/case/?name=Name1&description=Description1&priority=P1
      
    • リンクをクリックします。

  5. ローカル環境の Visual Studio Code で、設定したブレークポイントで実行が一時停止していることを確認できます。

    実行は、設定されたブレークポイントで一時停止します。
    図 6.設定したブレークポイントで実行が一時停止しています。
  6. Google Workspace アドオンがタイムアウトする前に Visual Studio Code デバッガから実行を再開すると、Google Workspace アドオンは Google ドキュメントにキャッシュからリンク プレビューを表示します。

  7. ローカル環境の ngrok アプリケーションでホストされているウェブ インターフェースから、HTTP リクエストとレスポンスのログを確認できます。

    ngrok アプリケーションによってホストされるウェブ インターフェースからの HTTP リクエスト。
    図 7.ngrok アプリケーションでホストされているウェブ インターフェースからの HTTP リクエスト。
  8. アプリケーションの動作を変更するには、index.js51 行目の CaseCase: に置き換えます。ファイルを保存すると、nodemon は更新されたソースコードでアプリケーションを自動的に再読み込みし、Visual Studio Code はデバッグモードのままになります。

    アプリケーションが実行され、コード変更が読み込まれた状態でポート 9000 で HTTP リクエストをリッスンしています。
    図 8.コード変更が読み込まれた状態で、アプリケーションが実行され、ポート 9000 で HTTP リクエストをリッスンしています。
  9. 今回は、新しい Google ドキュメントでリンクをクリックして数秒待つ代わりに、ローカル環境の ngrok アプリケーションでホストされているウェブ インターフェースに記録された最後の HTTP リクエストを選択して、Replay をクリックします。前回と同様に、Google Workspace アドオン はアクティブに デバッグされているため、応答しません。

  10. Visual Studio Code デバッガから実行を再開すると、ローカル環境の ngrok アプリケーションでホストされているウェブ インターフェースから、アプリケーションが更新されたバージョンのプレビュー カードでレスポンスを生成していることを確認できます。

Python

  1. ローカル環境にインストールされている Visual Studio Code IDE で、次の操作を行います。

    1. 新しいウィンドウで、add-ons-samples/python/3p-resources/create_link_preview フォルダを開きます。
    2. Python env の仮想環境を作成して有効にします。

      virtualenv env
      source env/bin/activate
    3. 仮想環境で pip を使用して、すべてのプロジェクトの依存関係をインストールします。

      pip install -r requirements.txt
    4. ルート ディレクトリに .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", "create_link_preview",
                  "--port", "9000",
                  "--debug"
              ]
          }]
      }
      
    5. main.py ファイルで HTTP リクエスト処理を一時停止するブレークポイントを追加し、先ほど追加した Debug Watch 構成で 実行とデバッグを開始します。これで、アプリケーションが実行され、ポート 9000 で HTTP リクエストをリッスンします。

      アプリケーションが実行され、ポート 9000 で HTTP リクエストをリッスンしています。
      図 3.アプリケーションが実行され、ポート 9000 で HTTP リクエストをリッスンしています。
  2. ローカル環境で ngrok アプリケーションを起動します。

    ngrok http --domain=NGROK_STATIC_DOMAIN 9000

    NGROK_STATIC_DOMAIN は、ngrok アカウントの静的ドメインに置き換えます。これで、すべてのリクエストがローカル環境とアプリケーションで使用されるポートにリダイレクトされます。

    ngrok サーバーが実行され、リダイレクトされているターミナル。
    図 4.ngrok サーバーが実行され、リダイレクトされるターミナル。
  3. ngrok アプリケーションによって、localhost にウェブ インターフェースも起動します。ブラウザで開いて、すべてのアクティビティをモニタリングします。

    ngrok アプリケーションでホストされているウェブ インターフェースに HTTP リクエストが表示されていない。
    図 5.ngrok アプリケーションでホストされているウェブ インターフェースに HTTP リクエストが表示されない。
  4. テスター アカウントを使用して新しい Google ドキュメントでケース URL をプレビューして、Google Workspace アドオンをテストします。

    • Google ドキュメントを作成します。

      Google ドキュメントを作成する

    • 次のリンクを入力して enter キーを押します。

      https://example.com/support/case/?name=Name1&description=Description1&priority=P1
      
    • リンクをクリックします。

  5. ローカル環境の Visual Studio Code で、設定したブレークポイントで実行が一時停止していることを確認できます。

    実行は、設定されたブレークポイントで一時停止します。
    図 6.設定したブレークポイントで実行が一時停止しています。
  6. Google Workspace アドオンがタイムアウトする前に Visual Studio Code デバッガから実行を再開すると、Google Workspace アドオンは Google ドキュメントにキャッシュからリンク プレビューを表示します。

  7. ローカル環境の ngrok アプリケーションでホストされているウェブ インターフェースから、HTTP リクエストとレスポンスのログを確認できます。

    ngrok アプリケーションによってホストされるウェブ インターフェースからの HTTP リクエスト。
    図 7.ngrok アプリケーションでホストされているウェブ インターフェースからの HTTP リクエスト。
  8. アプリケーションの動作を変更するには、main.py ファイルの 56 行目の CaseCase: に置き換えます。ファイルを保存すると、Visual Studio Code は更新されたソースコードでアプリケーションを自動的に再読み込みし、デバッグモードのままになります。

    アプリケーションが実行され、コード変更が読み込まれた状態でポート 9000 で HTTP リクエストをリッスンしています。
    図 8.コード変更が読み込まれた状態で、アプリケーションが実行され、ポート 9000 で HTTP リクエストをリッスンしています。
  9. 今回は、新しい Google ドキュメントでリンクをクリックして数秒待つ代わりに、ローカル環境の ngrok アプリケーションでホストされているウェブ インターフェースに記録された最後の HTTP リクエストを選択して、Replay をクリックします。前回と同様に、Google Workspace アドオン はアクティブに デバッグされているため、応答しません。

  10. Visual Studio Code デバッガから実行を再開すると、ローカル環境の ngrok アプリケーションでホストされているウェブ インターフェースから、アプリケーションが更新されたバージョンのプレビュー カードでレスポンスを生成していることを確認できます。

Java

  1. ローカル環境にインストールされている Visual Studio Code IDE で、次の操作を行います。

    1. 新しいウィンドウで、add-ons-samples/java/3p-resources フォルダを開きます。
    2. Cloud Functions Framework ビルドプラグイン function-maven-pluginpom.xml ファイルに追加して、アプリケーション CreateLinkPreview をポート 9000 でローカルに実行するように Maven プロジェクトを構成します。

      ...
      <plugin>
          <groupId>com.google.cloud.functions</groupId>
          <artifactId>function-maven-plugin</artifactId>
          <version>0.11.0</version>
          <configuration>
              <functionTarget>CreateLinkPreview</functionTarget>
              <port>9000</port>
          </configuration>
      </plugin>
      ...
      
    3. これで、デバッグモードでローカルに起動できます。

      mvnDebug function:run
      Preparing to execute Maven in debug mode
      Listening for transport dt_socket at address: 8000
    4. ルート ディレクトリに .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
          }]
      }
      
    5. CreateLinkPreview.java ファイルで HTTP リクエスト処理を一時停止するブレークポイントを追加し、先ほど追加した Remote Debug Watch 構成でアタッチと デバッグを開始します。これで、アプリケーションが実行され、ポート 9000 で HTTP リクエストをリッスンします。

      アプリケーションが実行され、ポート 9000 で HTTP リクエストをリッスンしています。
      図 3.アプリケーションが実行され、ポート 9000 で HTTP リクエストをリッスンしています。

  2. ローカル環境で ngrok アプリケーションを起動します。

    ngrok http --domain=NGROK_STATIC_DOMAIN 9000

    NGROK_STATIC_DOMAIN は、ngrok アカウントの静的ドメインに置き換えます。これで、すべてのリクエストがローカル環境とアプリケーションで使用されるポートにリダイレクトされます。

    ngrok サーバーが実行され、リダイレクトされているターミナル。
    図 4.ngrok サーバーが実行され、リダイレクトされるターミナル。
  3. ngrok アプリケーションによって、localhost にウェブ インターフェースも起動します。ブラウザで開いて、すべてのアクティビティをモニタリングします。

    ngrok アプリケーションでホストされているウェブ インターフェースに HTTP リクエストが表示されていない。
    図 5.ngrok アプリケーションでホストされているウェブ インターフェースに HTTP リクエストが表示されない。
  4. テスター アカウントを使用して新しい Google ドキュメントでケース URL をプレビューして、Google Workspace アドオンをテストします。

    • Google ドキュメントを作成します。

      Google ドキュメントを作成する

    • 次のリンクを入力して enter キーを押します。

      https://example.com/support/case/?name=Name1&description=Description1&priority=P1
      
    • リンクをクリックします。

  5. ローカル環境の Visual Studio Code で、設定したブレークポイントで実行が一時停止していることを確認できます。

    実行は、設定されたブレークポイントで一時停止します。
    図 6.設定したブレークポイントで実行が一時停止しています。
  6. Google Workspace アドオンがタイムアウトする前に Visual Studio Code デバッガから実行を再開すると、Google Workspace アドオンは Google ドキュメントにキャッシュからリンク プレビューを表示します。

  7. ローカル環境の ngrok アプリケーションでホストされているウェブ インターフェースから、HTTP リクエストとレスポンスのログを確認できます。

    ngrok アプリケーションによってホストされるウェブ インターフェースからの HTTP リクエスト。
    図 7.ngrok アプリケーションでホストされているウェブ インターフェースからの HTTP リクエスト。
  8. アプリケーションの動作を変更するには、CaseCase: に置き換え、CreateLinkPreview.java ファイルの 78 行目の mvnDebug プロセスを再起動し、Remote Debug Watch を再起動して再アタッチし、デバッグを再開します

  9. 今回は、新しい Google ドキュメントでリンクをクリックして数秒待つ代わりに、ローカル環境の ngrok アプリケーションでホストされているウェブ インターフェースに記録された最後の HTTP リクエストを選択して、Replay をクリックします。前回と同様に、Google Workspace アドオン はアクティブに デバッグされているため、応答しません。

  10. Visual Studio Code デバッガから実行を再開すると、ローカル環境の ngrok アプリケーションでホストされているウェブ インターフェースから、アプリケーションが更新されたバージョンのプレビュー カードでレスポンスを生成していることを確認できます。

リモート環境からデバッグする

このセクションでは、リモート環境で実行される Google Workspace アドオンを操作します。

環境をリモートでデバッグします。
図 9.リモート環境からデバッグする。

前提条件

  • Google Workspace アドオンがデプロイされ、インストールされていること。
  • アプリケーションがリモート環境で実行されており、特定のポートでデバッガが有効になっていること。このガイドの手順では 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 で、次の操作を行います。

  1. 新しいウィンドウで、アプリのソースコードを開きます。
  2. ルート ディレクトリに .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 は、ローカル環境のデバッグポートに置き換えます。

  3. HTTP リクエスト 処理を一時停止するアプリのソースコードにブレークポイントを追加し、先ほど追加した Debug Remote 構成で実行と デバッグを開始します。

    インストールした Google Workspace アドオンを操作します。 Google Workspace アドオンは、 アクティブにデバッグ されているため、Visual Studio Code IDE では応答しません。