前回の(1)はこちらから。
GitHub WebhooksによるSlackとの連携
前回の(1)まではPerlスクリプト単体でGitHub APIを実行する例でしたが、応用編として、GitHubが提供しているGitHub Webhooksを利用してSlackと連携するサンプルアプリケーションを紹介します。
GitHubを活用した開発ワークフロー
Pull Requestやissueなどの通知について、公式のSlack用GitHubアプリケーションを利用するなどして、Slackとの連携を行っているケースがあると思います。また、GitHub Actionsを利用できる環境であれば、GitHub MarketplaceにあるSlack連携などのツールを組み合わせて、任意のワークフローを構築することもできるでしょう。
しかし、GitHub Enterpriseのバージョンの問題でGitHub Actionsを利用できない環境や、既存のツールだけでは実現できない込み入った処理を自分で作成したい場合もあるでしょう。GitHub Webhooksは、そのような場合に活躍します。
GitHub Webhooksの設定
GitHub Webhooksは、GitHubリポジトリへの各種操作(コミットのPush、Pull Requestの作成、issueの作成など)を受けた際に、外部のWebサーバへイベントの通知を行うしくみです。このWebhookとGitHub APIを組み合わせることによって、Webhookの通知を受けたタイミングでSlackに通知したり、任意のリポジトリ操作を行ったりすることができます。
Webhookの設定方法については、公式ドキュメントを参照してください。
Webhookを受信するアプリケーションの作成
では、Webhookを受信するWebアプリケーションを作成しましょう。前回のPull Requestのレビュアーをランダムに設定する処理を組み込んだWebアプリケーションを作成します。
PerlとSlackの連携には、WebService::Slack::WebApi
モジュールを用います[1]。Webアプリケーションフレームワークには、Mojolicious::Lite
を用います[2]。
前回の例ではチーム内のメンバーを取得していましたが、今回はチームが存在しない場合の例として、リポジトリのコラボレータからランダムに1人を抽出するように変更します。また、レビュアーがアサインされた直後のタイミングでSlackにその旨を通知します。
このアプリケーションを、Webhookが受信できる場所に設置します。動作確認は、ローカルホストやNAT(Network Address Translation)の内側で動作しているサーバを外部公開することが可能なngrokを利用して行うのが簡単でよいでしょう[3]。WebhookのPayload URLには、https://xxxxxxx.ngrok.io/payload
のように/payload
を付けてください。
このように、Webhookを受信するイベントとGitHub APIを組み合わせて追加していくことで、任意の操作の自動化や、好きなタイミングでのSlackなどの外部ツールとの連携が可能となります。前回で解説したように公開リポジトリが作成されたタイミングで通知したり、リポジトリ内のWikiが更新されたら通知したりといったこともできます。
まとめ
駆け足になりましたが、GitHub APIを使用してチーム開発をスムーズに進めるためのアイデアを紹介しました。みなさんのプロジェクトに合わせて、これまで手動で行っていた操作を自動化したり、外部ツールとうまく連携させたりすることで、本来のタスクに集中しやすい環境を作っていけるでしょう。
さて、次回の執筆者はutgwkkさんで、テーマは「他言語のライブラリをPerlに移植する」です。お楽しみに。
- 特集1
イミュータブルデータモデルで始める
実践データモデリング
業務の複雑さをシンプルに表現!
- 特集2
いまはじめるFlutter
iOS/Android両対応アプリを開発してみよう
- 特集3
作って学ぶWeb3
ブロックチェーン、スマートコントラクト、NFT