はじめに
自宅サーバーの監視ツールから「サーバーが落ちました」という通知をチャットアプリに自動で届けたい、といった場面でよく登場するのがWebhook(ウェブフック) です。API連携の一種ですが、通常のAPI利用とは向きが逆になっているのが特徴です。本記事では、Webhookの一般的な仕組みと、具体例としてDiscord Webhookの構造を整理します。
WebhookとAPIの違い:プル型とプッシュ型
一般的なAPI利用は、こちらから「情報をください」とリクエストを送り、応答を受け取るプル型です。天気を知りたければ天気APIに毎回問い合わせる、という形になります。
一方Webhookは、プッシュ型の仕組みです。あらかじめ「何かイベントが起きたら、このURLにデータを送ってください」という送信先URLをサービス側に登録しておくと、実際にイベントが発生したタイミングでサービス側から自動的にHTTPリクエスト(多くはPOST)が送られてきます。
| 観点 | API(プル型) | Webhook(プッシュ型) |
|---|---|---|
| 通信の起点 | 情報を欲しい側(クライアント) | イベントが起きた側(サーバー) |
| 典型的な使い方 | 定期的にポーリングして最新状態を取得する | イベント発生時のみ即座に通知を受け取る |
| 通信回数 | 変化がなくても定期的に発生する | イベントが起きたときだけ発生する |
ポーリング(定期的な問い合わせ)が不要になるため、通信量を抑えつつリアルタイムに近い通知を実現できるのがWebhookの利点です。
具体例:Discord Webhook
Discordの各チャンネルには、Webhook用のURLを個別に発行できる機能があります。このURLに対してHTTP POSTリクエストでJSONデータを送るだけで、そのチャンネルにメッセージが投稿されます。Botアカウントを作ったり、Bot用の認証トークンを管理したりする必要がなく、URLさえ知っていれば投稿できる手軽さが特徴です。
仕組みの流れ
- Discordのチャンネル設定から、Webhook URL(
https://discord.com/api/webhooks/...という形式)を発行する - このURLを、通知を送りたい側のサービス・ツール(監視ツールなど)に登録する
- 監視ツール側でイベント(サーバーダウンなど)が発生すると、そのツールが自動的にこのURLへHTTP POSTリクエストを送信する
- Discord側がリクエストを受け取り、該当チャンネルにメッセージとして表示する
多くの自己ホスト型監視ツールはDiscord通知を標準機能として持っており、発行したWebhook URLを設定画面に貼り付けるだけで連携が完了する場合がほとんどです。
送信できる内容
Webhookで送るJSONペイロードには、content(本文テキスト)・embeds(装飾された埋め込みカード)・files(添付ファイル)などを指定できます。本文のcontentフィールドには2,000文字までという上限があります。
レート制限
Discord Webhookには1つのWebhookあたり2秒間に約5リクエストというレート制限があります。失敗したリクエストもこの回数にカウントされるため、短時間に大量の通知を送る用途には向きません。
Webhook URLはパスワードと同様に扱う
Webhook URLを知っている人は誰でもそのチャンネルに投稿できてしまいます。認証トークンと同じ機密情報として扱い、公開リポジトリやドキュメントに直接貼り付けない、他人と共有しないといった注意が必要です。万一漏洩した場合は、Discord側でそのWebhookを削除し、新しいURLを再発行することで無効化できます。
まとめ
| 項目 | 内容 |
|---|---|
| Webhookとは | イベント発生時に、登録済みURLへ自動でHTTPリクエストを送るプッシュ型の仕組み |
| APIとの違い | 通信の起点がサーバー側にあり、ポーリングが不要になる |
| Discord Webhookの特徴 | Botアカウント不要、URLへのPOSTだけでチャンネル投稿ができる |
| 注意点 | Webhook URLはパスワードと同様に機密情報として扱う、レート制限がある |