# webhookのテスト

Webhookの配信と、それを処理するコードをテストする方法について学びます。

## Webhook のテストについて

Webhook の配信をテストできます。 これにより、webhook 配信をトリガーする予定のイベントに応答して、 GitHub が webhook 配信を送信することを確認できます。

コンピューターまたはコードスペースをローカル サーバーとして使用し、Webhook 配信をローカル サーバーに転送することで、Webhook 配信を処理するコードをテストすることもできます。 これにより、コードを実稼働サーバーにデプロイすることなく、コードを開発およびデバッグできます。

## Webhook 配信のテスト

webhook イベントをトリガーし、 GitHub が webhook 配信を送信したことを確認できます。

1. Webhook をトリガーします。 たとえば、`issues` イベントをサブスクライブするリポジトリ Webhook をテストしている場合は、Webhook が構成されているリポジトリでイシューを開きます。

   以前の Webhook 配信を再配信することもできます。 詳しくは、「[Webhook の再配信](/ja/enterprise-server@3.22/webhooks/testing-and-troubleshooting-webhooks/redelivering-webhooks)」をご覧ください。

   組織またはリポジトリ Webhook を使用している場合は、REST API を使用して Webhook の `ping` イベントをトリガーすることもできます。 リポジトリ Webhook を使用していて且つ Webhook が `push` イベントをサブスクライブしている場合は、REST API を使用して Webhook のテスト `push` イベントをトリガーできます。 詳細については、「[リポジトリ ウェブフック の REST API エンドポイント](/ja/enterprise-server@3.22/rest/repos/webhooks)」および「[組織の Webhook の REST API エンドポイント](/ja/enterprise-server@3.22/rest/orgs/webhooks)」を参照してください。

2. webhook 配信が送信されたことを確認するには、 GitHub を確認します。 Webhook の種類ごとにこれを行う方法については、「[Webhook配信の確認](/ja/enterprise-server@3.22/webhooks/testing-and-troubleshooting-webhooks/viewing-webhook-deliveries)」を参照してください。

Webhook 配信が送信されなかった場合、または webhook 配信が送信されたが、配信が失敗したことを示 GitHub 場合は、トラブルシューティング ガイドを参照して問題を診断してください。 詳しくは、「[Webhook のトラブルシューティング](/ja/enterprise-server@3.22/webhooks/testing-and-troubleshooting-webhooks/troubleshooting-webhooks)」をご覧ください。

## Webhook コードをローカルでテストする

Webhook コードをコンピューターまたはコード空間でローカルでテストするには、webhook プロキシ URL を使用して、webhook を GitHub からコンピューターまたはコードスペースに転送できます。 コンピューターまたはコードスペースをローカル サーバーとして使用して、これらの転送された Webhook を受信できます。

次のセクションでは、smee.io を使用して webhook プロキシ URL を指定し、Webhook を転送する方法を示します。

コードとテスト手順の具体的な例については、「[webhookの配信処理](/ja/enterprise-server@3.22/webhooks/using-webhooks/handling-webhook-deliveries)」を参照してください。

### Webhook プロキシ URL を取得する

1. ブラウザーで <https://smee.io/> にアクセスします。
2. **新しいチャンネルの開始**をクリックします。
3. \[Webhook Proxy URL] (Webhook プロキシ URL) の下にある完全な URL をコピーします。 この URL は次の設定ステップで使用します。

### webhook を構成して webhook プロキシ URL を使用するようにする

上記の webhook プロキシ URL を使用するように webhook を構成します。 詳細については、「[webhookの作成](/ja/enterprise-server@3.22/webhooks/using-webhooks/creating-webhooks)」および「[webhookの編集](/ja/enterprise-server@3.22/webhooks/using-webhooks/editing-webhooks)」を参照してください。

これで、 GitHub はその URL に webhook 配信を送信します。

### ローカル サーバーを開始する

コンピューターまたは codespace で、ローカル サーバーを起動します。 これを行う方法は、Webhook を受け取るコードの記述方法によって異なります。 例については、「[webhookの配信処理](/ja/enterprise-server@3.22/webhooks/using-webhooks/handling-webhook-deliveries)」を参照してください。

コードをローカルで実行できることを確認する必要があります。 たとえば、コードが運用環境のサーバーの環境変数に依存している場合は、環境変数がローカル サーバーでも使用できることを確認する必要があります。

コードのステップが想定どおりに実行されたことを確認できるように、ログ ステートメントを追加すると便利な場合もあります。

Webhook のテスト中は、ローカル サーバーを実行し続けます。

### Webhook を転送する

