Skip to content
Latchkey

Webhookアーキテクチャとは? システム間のプッシュ通知

Webhookアーキテクチャは、イベントが起きたときに登録されたURLへHTTPリクエストを送ることで、あるシステムが別のシステムに通知できるようにします。

Webhookは、システム同士がインターネット越しにイベントをプッシュする方法です。あるシステムが別のシステムに変化をポーリングするのではなく、何かが起きた瞬間に、送信元システムがあなたの登録したURLを呼び出します。プッシュ時にGitHubがワークフローを発火させること、支払いをStripeが通知することは、いずれもWebhookアーキテクチャであり、ほとんどのCI/CDトリガーのバックボーンです。

ポーリングではなくプッシュ

プロバイダーにコールバックURLを登録し、どのイベントに関心があるかを伝えます。そのイベントが発生すると、プロバイダーは何が起きたかを記述したペイロードとともにHTTP POSTをあなたのURLに送ります。ポーリングは不要で、ほぼリアルタイムの配信です。

連携を支える理由

  • 絶え間ないポーリングなしのリアルタイム反応。
  • 送信元と受信側の疎結合。
  • どんなシステムでも実装できるシンプルなHTTP契約。
  • 外部イベントでパイプラインをトリガーするのに自然に適合。

受信側の難所

エンドポイントは、本物の配信だけを信頼するよう署名を検証し、送信側がタイムアウトしないよう素早く応答し、重複配信を冪等に処理しなければなりません。プロバイダーは失敗時にリトライするため、同じイベントが複数回届きうります。

WebhookとCI/CD

pushやpull requestのWebhookが、ほとんどのパイプラインを開始させます。Webhook受信側がそのイベントをビルドに変換するため、その信頼性はCIが動くかどうかそのものに直結します。取りこぼしたり検証されなかったりしたWebhookは、取りこぼしや悪意あるビルドを意味します。

リトライを想定した設計

送信側は2xx以外の応答でリトライするため、不安定な受信側は重複処理を引き起こします。冪等な処理、素早い確認応答、そしてエンドポイントの背後で実際の作業をキューイングすることが、リトライ下でもWebhookアーキテクチャを信頼できるものに保ちます。

Latchkeyについての補足

Latchkeyは、jobがキューに入った瞬間にGitHubのWebhookからマネージドrunnerを起動します。そのトリガーはプッシュベースであるため、Webhook経路の信頼性こそが、runnerがどれだけ速くオンラインになるかを決めます。

重要なポイント

  • Webhookアーキテクチャは、イベントをポーリングする代わりにHTTP経由でプッシュします。
  • 受信側は署名を検証し、素早く応答し、重複配信を処理しなければなりません。
  • Webhookは、外部イベントからほとんどのCI/CDパイプラインをトリガーするものです。

関連ガイド