🥴

パッケージ更新とかの周知めんどいからSlack通知で自動化した

2024/01/14に公開

はじめに

この記事では、GitHub Actionsを使って、Dockerのイメージなどの変更やパッケージ管理ファイルの変更などがmainブランチにマージされたときに、他の開発者にnpm installお願いします〜!みたいな周知を毎回するのめんどくなったので、それを自動的にSlack通知して周知を自動化する方法を紹介します。
これにより、周知忘れによるあれっ?ここなぜか動かないんですが、、、わかりますか?みたいなこともなくそうと思います!
めっちゃシンプルに書いていきます。

実施内容

GitHub ActionsとSlackのWebhookを使用して、以下のような例のファイルの変更コミットをmainのブランチにマージされたときに検知し、npm installお願い〜みたいなメッセージをSlackチャンネルに通知して周知するようにします。

  • composer.jsonとcomposer.lockの変更
    • composer installお願いします〜を自動化できます。
  • package.jsonとpackage-lock.json
    • npm installお願いします〜みたいなの自動化できます。
  • docker系ファイル
    • ビルドしなおしてください〜みたいな周知を自動化できます。
  • データベースのマイグレーションとシーダーファイル
    • migrate(Laravelならseed)しなおしてください〜を自動化できます。

準備

この設定を行うには、以下のものが必要です。

  • GitHubリポジトリ
  • Slackワークスペース
  • SlackのWebhook URL
    • こちら準備する手順は後述

実装手順

SlackのWebhook URLを取得する

  1. Slackアプリで、通知を送信したいチャンネルを開きます。
  2. チャンネル名の右側にある矢印アイコンをクリックします。
  3. 「インテグレーション」のセクションで「アプリを追加する」をクリックします。
  4. 「アプリを検索」ボックスに「Incoming WebHooks」を入力し、結果から選択します。
  5. 「Add to Slack」ボタンをクリックします。
  6. 「Post to」ドロップダウンメニューから通知を送信したいチャンネルを選択します。
  7. 「Add Incoming WebHooks integration」ボタンをクリックします。
    ※Webhook URLをコピーしておきます。

GitHubリポジトリの設定を開く

  1. Secretsタブを開きます。
  2. New repository secretボタンをクリックします。
  3. Nameに任意の名前を入力し、Valueに先ほどコピーしたWebhook URLを貼り付けます。

GitHub Actionsのワークフローファイルを作成する

  1. .github/workflowsディレクトリに新しいYAMLファイルを作成します。
  2. 以下の例のようにワークフローファイルを設定します。
    • これをcomposerバージョンとかDockerバージョンで複数ファイルももちろん作成することもできる
name: "Notify npm package change"

on:
  push:
    paths:
      - "front/package.json"
      - "front/package-lock.json"
    branches:
      - main

jobs:
  notify_slack:
    runs-on: ubuntu-latest
    steps:
      - name: Notify Slack
        uses: rtCamp/action-slack-notify@v2
        env:
          SLACK_WEBHOOK: ${{ secrets.SLACK_WEBHOOK_URL_EXEC_CMD }}
          SLACK_COLOR: "warning"
          SLACK_MESSAGE: |
            *npmパッケージの変更が検知されました*
            最新のmainブランチにて以下のコマンドの実行をお願いします:
            ```
            docker-compose exec ◯◯ npm install
            ```
          SLACK_USERNAME: Github Actions
          SLACK_ICON_EMOJI: ":bell:"

結果

これで、今回の説明だとフロントのパッケージ管理ファイルなどが変更されたときに、自動的にSlackに通知されるようになりますので、適当にテストで確認してみてください〜!
これにより、他の開発者が最新の変更を迅速に把握することができるかつ、周知漏れによる時間ロスなどもなくすることができるかと思います。

終わりに

GitHub ActionsとSlackのWebhookを使って、パッケージ管理やDockerなどのファイルの変更を自動的に通知することで、いちいち面倒な周知を永久に自動化できます!

参考

https://docs.github.com/en/actions

https://api.slack.com/messaging/webhooks

Discussion