Slack の GitHub インテグレーションで GitHub Actions ワークフローのイベントを通知可能に

| 4 min read
Author: masahiro-kondo masahiro-kondoの画像

Slack の GitHub インテグレーションを使えば、PR(Pull Request) や issue のオープンや更新などのイベントを通知できます。PR に Slack からコメントすることも可能です。

GitHub + Slack

GitHub + Slack

先日、GitHub Actions ワークフローのイベントも通知できるようになったことが Changelog に流れていました。

GitHub Actions workflow notifications in Slack and Microsoft Teams | GitHub Changelog

これまではワークフローにサードパーティの Action を組み込んで実現していた部分ですので、気になる方も多いのではないでしょうか。

この記事では GitHub インテグレーションの導入、ワークフローイベント通知の登録と実際の使用感を見ていきます。

Information

Changelog には Microsoft Teams でも同様にワークフローイベントの通知が受けられるようになったことがアナウンスされています。この記事では Slack 通知について記述します。

GitHub リポジトリからの通知の種類

#

GitHub + Slack Integration の README に通知の種類や設定方法の詳細があります。

slack/README.md at main · integrations/slack

GitHub インテグレーションでは以下のイベント通知がデフォルトで有効になっています。

  • issues : issue のオープンとクローズ
  • pulls : PR の作成・マージ、ドラフト PR が "Ready for Preview" になった時
  • commits : デフォルトブランチ(通常は main) への新規コミット
  • releases : リリースの公開
  • deployments : (GitHub Actions による) デプロイ状態の更新

以下のイベント通知はデフォルトで無効になっています。なので今回の新機能であるワークフローイベント通知はデフォルトでは無効化されています。

  • workflows : GitHub Actions ワークフローの実行通知(今回の新機能)
  • reviews : PR レビュー
  • comments : PR と issue への新規コメント
  • branches : ブランチの作成と削除
  • commits:* : 全てのブランチに push された全てのコミット
  • +label:"your label" : issue、PR、コミット に付与されたラベルによるフィルター
  • discussions : ディスカッションの作成と回答

GitHub インテグレーションの導入

#

Slack 画面の左下 アプリを追加する から開始します。

アプリの追加

アプリ検索で GitHub を探して Slackに追加 をクリックします。

Slackに追加

Slack ワークスペースへのアクセスを許可します。

アクセスを許可

Slack 上で GitHub との DM が開きますので、Connect GitHub account をクリックします。

Connect GitHub accont on Slack

接続画面の Connect GitHub account をクリックします。

Connect GitHub account

表示される Verification Code をクリップボードにコピーします。

Verification Code

Slack の画面に戻って Enter code をクリックします。

Enter code

クリップボードにコピーしたコードを貼り付けて 送信 をクリックします。

Enter verification code

成功すると GitHub のメッセージがコマンドの使い方などのサンプルとともに表示されます。

Connection succeed

Slack チャネルを GitHub リポジトリにサブスクライブする

#

ここからは Slack のスラッシュコマンドを使用して設定を行います。

通知を受けたいチャネルに GitHub アプリを招待します。

invite @GitHub

GitHub added

/github subscribe <owner>/<repo> で通知を受けたいリポジトリにチャンネルをサブスクライブします。

subscribe

うまくいけば、デフォルトの issuespullsreleasesdeployments の通知がが有効になった旨のメッセージが表示されます。もちろん、イベントを個別に subscribe、unsubscribe できます。

リポジトリのワークフローイベントにサブスクライブする

#

では、GitHub Actions ワークフローのイベントにもサブスクライブしましょう。以下のようにすると、対象のリポジトリのワークフロートリガーイベントが通知されます。デフォルトで通知されるイベントは、pull_request です。

/github subscribe owner/repo workflows

通知をフィルターしたい場合、以下のようにフィルター条件を JSON 形式で指定します。

/github subscribe owner/repo workflows:{name:"your workflow name" event:"workflow event" branch:"branch name" actor:"actor name"}
  • name: ワークフロー名
  • event: ワークフローが起動される全てのイベント[1]
  • actor: ワークフローを起動、またはワークフローの実行責任を持つ人
  • branch: ワークフローが実行されるブランチ。PR イベントの時は PR のターゲットブランチ(デフォルトは main)が対象になる。

通常は PR 作成がトリガーになるため、フィルターはワークフロー名の指定だけで十分でしょう。README には書かれていませんでしたが、ワークフローを複数指定したい場合は、カンマ区切りで可能です。

/github subscribe owner/repo workflows:{name: "workflow-1,workflow2"}

ワークフローの通知を登録すると、デフォルトで有効化されている通知に加えワークフローの通知が有効化されたことがわかります。

ワークフロー通知を登録

利用イメージ

#

豆蔵デベロッパーサイトの運用チャネルを Slack に作り GitHub からの通知を流しています。ホスティングしている Netlify のビルド結果も連携しています。ワークフローの起動から、PR 作成からサイトのビルドまでの一連の動きが通知されます。通知には、ワークフローへのリンクやトリガーになったコミットへのリンク、Checks(ビルドやテスト結果など) の状況も記載されているので GitHub のワークフローの画面を見に行く必要もありません。失敗した場合は、Slack 画面からリランも可能です。

デベロッパーサイトのSlackチャネルへの通知

ワークフロー起動と実行結果の投稿はスレッドになりますのでトレースしやすくなっています。途中結果はスレッド内だけ、結果はチャネルにも投稿といった具合で Slack に最適化されていますね。

スレッド

まとめ

#

Slack の GitHub インテグレーションに追加されたワークフローイベント通知の設定方法と利用イメージを紹介しました。

今年の2月の記事「GitHub Actions ワークフローにおけるジョブ制御」では、Slack への通知のためのジョブを作り、先行ジョブの成功・失敗を保持してメッセージを出し分けるようにしていました。さらに通知のための Action を使用していました[2]
通知したい内容にもよりますが、結果通知だけならこのようなジョブは不要で、Slack のインテグレーションを使う方が楽で使いやすくなりました。


  1. 全てのイベントは https://docs.github.com/en/actions/using-workflows/events-that-trigger-workflows#available-events に記述されています。 ↩︎

  2. GitHub の Marketplace には ワークフローから Slack 通知するための Action が記事執筆時点で26個もありました。 ↩︎

豆蔵デベロッパーサイト - 先週のアクセスランキング
  1. 基本から理解するJWTとJWT認証の仕組み (2022-12-08)
  2. Docker+Wasm で WASM をコンテナとして実行する (2023-01-25)
  3. 自然言語処理初心者が「GPT2-japanese」で遊んでみた (2022-07-08)
  4. 直感が理性に大反抗!「モンティ・ホール問題」 (2022-07-04)
  5. Nuxt3入門(第4回) - Nuxtのルーティングを理解する (2022-10-09)
  6. AWS認定資格を12個すべて取得したので勉強したことなどをまとめます (2022-12-12)
  7. Jest再入門 - 関数・モジュールモック編 (2022-07-03)
  8. ORマッパーのTypeORMをTypeScriptで使う (2022-07-27)
  9. Nuxt3入門(第8回) - Nuxt3のuseStateでコンポーネント間で状態を共有する (2022-10-28)
  10. Nuxt3入門(第1回) - Nuxtがサポートするレンダリングモードを理解する (2022-09-25)