【Github+Slack連携】Issue操作で簡単Slack通知

## はじめに
GithubのWorkflowシステム使ったことありますか？

Githubの操作をトリガーにして、いろんなことが簡単にできるよ。というテーマでお送りしたいと思っています。

今回は、Issue操作イベントでのSlack通知をやってみようと思います。

通知のイメージはこんな感じです。

![スクリーンショット 2024-06-13 4.34.07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3334980/436a26d3-b0f0-3ac3-0f52-7db0d9909dd5.png)

## 使用するツール/拡張機能
- Slack
  - Incoming Webhooks
- Github
  - Workflow/Actions
  - [ravsamhq/notify-slack-action@v2](https://github.com/marketplace/actions/notify-slack-action)

## 手順

### #001. Slackの準備
#### 1. Slackワークスペースを用意。
ない方は新規で作成してください。
（本記事の内容はすべて無料で試すことができます。）

#### 2. Incoming Webhooksアプリを追加
Slack/ワークスペース上でアプリの追加を行います。

![スクリーンショット 2024-06-13 4.09.35.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3334980/feb16396-d47f-5b3f-d251-3c6789567f03.png)

「Slackに追加」ボタンを選択してください。

#### 3. Webhook URLの登録
Webhookアプリの設定画面が開くので、通知を送りたいチャンネルを選択します。

![スクリーンショット 2024-06-13 4.11.01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3334980/00d5bf2a-5a70-b3a2-8222-d17bedc87fe5.png)

保存後に、URLが表示されますのでメモしてください。

Slack側の設定は以上です。

### #002. Githubリポジトリの準備
#### 1. Githubリポジトリを用意
リポジトリを作成してください。（既存リポジトリでも可）

#### 2. Secretsの登録（Webhook URLの登録）
Githubのリポジトリの`Settings`タブ内のメニュー内に`Security`という項目を押下し、`Actions secrets and variables`の設定を行います。

`Repository secrets`を追加します。
ラベル名に、`SLACK_WEBHOOK_URL`を入力してください。（このラベル名を実装で使います）
Value名に、先程メモしたURLを入力します。

![スクリーンショット 2024-06-13 3.29.13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3334980/eddec759-4d13-38e9-f3dd-a5403fd1cb4a.png)

これでリポジトリのセットアップは完了です。

### #003. GitHub Actions - Workflowの作成
#### 1. ファイルの作成
`/.github/workflows/slack-notify-github-workflows.yml`ファイルを作成します。

#### 2. ワークフローの定義
以下サンプルコードををGit上にPushしてください。

```yml:slack-notify-github-workflows.yml
name: Notify Slack on Issue Activity

on:
  issues:
    types: [opened, edited, closed, reopened]

jobs:
  notification:
    runs-on: ubuntu-latest
    steps:
      - uses: ravsamhq/notify-slack-action@v2
        if: always()
        with:
          status: ${{ job.status }}
          notification_title: "{workflow} has {status_message}"
          message_format: "{emoji} *{workflow}* {status_message} in <{repo_url}|{repo}>"
          footer: "Linked Repo <{repo_url}|{repo}> | <{workflow_url}|View Workflow>"
        env:
          SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_URL }}
```

### #004. 動作確認
では、Issueを起票してみましょう。
サンプルコードでは、Issueの「起票・編集・クローズ・再オープン」がトリガーで通知が飛ぶようになっています。（`on > issue > types`の箇所。）

Slackを開いて、↓↓ みたいになっていたら成功です。

![スクリーンショット 2024-06-13 3.42.44.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3334980/94036752-5d62-6cf9-e773-2c59fe42a9e2.png)

結構簡単ですよね。

## 少し解説
今回は[Notify Slack Action](https://github.com/marketplace/actions/notify-slack-action)を利用しました。

今回のサンプルでは、Minimalなものを用意しましたが、メッセージのフォーマットや、メンション設定、ステータスに基づいたアイコンのカスタマイズ設定が細かくできるようです。

もちろん、フォーマットで使用できるContextもたくさんあります。
```txt
{branch}
{branch_url}
{commit_url}
{commit_sha}
{emoji}
{repo}
{repo_url}
{status_message}
{run_url}
{job}
{workflow}
{workflow_url}
```

### デバッグ方法
Jobsに以下を登録してActionsを発火させてみてください。
```yaml
steps:
  - run: echo "${{ toJson(github) }}"
```
Actionsの実行結果を確認すると、通知に使用できるデータを確認することができます。

![スクリーンショット 2024-06-13 3.55.57.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3334980/e6e04352-d4b2-f0b8-fdcb-c3957b9b85bf.png)

例えば、Issueのタイトルを使いたいときは、こんな感じに指定すればいいかと思います。

```
message_format: "${{ github.event.issue.title }}"
```


## まとめ
今回は、Slackの拡張アプリWebhookを使ったGithubの通知Actionsを実装してみました。

## 参考
https://qiita.com/unsoluble_sugar/items/e42ac352400598a24915

https://zenn.dev/easy_easy/articles/298c9728e01819db9f50