GitHub と Slack を連携して PR を AI で要約し自動で通知する方法

開発チャンネルに GitHub の通知を流すと、エンジニア以外のメンバーには PR のタイトルだけでは中身が分からず、読み飛ばされがちです。この記事は、Samurai App のワークフローで PR の説明文を AI に短くまとめさせ、Slack へ送る手順を説明します。

先に書いておくと、通知を受け取るだけなら GitHub 公式の Slack アプリで足ります。 Samurai App を使う理由があるのは、通知の前に AI の要約や仕分けを挟みたい場面です。

結論

  • 通知だけなら公式アプリ:/github subscribe owner/repo で、Issue、PR、コミット、リリース、デプロイの通知が届きます。ラベルでの絞り込みやレビューの通知もここでできます
  • 要約を添えるなら Samurai App:サービス連携で GitHub の出来事を受け、「AI で生成」のステップで要約し、「通知先へ送る」のステップで Slack へ送ります
  • 要約の材料はタイトルと説明文:届く内容に差分は入っていません。説明文が空の PR は、中身の分かる要約になりません

できること・できないこと

公式アプリと Samurai App の違いは次のとおりです。

比べる点 GitHub 公式の Slack アプリ Samurai App のワークフロー
設定の場所 Slack のスラッシュコマンド ワークフローの画面
通知の文面 アプリが決めた形 自分で書く。AI の要約も入れられる
ラベルでの絞り込み +label:"priority:HIGH" 下の Pull Request Created の「絞り込み」
Slack から PR や Issue を操作 できる できない(送るだけ)
費用 公式の範囲 1 件受けるごとに約 0.5 円(何も実行されなくても)。要約はモデルの利用分も別にかかる

出来事は、すぐ届くものと、見に行く方式で最大 15 分遅れるものに分かれます。よく使うものは次の 4 つです。「どうなったら動かすか」には左の名前で並びます。

画面の名前 表記 届き方 特徴
Pull Request Event GITHUB_PULL_REQUEST_EVENT すぐ届く PR が開いた、閉じた、更新されたときに届く。「絞り込み」はリポジトリだけ
Issue Added Event GITHUB_ISSUE_ADDED_EVENT すぐ届く 新しい Issue で届く
Pull Request Created GITHUB_PULL_REQUEST_CREATED 最大 15 分遅れる ラベル、向き先のブランチ、作成者、下書きかどうかで絞れる
Pull Request Review Submitted GITHUB_PULL_REQUEST_REVIEW_SUBMITTED_TRIGGER 最大 15 分遅れる PR の番号(pull_number)が必須で、1 つの PR だけを監視する

全 PR のレビューを通知したいなら、公式アプリの /github subscribe owner/repo reviews が向いています。

Pull Request Event は、PR にコミットを追加しただけでも届きます。費用は届いた出来事の数で決まり、「絞り込み」で減るとは限らないので、コミットの多いリポジトリでは件数に注意してください。

できないことは 3 つあります。

  • 差分の要約:Pull Request Event が運ぶのは action、title、description、number、url、createdBy、createdAt です。コードの変更は含まれません
  • Slack の投稿への返信の受け取り:「通知先へ送る」は送るだけです
  • GitHub Enterprise Server の手順:この記事は github.com のリポジトリで書いています。自社で立てたサーバーで動くかは確認していません

用意するもの

  • 通知したいリポジトリを読めて、Webhook を作れる GitHub アカウント。GitHub の仕様では、リポジトリの Webhook を作れるのはオーナーか管理者権限のある人です
  • Slack の Incoming Webhook の URL。1 つの URL は 1 つのチャンネルに結び付きます
  • Samurai App のマネージャー以上の権限。サービス連携をワークフローに付けられるのはマネージャー以上です

手順

完成すると、次のようなワークフローになります。

GitHub の PR を要約して Slack へ送るワークフローの編集画面

1. Slack で Incoming Webhook の URL を作る

api.slack.com/apps でアプリを作り、「Incoming Webhooks」をオンにして、「Add New Webhook to Workspace」で開発チャンネルを選びます。発行された https://hooks.slack.com/services/... を控えます。この URL は秘密の情報なので、リポジトリには書かないでください。

2. Samurai App に通知先を登録する

「設定」の「通知」にある通知先の登録画面

「設定」の「通知」で「名前」と「宛先 URL」を入れ、「通知先を追加」を押します。行の「テスト送信」で、チャンネルに届くことを確認します。登録した URL は以後表示されません。

3. GitHub を接続する

