Claude Codeで作る実装事例

Claude Code で構築する Slack 連携 ChatBot 実装例

2026-06-04 読了10分 113PV
Claude Code で構築する Slack 連携 ChatBot 実装例

社内向け Slack ChatBot は、Claude を業務で活用する最も実用的な入口の一つでございます。本記事では、Claude Code を使って Slack ChatBot を最短構築する具体的手順を、実コード付きで解説いたします。

この記事でわかること

  • Slack ChatBot の構成と必要なAPI/ライブラリ
  • Slack App の作成と権限設定
  • Bolt for Python による実装コード
  • Claude API との連携(会話履歴を保持)
  • 本番運用のためのデプロイ構成

目次

  1. システム構成の全体像
  2. Slack App の作成と権限設定
  3. Python 環境とライブラリ準備
  4. Bolt for Python による実装コード
  5. Claude API 連携(会話履歴対応)
  6. デプロイと運用
  7. まとめ

システム構成の全体像

本記事で構築する Slack ChatBot の構成は次の通りでございます。

[ユーザー (Slack)]
       ↓ メンション or DM
[Slack App (Webhook)]
       ↓ POST
[Python サーバー (Bolt)]
       ↓ Claude API 呼び出し
[Claude (Sonnet 4.6)]
       ↓ 応答
[Python サーバー]
       ↓ Slack API
[Slack に応答投稿]

Slack App の Socket Mode を使うと、外部からアクセス可能なサーバーが不要になり、社内ネットワーク内のサーバーで完結できます。セキュリティ要件が厳しい社内環境でも導入しやすい設計です。

Slack App の作成と権限設定

STEP 1: Slack App を作成

  1. https://api.slack.com/apps から「Create New App」を選択
  2. 「From scratch」 → App 名と Workspace を指定
  3. 「Socket Mode」を有効化(External URL 不要にする)

STEP 2: 必要な OAuth Scope を設定

「OAuth & Permissions」で次のスコープを追加します。

  • app_mentions:read – メンションを受信
  • chat:write – メッセージを投稿
  • im:history – DM を受信
  • im:read
  • im:write

STEP 3: Event Subscriptions を有効化

「Event Subscriptions」で次のイベントを購読します。

  • app_mention – チャンネル内でメンションされたとき
  • message.im – DM が届いたとき

STEP 4: トークンを取得

「Install App」で Workspace にインストールし、次の2種類のトークンを取得します。

  • Bot User OAuth Tokenxoxb-で始まる)
  • App-Level Tokenxapp-で始まる、Socket Mode 用)

Python 環境とライブラリ準備

pip install slack-bolt anthropic python-dotenv

.env ファイルに、各種トークンを保存します。

SLACK_BOT_TOKEN=xoxb-...
SLACK_APP_TOKEN=xapp-...
ANTHROPIC_API_KEY=sk-ant-...

Bolt for Python による実装コード

最小実装のコードは次の通りです。

import os
from slack_bolt import App
from slack_bolt.adapter.socket_mode import SocketModeHandler
import anthropic
from dotenv import load_dotenv

load_dotenv()
app = App(token=os.environ["SLACK_BOT_TOKEN"])
claude = anthropic.Anthropic()

# メンションを受信
@app.event("app_mention")
def handle_mention(event, say):
    user_text = event["text"]
    user_id = event["user"]

    response = claude.messages.create(
        model="claude-sonnet-4-6",
        max_tokens=2000,
        system="あなたは社内のサポートAIです。簡潔かつ正確に応答してください。",
        messages=[{"role": "user", "content": user_text}]
    )

    reply = response.content[0].text
    say(f"<@{user_id}> {reply}")

# DM を受信
@app.event("message")
def handle_dm(event, say):
    if event.get("channel_type") != "im":
        return
    if event.get("bot_id"):  # ボット自身のメッセージは無視
        return

    user_text = event["text"]
    response = claude.messages.create(
        model="claude-sonnet-4-6",
        max_tokens=2000,
        messages=[{"role": "user", "content": user_text}]
    )
    say(response.content[0].text)

if __name__ == "__main__":
    SocketModeHandler(app, os.environ["SLACK_APP_TOKEN"]).start()

このコードを python app.py で起動するだけで、Slack 上でメンションまたは DM すると Claude が応答する状態になります。

Claude API 連携(会話履歴対応)

業務利用では、「直前のやり取りを覚えている」会話履歴対応が必須です。Slack のスレッドを使った会話履歴管理の実装例を示します。

conversation_history = {}  # thread_ts → messages の辞書

@app.event("app_mention")
def handle_mention_with_history(event, say, client):
    user_text = event["text"]
    user_id = event["user"]
    thread_ts = event.get("thread_ts", event["ts"])

    # スレッドの過去メッセージを取得
    if thread_ts not in conversation_history:
        thread_messages = client.conversations_replies(
            channel=event["channel"],
            ts=thread_ts
        )["messages"]

        conversation_history[thread_ts] = [
            {"role": "assistant" if msg.get("bot_id") else "user",
             "content": msg["text"]}
            for msg in thread_messages
        ]

    # 今回のユーザーメッセージを追加
    conversation_history[thread_ts].append({
        "role": "user", "content": user_text
    })

    response = claude.messages.create(
        model="claude-sonnet-4-6",
        max_tokens=2000,
        system="あなたは社内のサポートAIです。",
        messages=conversation_history[thread_ts]
    )

    reply = response.content[0].text

    # 履歴を更新
    conversation_history[thread_ts].append({
        "role": "assistant", "content": reply
    })

    say(text=reply, thread_ts=thread_ts)

本番運用では、会話履歴の保存先を Redis や PostgreSQL に切り替え、サーバー再起動時にも履歴を保持する設計が望ましいです。

デプロイと運用

デプロイ先の選択

Socket Mode 利用時は外部から到達可能なサーバーが不要なため、選択肢が広がります。

  • 社内サーバー: セキュリティ重視、ネットワーク内で完結
  • VPS(ConoHa, Vultr 等): 月額数千円から、運用しやすい
  • AWS EC2 / GCP Compute: スケール対応が容易
  • Cloud Run / Lambda: 利用量が少ない場合のコスト最適

プロセス管理

systemd または supervisor で常時起動状態にし、クラッシュ時の自動再起動を設定します。

ログとモニタリング

応答時間、エラー率、API コストを日次でログ集計し、異常を早期検知できる体制を整えます。Claude API 側のレスポンスに含まれる usage 情報をログに残すと、月次コスト把握が容易です。

まとめ

Slack 連携 ChatBot は、Claude API 業務導入の入門として最適でございます。本記事の実装をベースに、自社業務に合わせた拡張が可能です。

  • 社内ナレッジ検索(RAG 連携)
  • 業務システムへのアクション実行(Tool Use)
  • 会議室予約・休暇申請の自動化
  • 営業支援(提案文の下書き生成)

Claude Code を使うと、上記のような拡張も対話的に実装でき、エンジニア1人で短期間に完成させられる規模感でございます。初期実装は1〜2週間、月額運用コストは1万円前後から始められるため、まず1機能から PoC してみるのが現実的なアプローチです。

Slack ChatBot の構築や、業務に合わせたカスタマイズについてはお気軽にご相談くださいませ。

アサヒリンクスへの無料相談はこちら

「何から始めればいいか分からない」段階からでも、お気軽にご相談ください。
まずは、お話を聞かせていただくだけでも大丈夫です。

無料で相談する

この記事をシェアする

一覧へ戻る