GitHubコミットをSlack通知する方法(SlackのGitHubアプリを使用する編)

# この記事は？
第三者が運用しているGitHubレポジトリ※へのコミットをSlackワークスペースで各種更新の通知を受けるという要件を実現するための方法を調査・実装したので、手順と気づいた内容を記録する。

※オープンソースソフトウェアのGitHubレポジトリなどを想定いただければ

# 環境
* Slackアプリ プロダクション 4.36.136 64-bit
* Windows 10
* GitHub（SaaS版であり、オンプレ版でも、  有償アカウントでもない）
* Slack (無料アカウント)
 
# GitHubアプリでの連携
## 概要
* Slackのワークスペースへサードパーティーアプリの[GitHubアプリ](https://slack.github.com/)を導入することでGitHub上の対象のレポジトリの更新を検知する方法

## 必要なもの
* Slackワークスペースへのappのインストール権限があるSlackアカウント
* GitHubアカウント([対象のレポジトリに権限を有するもの※](https://github.com/integrations/slack?tab=readme-ov-file#github-permission-scopes))
* GitHub Marketplace Appsで[Slack + GitHub](https://github.com/marketplace/slack-github)をインストール

※注意事項にも詳細を記載

## 注意事項
GitHubにSlackアプリをインストールしていない場合や、通知を受けたい対象のレポジトリへGitHubアカウントが[必要な権限](https://github.com/integrations/slack?tab=readme-ov-file#github-permission-scopes)を有していない場合、本記事の連携方法は使用できない※（簡単に言うと、自分のGitHubアカウントで運用しているレポジトリではあればSlackアプリをインストールすれば問題ない。OSSや企業が公開しているPublicなレポジトリでもできるものとできないレポジトリがあるということ。)
<font color="HotPink">つまり、第三者のPublicレポジトリ(OSSなど)の内容を確認したりしたいという要件だと先方がGitHubにSlackアプリを入れてくれていないとケースもあり実現できない場合がある。</font>

※私はSlack上のGitHubアプリとGitHub上のMarketplace AppsでのSlackアプリが混同をした。。。（詳細はインストール方法を見てほしい)

## インストール方法
* Slack(管理WEB画面操作)
    * `https://[ワークスペース名].slack.com/apps` にブラウザでアクセス
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/124955/15264cdb-d9c8-2ca4-ca11-5a522866a764.png)
    * "GitHub"で検索
        ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/124955/88221224-b0fa-a8c3-1a8b-43f5258c9ea6.png)
    * インストール
* Slack(ユーザ操作）
    * ワークスペースの左メニューのAppにGitHubをクリック
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/124955/5f5eb6e1-7e26-b9f6-884a-f7c12d74cdb2.png)
    * BOTからのファーストメッセージ上の"Connect GitHub Account"をクリック(なお、時間がたっていて失敗した場合や、該当のメッセージが見当たらない場合は、`/github signin` とGitHubボットに話しかけるとボタンが出現します。）
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/124955/4b999e5c-cafd-6644-2548-d3d20b4fcb9c.png)
    * Slackアプリから呼び出されたブラウザ上に以下の画面が表示されるので、"Connect GitHub account"ボタンをクリック
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/124955/c9abf4f8-e035-14ea-3ebc-8d0347bc903c.png)
    * 確認コードが表示されるのでコピー
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/124955/ad6f9daa-68c4-5d3c-816e-2fd951f4cf11.png)
    * Slackアプリの画面に戻り、"Enter code"をクリック
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/124955/4b999e5c-cafd-6644-2548-d3d20b4fcb9c.png)
    * 以下のポップアップをウィンドウにさきほどの確認コードをペースト
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/124955/f612b44d-7aeb-1d0b-de8e-bb33401f2910.png)
    * 成功すると、SlackアプリのGitHubアプリ(BOT)との会話欄にBOTより以下のメッセージが表示されました
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/124955/06cd7fe4-e95f-54c7-501b-fc20fdfe8e4d.png)

* Slackアプリ(通知対象のレポジトリの購読登録)
    * 以下のsubscribeコマンドをSlackアプリ > app > GitHubをクリックして入力する
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/124955/de7a58a6-6e8c-8d64-7cf4-70052422a943.png)
    * (購読に成功した場合)
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/124955/1e297c63-d950-3802-6232-c634bd7faa7a.png)
    * (購読に失敗した場合)
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/124955/a1cc5673-0685-ce0d-4844-1ffddc2b57fc.png)

## 成功した場合の通知の見え方
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/124955/3f69b6e9-b9bf-096c-b5de-3b08aebbad7a.png)
※通知の内容については、`subscribe`コマンドの引数で通知内容を調整することが可能

## 検証していて気づいたこと
* 購読に失敗した場合は、タイポをまず疑うべし
* Slack上のパブリックチャネルでの運用の際は、Slackユーザ全員にGitHubアプリとの会話を許可してしまうと、subscribeされまくり、誰が登録したのかが調査できないので注意（基本通知用のチャネルを作ったほうがいいと思う)
* 注意事項にも記載したが、GitHub側にSlackアプリを入れないとsubscribeできないため、第三者(OSS)のレポジトリのウォッチには適してないない（別の連携方法を探し中、どなたかおすすめあれば教えてください)

## 追伸
今回制約があった、第三者のレポジトリの更新検知について対応すべく、続編書きました。

https://qiita.com/kamiryo/items/2fb2a9b348efe7da0653

## 参考
[dynamis/github-slack.md GitHub - Slack 連携メモ](https://gist.github.com/dynamis/eb0d9724e2cb8fd796baf528897e7720)