/settings/connections の「コネクタ」のタブで GitHub を追加し、ブラウザでサインインして接続します。

4. ワークフローを作る

「ワークフロー」の「新規作成」で下書きを作ります。ステップを選んでいない状態の「設定」で「入力の項目を追加」を押し、名前を event、種類を「項目の組」にします。受け取った出来事は、この event に入ります。

続けてステップを 2 つ置きます。

「AI で生成」の「指示」には、次のように書きます。

次の PR を、開発者でない人にも分かるように 2 文の日本語で要約してください。説明文が無いときは「説明文なし」とだけ書いてください。 {{input.event}}

「通知先へ送る」は 2 で登録した通知先を選び、「本文」に次のように書きます。AI の結果は / を打つと出る一覧から、「AI で生成」のステップの text を選びます。

{{input.event.title}} (#{{input.event.number}})
{{AI の text を選ぶ}}
{{input.event.url}}

差し込む項目は、届く内容に必ずあるものだけにしてください。無い項目を指定すると、ステップは空のまま送らずに失敗します。Pull Request Event の description は必ず入るとは限らないので、上の例では全体の {{input.event}} ごと AI に渡しています。

チャットで作るなら、「ワークフローを作って。入力は event(項目の組)。AI で生成で input.event を 2 文に要約し、通知先『開発チャンネル』へ送る」のように頼みます。下書きができたら、内容を確認してから次へ進みます。

5. 開いたときだけ通知する

Pull Request Event は更新でも届くので、開いた PR だけを通知したいときは、2 つのステップを「条件分岐」の中へ入れます。「条件を追加」で、{{input.event.action}} が opened と「等しい」を指定します。opened は GitHub の Webhook の表記です。最初の 1 件で実際の値を確認してください。

6. 公開してトリガーを付ける

「保存」のあと、「バージョン」のタブで「バージョン N を公開」を押します。トリガーで動くのは公開したバージョンだけです。

「トリガー」のタブで「サービス連携を追加」を押します。「どのサービスを監視するか」で GitHub の接続を選び、「どうなったら動かすか」で Pull Request Event を選んで、「絞り込み」にリポジトリの持ち主(owner)と名前(repo)を入れます。

7. 試す

テスト用の PR を開きます。「実行」のタブの「最近の実行」に「出来事で起動」の行が増え、各ステップの入力と出力が読めます。ここで event に何が入っているかを確認できます。

動かないとき

  • 「どうなったら動かすか」が押せない:先に接続を選びます。接続の一覧が空なら、「コネクタ」で GitHub がまだ接続されていません
  • トリガーを登録できない、登録しても届かない:接続したアカウントに、そのリポジトリの管理者権限があるかを確認します。権限を持てないときは、見に行く方式の Pull Request Created に変えてください
  • 「最近の実行」に行が増えない:公開を忘れていないかを確認します。下書きのままだとトリガーでは実行されません
  • 「通知先へ送る」が失敗する:「通知先」の行に理由が出ます。「宛先の URL が見つかりません。URL を確かめてください(404)」なら、Slack 側で URL が無効になっています

よくある質問

マージされたときだけ通知できますか

GitHub の Webhook では、マージされた PR は action が closed で、merged が true になります。ただし Pull Request Event の項目一覧に merged は載っていないため、closed だけでは「マージせずに閉じた」場合と区別できない可能性があります。最初の 1 件の入力を見て判断してください。

複数のリポジトリをまとめて通知できますか

Pull Request Event はリポジトリごとにトリガーを登録します。Pull Request Created は repo を空にすると、接続したアカウントが読めるリポジトリ全体が対象になり、owner で組織に絞ることもできます。有効にできるサービス連携は 20 個です。

CI の失敗も通知できますか

「GitHub Workflow Run State Changed」(GITHUB_WORKFLOW_RUN_STATE_CHANGED_TRIGGER)は実行の ID(run_id)が必須で、1 回の実行だけを監視する出来事です。リポジトリ全体の CI の失敗を知らせる用途には向きません。公式アプリの /github subscribe owner/repo workflows を使ってください。

関連する使い方

出典

関連する機能AIでワークフロー自動化 —— 定型業務を決めた順にSamurai App のワークフローは、書いたとおりの順に必ず動くステップの並びです。AI の判断、承認待ち、外部サービスの操作を 1 本にまとめ、定期実行や外部からの起動で定型業務を自動化します。

ほかの自動化の例

Slack の連携と自動化の方法をすべて見る

活用術の記事一覧へ

日々の仕事が集まり、つながり、会社の力になる。

資料請求Samurai App を開く

デモを見る資料請求