Repolode
adnanh

adnanh/webhook

HTTP webhookエンドポイントを公開し、リクエストデータを引数や環境変数として渡して、設定したシェルコマンドを実行する軽量なGoサーバー。

スター
12,207
フォーク
882
未解決の Issue
128
最終コミット
2 か月前

これは何?

webhookは、受信したHTTPリクエストをシェルコマンドの実行につなげる小さなGoプログラムです。フックはJSONまたはYAMLファイルで定義し、それぞれにIDを指定します。IDは`/hooks/redeploy-webhook`のようなエンドポイントになります。リクエストを受け取ると、webhookはヘッダー、ペイロード、クエリ変数を解析し、設定したトリガールールを確認したうえで、値をコマンドライン引数または環境変数としてスクリプトに渡します。

トリガールールを使うと、シークレットの必須化、ペイロード内の値との照合、特定のIP範囲のみの許可など、フックが実行される条件を制限できます。フックはテンプレートから読み込めるほか、HTTPSでの配信、TCPポートまたはUnixソケットを介したリバースプロキシ配下での実行、systemd socket activationによる起動にも対応しています。マルチパートフォームデータには限定的に対応しています。

webhookの役割は、リクエストの受信とコマンドの実行に限定されています。スクリプト自体の動作はユーザーに委ねられます。

主な機能

  • 01JSONまたはYAMLでフックを定義し、それぞれをHTTPエンドポイントとして公開できます。
  • 02リクエストのヘッダー、ペイロード、クエリ値を、引数または環境変数としてコマンドに渡せます。
  • 03シークレット照合やIP許可リストなどのトリガールールに対応しています。
  • 04HTTPSでフックを配信でき、TCPまたはUnixソケットを介したリバースプロキシ配下でも実行できます。
  • 05systemd socket activationとGoテンプレート設定ファイルに対応しています。

ユースケース

  • GitHubやBitbucketのブランチにコードがpushされたときに、再デプロイスクリプトを実行する。
  • SlackやMattermostのスラッシュコマンドからCIやビルドジョブを実行する。
  • チャット連携からサーバー側のコマンドを実行し、その結果を返信する。

クイックスタート

  1. 1

    Go 1.21以降でソースからビルドする

    go build github.com/adnanh/webhook
  2. 2

    フックを定義したhooks.jsonファイルを作成する

  3. 3

    フックファイルを指定し、詳細ログモードでwebhookを起動する

    /path/to/webhook -hooks hooks.json -verbose

使う前に知っておきたいこと

  • フックはサーバー上でシェルコマンドを実行するため、不正な実行を防ぐようトリガールールとシークレットを設定してください。
  • リバースプロキシの背後では、IPホワイトリストのルールが期待どおりに機能しません。

収録されている特集

トピック

よくある質問

webhook とは?
HTTP webhookエンドポイントを公開し、リクエストデータを引数や環境変数として渡して、設定したシェルコマンドを実行する軽量なGoサーバー。 webhookは、受信したHTTPリクエストをシェルコマンドの実行につなげる小さなGoプログラムです。フックはJSONまたはYAMLファイルで定義し、それぞれにIDを指定します。IDは`/hooks/redeploy-webhook`のようなエンドポイントになります。リクエストを受け取ると、webhookはヘッダー、ペイロード、クエリ変数を解析し、設定したトリガールールを確認したうえで、値をコマンドライン引数または環境変数としてスクリプトに渡します。
webhook は無料で使えますか?ライセンスは?
webhook は MIT ライセンスのオープンソースです。商用製品で使う前にライセンス条件を確認してください。
webhook は今もメンテナンスされていますか?
半年以内に更新あり。webhook の最終コミットは 2026年9月4日 です。
webhook は何に使えますか?
GitHubやBitbucketのブランチにコードがpushされたときに、再デプロイスクリプトを実行する。 SlackやMattermostのスラッシュコマンドからCIやビルドジョブを実行する。 チャット連携からサーバー側のコマンドを実行し、その結果を返信する。
webhook のインストール方法は?
Go 1.21以降でソースからビルドする: go build github.com/adnanh/webhook フックを定義したhooks.jsonファイルを作成する フックファイルを指定し、詳細ログモードでwebhookを起動する: /path/to/webhook -hooks hooks.json -verbose
webhook はどこで入手できますか?
ソースコードとインストール手順は GitHub にあります:https://github.com/adnanh/webhook

概要はプロジェクトの README をもとに AI が生成しています。GitHub の数値は毎日更新されます。

関連プロジェクト