1. [smeeクライアント](https://www.npmjs.com/package/smee-client) がまだインストールされていない場合は、ターミナルで次のコマンドを実行します。

   ```shell copy
   npm install --global smee-client
   ```

2. smee.io から転送された Webhook を受信するには、ターミナルで次のコマンドを実行します。
   `WEBHOOK_PROXY_URL` を、以前の Webhook プロキシ URL に置き換えます。 サーバーが処理するパスまたはルートに `PATH` を置き換えます。
   `PORT` を、ローカルサーバーがリッスンしているポートに置き換えてください。

   ```shell copy
   smee --url WEBHOOK_PROXY_URL --path /PATH --port PORT
   ```

`WEBHOOK_PROXY_URL`、`PORT`、および `PATH` のプレースホルダーは指定した値に置き換えられるというような出力が表示されます。

```shell copy
Forwarding WEBHOOK_PROXY_URL to http://127.0.0.1:PORT/PATH
Connected WEBHOOK_PROXY_URL
```

これで、webhook プロキシ URL (smee.io URL) が GitHub から webhook 配信を受信すると、smee は Webhook 配信をローカル サーバーに転送します。

1. Webhook のテスト中は、これを実行し続けます。 Webhook の転送を停止する場合は、<kbd>Ctrl</kbd>+<kbd>C</kbd> を押します。

この時点で、ローカル サーバーと smee フォワーディングの両方が実行されている必要があります。

### Webhook 配信をトリガーする

Webhook をトリガーします。 たとえば、`issues` イベントをサブスクライブするリポジトリ Webhook をテストしている場合は、Webhook が構成されているリポジトリでイシューを開きます。

以前の Webhook 配信を再配信することもできます。 詳しくは、「[Webhook の再配信](/ja/enterprise-server@3.22/webhooks/testing-and-troubleshooting-webhooks/redelivering-webhooks)」をご覧ください。

### 配信を確認する

GitHubが Webhook 配信を送信し、そのスミーが配信を受信して転送し、ローカル サーバーが Webhook 配信を処理したことを確認できます。

#### GitHubが配信を送信したことを確認する

webhook 配信が送信されたことを確認するには、 GitHub を確認します。 詳しくは、「[Webhook配信の確認](/ja/enterprise-server@3.22/webhooks/testing-and-troubleshooting-webhooks/viewing-webhook-deliveries)」をご覧ください。

Webhook 配信が送信されなかった場合、または webhook 配信が送信されたが、配信が失敗したことを示 GitHub 場合は、トラブルシューティング ガイドを参照して問題を診断してください。 詳しくは、「[Webhook のトラブルシューティング](/ja/enterprise-server@3.22/webhooks/testing-and-troubleshooting-webhooks/troubleshooting-webhooks)」をご覧ください。

#### smee が Webhook 配信を受け取ったかどうかを確認する

smee.io の Webhook プロキシ URL に移動します。 トリガーまたは再配信したイベントに対応するイベントが表示されるはずです。 これは、 GitHub が指定したペイロード URL に Webhook 配信を正常に送信したことを示します。

smee.io に Webhook 配信が表示されない場合は、Webhook が Webhook プロキシ URL (smee.io URL) を使用していることを確認してください。

#### smee が Webhook 配信を転送したことを確認する

`smee --url WEBHOOK_PROXY_URL --path /PATH --port PORT` を実行したターミナル ウィンドウに、`POST http://127.0.0.1:3000/webhook - 202` といった表示が出るはずです。 これは、smee が Webhook をローカル サーバーに正常に転送したことを表します。

これが表示されない場合は、smee クライアントとローカル サーバーの両方が動作されていることを確認します。 これらのプロセスは、2 つの個別のターミナル ウィンドウで実行されます。

また、smee クライアントとローカル サーバーを実行しているターミナル ウィンドウでエラーも確認します。 具体的なエラーは、Webhook を受信するコードの記述方法によって異なります。 例については、「[webhookの配信処理](/ja/enterprise-server@3.22/webhooks/using-webhooks/handling-webhook-deliveries)」を参照してください。

#### ローカル サーバーが Webhook 配信を処理したことを確認する

この時点で、GitHub が webhook 配信を送信し、smee がその配信をローカルサーバーに転送したことを確認しました。 次に、コードが Webhook の配信が想定どおりに処理されたことを確認する必要があります。 これを行う方法は、Webhook を受け取るコードの記述方法によって異なります。 例については、「[webhookの配信処理](/ja/enterprise-server@3.22/webhooks/using-webhooks/handling-webhook-deliveries)」を参照してください。