Skip to content

ADR 0001: Slack 連携を Socket Mode に統一し Inngest を廃止する

この ADR は置換されました

前提としていた「Slack 連携は Socket Mode 統一」規約が noisy-crow-app の単一 Worker 化(HTTP Events API 移行・Container 常駐廃止)で変わったため、ADR 0006 で HTTP Events API + 単一 Worker 構成に置き換えた。Inngest 廃止の決定は 0006 に引き継がれている。

Context

移行元の tied-bot は Next.js の HTTP webhook (/api/slack/events) で Slack イベントを受け、非同期処理を Inngest に委譲していた。これは以下の依存・制約を持ち込む。

  • 公開 HTTP エンドポイント(署名検証・URL 公開・ngrok 等のトンネリング)が必要。
  • Inngest(外部 SaaS)への依存と、そのイベントキー / 署名鍵の管理。
  • Vercel ホスティング前提の構成。

一方 tied-workspace の既存規約は「Slack 連携は全て Socket Mode。HTTP webhook は使わない」であり、suteki-bot / apps/slack が Bolt Socket Mode コンテナとして稼働している。Cloudflare ファーストパーティで完結させる方針とも合致する。

Decision

  • Slack 連携は Bolt の Socket Mode (WebSocket) に統一する。公開 HTTP エンドポイントは作らない。
  • Inngest を廃止する。非同期処理は「コンテナ内処理」と「Cloudflare Queue + Consumer」に置き換える(詳細は ADR 0003)。
  • ホストは Cloudflare Containers(Bun ランタイム)。Worker shim + Durable Object のシングルトン構成(idFromName("singleton"))とし、suteki-bot の運用パターン(ヘルスサーバ先起動・起動リトライ・keepalive cron)を踏襲する。

Consequences

  • 良い点: 公開エンドポイント・署名検証・外部 SaaS(Inngest)が不要になり、運用面・セキュリティ面が単純化。既存 bot と同一の運用ノウハウを再利用できる。
  • 悪い点 / 注意: Socket Mode は同一トークンの多重接続で問題が出るため Container はシングルトン必須。Slack App に App-Level Token (SLACK_APP_TOKEN) の発行と Socket Mode 有効化が必要。長時間接続の安定運用のため keepalive cron とヘルスチェックが前提。
  • フォローアップ: Slack App 設定(Socket Mode ON、connections:write スコープ、App-Level Token 発行)を運用ドキュメントに追記する。

Alternatives

  • HTTP webhook を維持: Cloudflare Workers で受ける案。署名検証は可能だが、既存規約(Socket Mode 統一)から外れ、bot ごとに公開エンドポイントが増える。却下。
  • Inngest を継続利用: 外部依存と Vercel 前提を残すことになり「Cloudflare で完結」方針に反する。却下。