Webhookを利用した記事はよく見かけますが、そもそもWebhook自体が何なのか、何を指しているのかよくわからなかったため、それに関しての備忘録です。
Webhookとは?
- アプリケーションの更新情報を他のアプリケーションへリアルタイム提供する仕組みや概念のこと。
- イベント(リポジトリにプッシュなど)発生時、指定したURLにPOSTリクエストする仕組みのこと。
Webhookの説明を見ると**「通知する、Webhookを送る」などの言葉が用いられているが、
これはPOSTリクエストのことを指している**。
Webhookを利用すると何ができるのか?
GitHubやSlackなどのサービスのWebhookを利用すると、ユーザーはサービス側がPOSTリクエストするURLを指定できる。
つまりサービスがPOSTリクエストしたパラメータに対しての処理(パラメータをSlackに通知など)を自由に指定できる。
例えばGitHubのWebhookはリポジトリにプッシュ時、コミット情報をパラメータとしてPOSTリクエストする。
そのため、プッシュ時にコミット情報をSlackに通知をしたり、メールに通知できる。
上記の通り、サービスは特定のイベント発生時にPOSTリクエストするだけなので
「GitHubのWebhookを利用して、コミット情報をSlackに通知する」
ではなく
「GitHubのWebhookを利用して、GitHubのPOSTリクエスト先にコミット情報をSlackに通知するURLを指定する」
と言った方が厳密には正しい。
GitHubのWebhookを利用してみる
GitHubのWebhookを利用して、Commit AuthorをSlackに通知するURLをPOSTリクエスト先に指定してみる。
※あくまでWebhookの説明記事のため、具体的な説明は割愛します。
リポジトリの「Settings」を開き、左メニューの「Webhooks」を開く。
「Payload URL」がPOSTリクエスト先のため、そこにCommit AuthorをSlackに通知するURLを指定する。
GitHubはPOSTリクエスト時にcommit情報などのパラメータを送信してくれるため、
以下のような処理が実行されるURLを指定すると
import slackweb
def lambda_handler(event, context):
slack = slackweb.Slack(url="https://hooks.slack.com/services/T00000000/B00000000/XXXXXXXXXXXXXXXXXXXXXXXX")
commiter = event['commits'][0]['committer']['username']
text = "{0} pushed".format(commiter)
slack.notify(text=text)
リポジトリにプッシュ時、SlackにCommit Authorが通知される。
終わり
長々と書きましたが、やってることはただのPOSTリクエストです。
「SlackのWebhook使おうぜ!」
と言われたら
「ユーザーが投稿などをした際に、Slackが指定したURLにPOSTリクエストしてくれるから、それ使おうぜ!」
と言っているものだと思えば良いと思います。
お知らせ
Udemy で webpack の講座を公開したり、Kindle で技術書を出版しています。
Udemy:
webpack 最速入門(10,800 円 -> 2,000 円)
Kindle(Kindle Unlimited だったら無料):
React Hooks 入門(500 円)
興味を持ってくださった方はご購入いただけると大変嬉しいです。よろしくお願いいたします。