Help us understand the problem. What is going on with this article?

Webhookとは?

More than 1 year has passed since last update.

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を指定する。

webhook.jpg

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が通知される。
push.jpg

終わり

長々と書きましたが、やってることはただのPOSTリクエストです。

「SlackのWebhook使おうぜ!」
と言われたら
「ユーザーが投稿などをした際に、Slackが指定したURLにPOSTリクエストしてくれるから、それ使おうぜ!」
と言っているものだと思えば良いと思います。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away