コンテンツにスキップ

Slack 通知のセットアップ

GitHub Actions の実行結果を Slack の指定チャンネルへ投稿する仕組みのセットアップ手順。 一度設定すれば自動運用される。共通の Secret SLACK_WEBHOOK_URL を使う。

通知される対象

トリガー 通知内容 ワークフロー
モバイル OTA (EAS Update) 公開成功 Expo Updates URL + QR コード .github/workflows/mobile-update.yml

ℹ️ Web (Cloudflare Pages) / API (Cloudflare Workers) のデプロイは通知対象外。 Web の URL は Cloudflare ダッシュボードの Deployments、API の URL は GitHub Actions の step summary で確認する。 (以前は notify-cf-pages.yml が CF Pages の Preview URL を Slack に投稿していたが、 運用不要になったため削除済み。)

セットアップ手順

Step 1: Slack に Incoming Webhook を作成

  1. ブラウザで https://api.slack.com/apps を開く
  2. Create New AppFrom scratch
  3. 入力:
    • App Name: waste-link deploy bot(任意)
    • Pick a workspace: 通知したい Slack ワークスペースを選択
  4. Create App をクリック
  5. 左メニュー FeaturesIncoming Webhooks を開く
  6. Activate Incoming WebhooksOn
  7. ページ下部の Add New Webhook to Workspace をクリック
  8. 投稿先チャンネルを選択(例: #waste-link-deploys のような専用チャンネル を事前に作っておくと整理しやすい)
  9. Allow をクリック
  10. 生成された Webhook URL (https://hooks.slack.com/services/T...) を コピー

💡 専用チャンネルにしておくと、通知頻度が高い時にメインの会話を汚さない。

Step 2: GitHub Secrets に登録

  1. https://github.com/kyoei-paper/waste-link/settings/secrets/actions
  2. New repository secret
  3. 入力:
    • Name: SLACK_WEBHOOK_URL
    • Secret: Step 1 でコピーした URL
  4. Add secret

Step 3: 動作確認

SLACK_WEBHOOK_URL を登録した状態で、モバイル OTA 更新 (mobile-update.yml。手動 dispatch または対象ブランチへの push)を実行する。 公開が完了すると Expo の Updates URL と QR コードが Slack に届く。

通知を一時的に止めたい場合

GitHub Secrets から SLACK_WEBHOOK_URL を削除する。 各ワークフローは SLACK_WEBHOOK_URL 未設定時に通知ステップを silent skip する (ジョブ本体は緑のまま)。完全に止めたい場合は Slack App 自体を Slack 側で削除する。

チャンネルを増やしたい / 振り分けたい場合

例: staging / production を別チャンネルにしたい

  1. Slack App で Webhook を 2 つ作成(チャンネル別)
  2. GitHub Secrets を 2 つ用意: SLACK_WEBHOOK_URL_STAGING / SLACK_WEBHOOK_URL_PRODUCTION
  3. ワークフローの webhook 値を出力変数で分岐:
    webhook: ${{ steps.env.outputs.name == 'production' && secrets.SLACK_WEBHOOK_URL_PRODUCTION || secrets.SLACK_WEBHOOK_URL_STAGING }}
    

トラブルシュート

症状 原因 / 対処
Slack に通知が来ない (1) Secrets に SLACK_WEBHOOK_URL が登録されているか確認(2) ワークフロー本体が緑になっているか確認(3) Slack App が削除されていないか
通知先チャンネルを変えたら届かなくなった Incoming Webhook は作成時のチャンネルに紐付き、後から変更不可。 Slack App の Incoming Webhooks で新チャンネル用 Webhook を「Add New Webhook to Workspace」で発行 → GitHub Secret SLACK_WEBHOOK_URL を新 URL に上書き。古い Webhook はそのページから Remove。下記「Webhook URL の検証」も参照
invalid_payload で通知失敗 Webhook URL が壊れている / App が無効化された。Slack App ページで Webhook を再確認・必要なら作り直し
ワークフロー自体は緑なのに Slack に来ない (1) 旧チャンネルに飛んでいる(2) Slack 側で App がチャンネルからキックされた、を疑う。下記「Webhook URL の検証」コマンドで切り分け
通知が遅延する Slack 側の WebSocket 接続遅延が主因。GitHub Actions のログでステップ自体の所要を確認

Webhook URL の検証コマンド

GitHub Secret に入っている Webhook URL がどのチャンネルに紐付いているか確認するシンプルな手段:

WEBHOOK="https://hooks.slack.com/services/T.../B.../..."   # 確認したい URL
curl -X POST -H 'Content-type: application/json' \
  --data '{"text":"waste-link webhook ping"}' "$WEBHOOK"
レスポンス 意味
ok URL は有効。Slack に飛んでいるが「想定したチャンネルではない」可能性あり(旧チャンネルを開いて見ること)
invalid_token / no_service URL が失効。Slack App ページから再発行
channel_not_found 紐付いたチャンネルが削除/アーカイブされた。新規 Webhook を発行
invalid_payload URL は有効だが payload 不正