# webhook について

Webhook は、 GitHubで特定のイベントが発生するたびに外部 Web サーバーに通知を配信する方法を提供します。

## webhook について

Webhook を使用すると、ソフトウェア システムで発生するイベントにサブスクライブし、それらのイベントが発生するたびにサーバーに配信されるデータを自動的に受信できます。

API をポーリングする (断続的に呼び出してデータがあるかどうか確認する) のではなく、Webhook を利用してデータが発生した時に即座に受信します。 Webhook では、Webhook の作成時に 1 度イベントに関与するだけで済みます。

Webhook は、次のようなさまざまなシナリオで使用されます。

* 外部 CI サーバーで CI (継続的インテグレーション) パイプラインをトリガー。 たとえば、コードがブランチにプッシュされたときに Jenkins または CircleCI で CI をトリガーします。
* GitHub上のイベントに関する通知をコラボレーション プラットフォームに送信する。 たとえば、プル要求に関するレビューがある場合に Discord または Slack に通知を送信します。
* Jira などの外部イシュー トラッカーを更新。
* プロダクション サーバーへのデプロイ。
* 監査目的で、 GitHubで発生したイベントをログに記録します。

## GitHub のWebhookについて

webhook を作成するときは、URL を指定し、 GitHubで発生するイベントをサブスクライブします。 webhook がサブスクライブされているイベントが発生すると、 GitHub は、指定した URL にイベントに関するデータを含む HTTP 要求を送信します。 その URL で Webhook 配信をリッスンするようにサーバーが設定されている場合は、受信したときにアクションを実行できます。

たとえば、コードがリポジトリにプッシュされたとき、プル要求が開かれる、 GitHub Pages サイトがビルドされたとき、または新しいメンバーがチームに追加されたときに発生するイベントに Webhook をサブスクライブできます。 サーバーは、コードを運用環境にデプロイするか、CI パイプラインをトリガーするか、通知を送信するか、新しいチーム メンバーの GitHub プロジェクトを作成することで応答できます。

特定のリポジトリ、組織、 GitHub Enterprise、  、または GitHub App内に Webhook を作成する必要があります。 Webhook は、リポジトリ、組織、 GitHub Enterprise、  、またはインストールされている GitHub App で使用可能なリソースにのみアクセスできます。 詳しくは、「[Webhook の種類](/ja/enterprise-server@3.22/webhooks/types-of-webhooks)」をご覧ください。

Webhook の作成の詳細については、「[webhookの作成](/ja/enterprise-server@3.22/webhooks/using-webhooks/creating-webhooks)」を参照してください。 サブスクライブできるイベントの種類の詳細については、「[Webhook のイベントとペイロード](/ja/enterprise-server@3.22/webhooks/webhook-events-and-payloads)」を参照してください。 ペイロードの配信に応答してアクションを実行するようにサーバーを構成する方法の詳細については、「[webhookの配信処理](/ja/enterprise-server@3.22/webhooks/using-webhooks/handling-webhook-deliveries)」を参照してください。

> \[!NOTE]
> 現在、GitHub Webhook では IPv6 はサポートされていませんが、今後サポートされる予定です。 `/meta` REST API エンドポイントは、その遷移を有効にするための IPv6 範囲を返します。

## Webhook または REST API の選択

Webhook には、API を使用する場合と比較して、次のような利点があります。

* Webhook では、API をポーリングするよりも少ない労力とリソースで済みます。
* Webhook は API 呼び出しよりもスケーリングで優れています。 多くのリソースを監視する必要がある場合は、各リソースに対して API を呼び出すと、すぐに API レート制限クォータに達する場合があります。 代わりに、複数の Webhook イベントをサブスクライブし、イベントが発生したときにのみ情報を受信できます。
* Webhook はイベントが発生したときにトリガーされるため、ほぼリアルタイムの更新が可能です。

情報が 1 回だけ必要な場合、断続的に必要な場合、またはスケールアップする予定のない小規模のリソース セットのみから情報を取得する場合は、関連する情報が必要なときに API を呼び出すことができます。

Webhook を使用する際のベスト プラクティスについては、「[Webhook の使用に関するベスト プラクティス](/ja/enterprise-server@3.22/webhooks/using-webhooks/best-practices-for-using-webhooks)」を参照してください。

> \[!NOTE]
> GitHubサービス（サービス フックとも呼ばれます）は、Webhooks との統合を優先して引退。 GitHub Services の使用から webhook の使用への統合の移行の詳細については、[blog の投稿](https://developer.github.com/changes/2018-04-25-github-services-deprecation/)を参照してください。

## 参考資料

* [Webhook の種類](/ja/enterprise-server@3.22/webhooks/types-of-webhooks)