株式会社renue
AI導入・DXの悩みをプロに相談してみませんか?
AIやDXに関する悩みがありましたら、お気軽にrenueの無料相談をご利用ください。 renueのAI支援実績、コンサルティングの方針や進め方をご紹介します。
AIエージェントをSlackから呼び出す——「@メンション一発」で開発タスクを実行させる設計
「Slackで@メンションしたら、AIエージェントが自律的にコードを書いて、PRを作成して、結果をSlackに返してくれる」——2026年、この夢は現実になっています。
しかし、Slackとのintegrationは単にAPIを繋ぐだけではありません。認証の設計、イベントの重複排除、VM上のエージェント制御、セキュリティ——企業環境で安全に運用するには、体系的な設計が必要です。
本記事では、AIコーディングエージェントをSlack経由で起動・制御するための設計パターンを、実装レベルで解説します。
アーキテクチャ概要
ユーザー(Slack) │ @メンション ↓ Slack Events API(Socket Mode) │ app_mention イベント ↓ FastAPIバックエンド │ ①Slack user ID取得 │ ②email照合→employee特定 │ ③Agent Run作成+session_id発番 ↓ VM上のClaude Code │ session_id + API Key で認証 │ MCPツール経由でバックエンドAPI呼び出し ↓ 結果をSlackスレッドに返信
Socket Mode vs HTTP Webhook
| 方式 | メリット | デメリット | 推奨用途 |
|---|---|---|---|
| Socket Mode | 公開URLが不要、ファイアウォール内で動作 | 常時接続が必要 | 閉域環境・開発環境 |
| HTTP Webhook | スケーラブル、ステートレス | 公開エンドポイントが必要 | 本番の高トラフィック環境 |
閉域環境やIP制限がある場合はSocket Modeが最適です。公開HTTPエンドポイントを設ける必要がないため、ネットワークセキュリティの要件を満たせます。
認証フロー:Slack user → employee の変換
なぜ認証が重要か
「Slackでメンションされたら誰でもAIを使える」状態はセキュリティリスクです。誰がAIに指示したかを特定し、その人の権限に基づいてAIの操作範囲を制限する必要があります。
認証フローの設計
- Slack user ID取得:app_mentionイベントからSlack user IDを抽出
- email取得:Slack API(users.info)でSlack user IDからemailを取得
- employee特定:DBのemployeeテーブルでemail照合
- session_id発番:
secrets.token_urlsafe(16)でセキュアなsession_idを生成 - セッション保存:session_id + owner_user_id(employee.id)をDBに保存
VM上のAIエージェントからの認証
VM上のClaude Codeは、共通API Key + session_id の2つのヘッダーでバックエンドAPIを呼び出します。
X-API-Key: {共通のSERVICE_API_KEY}
X-Session-Id: {セッション固有のsession_id}
バックエンドはsession_idからowner_user_idを引き、そのemployeeのroleに基づいて認可を行います。これにより、AIが実行する操作は全て「誰の指示か」が追跡可能になります。
Webhook統一エンドポイント設計
Slack Appは1つのエンドポイントしかInteractivity URLを持てません。複数の処理(議事録のプロジェクト変更、承認フロー等)を1つのエンドポイントで振り分ける設計が必要です。
POST /api/webhooks ↓ 1. 署名検証(Slack Signing Secret) ↓ 2. ペイロード解析(form-data → JSON) ↓ 3. action_id抽出 ↓ 4. ルーティング ├ meeting_project_change → 議事録プロジェクト変更 ├ approval_approve → 承認処理 └ その他 → 「未対応のアクション」
action_idでバックエンドのルーティングを制御する設計により、処理を追加するたびにボットを作成する必要がなくなります。
イベント重複排除
Slackのイベントは再送される場合があります。同じメンションでAgent Runが二重に作成されないよう、重複排除が必要です。
対策
app_mentionイベントのみに絞る(message_changedなどは無視)- イベントIDの重複チェック(処理済みイベントをキャッシュ)
- Agent Run作成の冪等性を確保(同一メッセージに対して1 Runのみ)
セキュリティ設計
チャンネルアクセス制御
- チャンネル許可リスト:特定チャンネルからのメンションのみ受け付ける
- DM制御:DMからの起動を許可するか、チャンネルのみに限定するか
- レート制限:1ユーザーあたりの同時実行数を制限
操作権限のマッピング
認証で特定したemployeeのroleに基づいて、AIが実行できる操作を制限します。
| role | 許可される操作 |
|---|---|
| manager | 全エンドポイント |
| internal_user | プロジェクト配属済みのエンドポイント |
| external | 許可パスのみ |
プラットフォーム非依存のエージェント設計
コアのエージェントロジックはプラットフォーム非依存にすべきです。推論、意思決定、アクション実行のレイヤーは、リクエストがSlackから来たのかWebから来たのかを知る必要はありません。
┌─ Slack Adapter ─┐
│ 入力パース │
│ 出力フォーマット │
└──────┬──────────┘
↓
┌─ Core Agent ────┐
│ 推論・判断 │ ← プラットフォーム非依存
│ ツール実行 │
│ 結果生成 │
└──────┬──────────┘
↓
┌─ Slack Adapter ─┐
│ スレッド返信 │
│ リアクション追加 │
└─────────────────┘
この設計により、将来TeamsやDiscordにも同じエージェントロジックを展開できます。
実装のチェックリスト
| 領域 | チェック項目 |
|---|---|
| Slack App設定 | Bot Token Scopesが必要最小限に設定されているか |
| Socket Mode | App-Level Tokenが設定され、WebSocket接続が安定しているか |
| 認証 | Slack user → email → employee の変換が正しく動作するか |
| 認可 | employee.roleに基づく操作制限が全エンドポイントで機能するか |
| 重複排除 | 同一メンションでAgent Runが1回だけ作成されるか |
| Webhook | action_idルーティングが正しく振り分けられるか |
| 署名検証 | Slack Signing Secretで署名検証を実施しているか |
| セキュリティ | チャンネル許可リスト・レート制限が設定されているか |
| プラットフォーム分離 | コアロジックがSlack固有コードに依存していないか |
| end-to-end | Slack返信まで完了したことをログで確認できるか |
AIエージェントのSlack連携は、単なるボット開発ではありません。認証・認可・重複排除・セキュリティ・プラットフォーム分離——これらを設計段階で組み込むことで、企業環境で安全に運用できるAI Slack Botが完成します。
あわせて読みたい
- 5Sとは|整理・整頓・清掃・清潔・しつけの意味・目的・進め方を解説
- AIリードスコアリング実装ガイド【2026年版】— 4要素スコアリング×テリトリー管理×ステータス倍率の本番アーキテクチャ
- AIカスタマーサポート完全ガイド【2026年版】— RAG・チャットボット・有人連携の実装パターンとツール比較
関連記事
AI開発のご相談はrenueまで。

