Microsoft TeamsにGitHub通知する

簡単にできるはずが（実際、簡単です）、もの知らぬせいで手間取ったため、せっかくなので残しておきます。
誰かのお役に立てれば幸いです。

* 【追記（2020.09.15）】GitHubとMicrosoft Teamsとの統合アプリ「GitHub (Preview)」がパブリックベータで登場しています（ [2020.9.10 の The GitHub Blog](https://github.blog/2020-09-10-announcing-the-github-integration-with-microsoft-teams/) ）。
    「公式」感もありますし（アプリの作成者が「Microsoft Corporation」）、今後はこちらが主流になっていくかもしれません。    

    * 参考: 2020.09.15 現在、筆者環境にてGitHub関連のTeamsアプリを見てみますと
      ![20200915_01.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/700291/7d67cdf8-373a-df43-4fc9-246019488242.jpeg)
        * 「GitHub」アプリ: 当記事の紹介している「GitHubコネクタ（のアプリ）」
        * 「GitHub (Preview)」アプリ: 新たなアプリ ※当記事で紹介していない
        * 「GitHub Enterprise」アプリ: 当記事の紹介している「GitHub Enterpriseコネクタ（のアプリ）」

## やりたいこと

GitHubリポジトリのPushやIssueやPull Requestの通知を、Microsoft Teams（以降 MS Teams）のチャネルに出したい。
出す内容には拘らないので、とにかく手間かけずに。

## 方法

通知を出したいMS Teamsチャネルに、コネクタを追加します。
それらしいコネクタは「GitHub Enterprise」「GitHub」の２つありますが、どちらでも可能です。
※設定手順については、後述

### 「GitHub Enterprise」コネクタ、「GitHub」コネクタ、どちらを使うか？

シンプルに通知機能のみ欲しい場合であれば、設定のシンプルさ・把握のしやすさから「GitHub Enterprise」コネクタから始めるのが良さそうです。

* 「GitHub Enterprise」コネクタ
    * 機能として「通知」に特化しており、リポジトリ側のWebhookを手動で設定する手間はあるが、シンプルで把握しやすい
    * GitHub Enterpriseではないリポジトリにおいても、動作する

* 「GitHub」コネクタ
    * 「GitHub」アプリの一部であり、「GitHub」アプリには通知以外のリッチな機能（Issues/Pull Requestsのタブ機能や、Bot機能など）が存在する
        * 「GitHub」アプリについては、こちらが参考になります: https://techcommunity.microsoft.com/t5/microsoft-teams-blog/github-code-better-together-with-github-and-microsoft-teams/ba-p/659444
        * 通知内容に、[Add a comment]、[Close]といったチャットからの操作が可能となっている
            * （ウィザードで簡単にはできますが）、その機能用のOAuth設定が必要となる
    * MS Teams側での設定を進めるだけで完結する簡易さはあるものの、OAuthアプリ連携について慣れていないと後々苦労する、、かもしれません
        * GitHub側からすると、アカウント（もしくはOrganization）単位のOAuthアプリが登録されます
            * さらに「GitHub」アプリの他の機能を利用する際には、別なOAuthアプリが登録されます
        * この辺り（OAuthによる連携）に慣れていないと、把握・管理が難しそう  **※もし、間違い等ありましたらコメント頂けますと助かります！！**


## 設定手順

### 方法1. 「GitHub Enterprise」コネクタを利用

通知したいチャネルで、「GitHub Enterprise」のコネクタを登録し、GitHubリポジトリ側でWebhookを登録します。

* チャネルで「GitHub Enterprise」のコネクタを登録
    ![ghe_01.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/700291/3c855927-8188-41fd-4583-cfa7f954ff0f.jpeg)
    ![ghe_03.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/700291/a4cb66de-e55f-bb01-b449-1068d432623c.jpeg)

    * GitHubリポジトリ側のWebhookを登録（ダイアログに詳細な手順が出ているので、それを参考に）
        ![ghe_11.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/700291/cc98d8af-fbbf-0ab1-f0d3-1e759d259f4e.jpeg)
        * 設定ポイント:
            * 払い出されたWebhook URLを設定します
            * Webhookの設定にて、通知を受け取りたいイベントを選択します（登録後の変更は可能）
    * MS Teams側のダイアログを「完了」

* （コネクタを登録した旨が、メッセージ）
  ![ghe_04.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/700291/afb29297-9737-ab97-71ed-801b06905550.jpeg)

    * 補足: チャネルに「GitHub Enterprise」コネクタを登録すると、（チャネルが属する）チームに「GitHub Enterprise」アプリが登録されています。
        ![ghe_90.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/700291/4cdd7931-4ca8-8e91-135d-941f5ff4baab.jpeg)

以上で、チャネルに通知が来るようになります。

![ghe_05.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/700291/d8435393-8ee6-6363-182c-ae7b72cc2d98.jpeg)


### 方法2. 「GitHub」コネクタを利用

通知したいチャネルで、「GitHub」のコネクタを登録します。

* チャネルで「GitHub」のコネクタを登録
  ![gh_02.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/700291/156c33d5-5150-d620-83ed-aeacfa6134a6.jpeg)
  ![gh_03.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/700291/b18f8a80-da83-fd44-b653-9b42c7f7284d.jpeg)

    * 途中GitHubアカウントのログインや、OAuthのダイアログが表示されるので、内容を確認の上、進める
        * 補足: GitHubアカウントにOAuthアプリが追加されます（GitHub側のアカウント設定 Applications / Authorized OAuth Apps ）
          ![gh_11.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/700291/c88fe6bc-1885-ec29-e7e5-6c6070a16ca9.jpeg)

    * [通知]にて、通知を受け取りたいイベントを選択します（登録後の変更は可能）

* （コネクタを登録した旨が、メッセージ）
  ![gh_04.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/700291/a7cd260a-f770-bc5e-aa7a-cf0c575c8756.jpeg)

    * 補足: チャネルに「GitHub」コネクタを登録すると、（チャネルが属する）チームに「GitHub」アプリが登録されています。
      ![gh_90.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/700291/b4801c2c-b11a-f49f-e015-098da1e0414c.jpeg)

以上で、チャネルに通知が来るようになります。

![gh_05.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/700291/9cfe053c-0a6d-ad77-f92a-e05135ce86cf.jpeg)


## まとめ

* MS Teamsの「GitHub Enterprise」コネクタ、もしくは「GitHub」コネクタを使って、簡単にできます。
* シンプルに通知機能だけ欲しい場合には、「GitHub Enterprise」コネクタから始めると良さそうです。


## 余談

* 通知のタイミングや内容を細かにカスタマイズしたい場合、GitHub Actionsから、MS TeamsのIncomming Webhookアプリ（コネクタ）を用いる方法があります。
    * 既にいくつかのActionが公開されており、用途に合致したものがあれば、導入するのも良いでしょう。
      * https://github.com/marketplace?type=actions&query=microsoft+teams