LoginSignup
1313
933

More than 1 year has passed since last update.

Webhookとは?

Last updated at Posted at 2016-12-17

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リクエストしてくれるから、それ使おうぜ!」
と言っているものだと思えば良いと思います。

お知らせ

Udemy で webpack の講座を公開したり、Kindle で技術書を出版しています。

Udemy:
webpack 最速入門10,800 円 -> 2,000 円

Kindle(Kindle Unlimited だったら無料):
React Hooks 入門(500 円)

興味を持ってくださった方はご購入いただけると大変嬉しいです。よろしくお願いいたします。

1313
933
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1313
933