0Pricing
AI Agents · レッスン

Slack Bolt SDKの基礎

アプリの初期化、ボットトークン、Socket ModeとHTTPの違い、イベント購読を学びます。

「Slack Bolt SDKの基礎」はCoddyKit上の無料AI Agentsレッスンです。 これはレッスン1/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはAI Agents学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 AI Agentsコースには全4レッスンが含まれています。

エージェント開発にSlack Boltを使う理由

Slack Boltは、Slackアプリを構築するための公式Python SDKです。OAuth、イベントルーティング、ミドルウェア、リクエストとレスポンスのライフサイクルを処理するため、エージェントはHTTP処理ではなくビジネスロジックに集中できます。BoltはSocket Mode(WebSocket)とHTTP Modeの両方をサポートしています。

# Install Slack Bolt
# pip install slack-bolt

# Slack Bolt handles:
# - Event subscriptions (messages, mentions, reactions)
# - Slash commands (/summarize, /ask)
# - Interactive components (buttons, modals, select menus)
# - Shortcuts (global and message shortcuts)
# - OAuth 2.0 for multi-workspace apps
# - Request signature verification (security)

print('Slack Bolt is the official Python SDK for Slack apps')

Bot TokenとSigning Secret

Slackアプリには2つの認証情報が必要です。1つはAPI呼び出しやメッセージ投稿に使うBot Token(xoxb-で始まります)、もう1つは受信イベントが本当にSlackから送信されたものかを検証するSigning Secretです。どちらもSlackアプリの設定ダッシュボードで確認できます。

import os
from slack_bolt import App

# Load credentials from environment variables
# Never hardcode tokens!
BOT_TOKEN = os.environ['SLACK_BOT_TOKEN']        # xoxb-...
SIGNING_SECRET = os.environ['SLACK_SIGNING_SECRET']  # hex string

# Initialize the Bolt app
app = App(
    token=BOT_TOKEN,
    signing_secret=SIGNING_SECRET
)

print('Slack Bolt app initialized')
print(f'Bot token prefix: {BOT_TOKEN[:10]}...')

必要なBot Tokenスコープ

Slackアプリでは、OAuthスコープによってボットが実行できる操作を定義します。Slack AppダッシュボードのOAuth & Permissions → Scopes → Bot Token Scopesでスコープを追加してください。AIエージェントボットでよく使うスコープは次のとおりです。

  • chat:write — メッセージを投稿
  • app_mentions:read — @メンションを受信
  • channels:history — チャンネルのメッセージを読み取り
  • commands — スラッシュコマンドを受信
  • im:write — ダイレクトメッセージを送信
# Required scopes for a typical AI agent bot:
# - chat:write          → post messages to channels
# - app_mentions:read   → receive @bot mentions
# - channels:history    → read message history
# - channels:read       → list channels
# - commands            → handle slash commands
# - im:write            → send DMs
# - im:read             → receive DMs
# - users:read          → get user info (name, email)

# Add these in Slack App settings:
# https://api.slack.com/apps -> Your App -> OAuth & Permissions

print('Configure scopes in Slack App dashboard before installing')

Socket ModeとHTTP Modeの比較

Socket Modeは永続的なWebSocketでSlackに接続するため、公開URLは必要ありません。開発や社内ツールに最適です。一方、HTTP Modeでは、SlackがイベントをPOSTする公開HTTPSエンドポイントが必要です。本番アプリや複数ワークスペースへのインストールにはHTTP Modeを使用します。

# SOCKET MODE (development / internal tools):
# - No public URL needed
# - Uses an App-Level Token (xapp-...)
# - Great for local development
from slack_bolt.adapter.socket_mode import SocketModeHandler

APP_TOKEN = os.environ['SLACK_APP_TOKEN']  # xapp-...
handler = SocketModeHandler(app, APP_TOKEN)

# handler.start()  # blocks and handles events

# HTTP MODE (production):
# - Requires public HTTPS URL configured in Slack app settings
# - Works with Flask, FastAPI, etc.
from slack_bolt.adapter.flask import SlackRequestHandler
from flask import Flask, request

flask_app = Flask(__name__)
slack_handler = SlackRequestHandler(app)

print('Socket Mode: dev/internal; HTTP Mode: production')

Appの初期化とSocket Modeの開始

Socket Modeで動作する最小構成のSlack Boltアプリでは、Appを作成し、少なくとも1つのハンドラーを登録してからSocketModeHandlerを起動します。ハンドラーはSlackのイベント基盤に接続し、プロセスを停止するまで接続を維持します。

import os
from slack_bolt import App
from slack_bolt.adapter.socket_mode import SocketModeHandler

app = App(
    token=os.environ['SLACK_BOT_TOKEN'],
    signing_secret=os.environ['SLACK_SIGNING_SECRET']
)

@app.event('app_mention')
def handle_mention(event, say):
    user = event['user']
    text = event['text']
    say(f'Hi <@{user}>! You said: {text}')

# Start the app
if __name__ == '__main__':
    handler = SocketModeHandler(
        app,
        os.environ['SLACK_APP_TOKEN']
    )
    handler.start()  # blocks until process is killed

ngrok(HTTP Mode)でのテスト

HTTP Modeで開発する場合は、ngrokを使ってローカルサーバーをインターネットに公開します。ngrok http 3000を実行して公開HTTPS URLを取得し、SlackアプリのEvent SubscriptionsとSlash CommandのURLがそのURLを指すように更新してください。

# HTTP mode setup with Flask:
from flask import Flask, request
from slack_bolt import App
from slack_bolt.adapter.flask import SlackRequestHandler
import os

app = App(
    token=os.environ['SLACK_BOT_TOKEN'],
    signing_secret=os.environ['SLACK_SIGNING_SECRET']
)

@app.event('app_mention')
def handle_mention(event, say):
    say('Hello from HTTP mode!')

flask_app = Flask(__name__)
handler = SlackRequestHandler(app)

@flask_app.route('/slack/events', methods=['POST'])
def slack_events():
    return handler.handle(request)

# Run: python app.py
# In another terminal: ngrok http 3000
# Set https://abc123.ngrok.io/slack/events as your Request URL in Slack

Socket Mode用App-Level Token

Socket Modeには、connections:writeスコープを持つ追加のApp-Level Token(xapp-で始まります)が必要です。これはBot Tokenとは別のものです。Slack App設定のBasic Information → App-Level Tokensで生成してください。

# App-Level Token setup:
# 1. Go to https://api.slack.com/apps -> Your App
# 2. Click 'Basic Information'
# 3. Scroll to 'App-Level Tokens'
# 4. Click 'Generate Token and Scopes'
# 5. Name it 'socket-mode-token'
# 6. Add scope: connections:write
# 7. Click 'Generate'
# 8. Copy the xapp-... token

# In your .env file:
# SLACK_BOT_TOKEN=xoxb-...
# SLACK_SIGNING_SECRET=abc123...
# SLACK_APP_TOKEN=xapp-...

from slack_bolt.adapter.socket_mode import SocketModeHandler
import os

handler = SocketModeHandler(
    app=app,
    app_token=os.environ['SLACK_APP_TOKEN']  # xapp-...
)
print('App-Level Token required for Socket Mode')

Boltミドルウェア

Boltはmiddlewareをサポートしています。これは、すべてのイベントハンドラーの前に実行される関数です。ロギング、認証、レート制限、ユーザーデータによるイベントの拡張などにミドルウェアを使用します。next()を呼び出すと、次のミドルウェアまたはハンドラーに制御を渡せます。

from slack_bolt import App
import time
import logging

app = App(
    token=os.environ['SLACK_BOT_TOKEN'],
    signing_secret=os.environ['SLACK_SIGNING_SECRET']
)

logger = logging.getLogger(__name__)

# Request logging middleware
@app.middleware
def log_request(logger, body, next):
    event_type = body.get('event', {}).get('type', 'unknown')
    start = time.time()
    logger.info(f'Incoming event: {event_type}')
    next()  # must call next() to continue
    elapsed = time.time() - start
    logger.info(f'Handled {event_type} in {elapsed:.2f}s')

print('Middleware runs before every event handler')

Boltでのエラー処理

@app.errorでグローバルエラーハンドラーを登録し、イベントハンドラーで処理されなかった例外を捕捉します。これによりアプリのクラッシュを防ぎ、エラーをログに記録したり、監視用チャンネルに通知したり、ユーザーにエラーメッセージを返したりできます。

from slack_bolt import App
import traceback

app = App(
    token=os.environ['SLACK_BOT_TOKEN'],
    signing_secret=os.environ['SLACK_SIGNING_SECRET']
)

@app.error
def custom_error_handler(error, body, logger):
    logger.error(f'Error handling event: {error}')
    logger.error(traceback.format_exc())

    # Try to notify the user who triggered the error
    event = body.get('event', {})
    channel = event.get('channel')
    if channel:
        app.client.chat_postMessage(
            channel=channel,
            text='Sorry, I encountered an error. The team has been notified.'
        )

print('Global error handler prevents unhandled crashes')

Slack Web APIクライアントの使用

app.clientプロパティを使うと、イベントハンドラーで扱われていない操作についてSlack Web APIに直接アクセスできます。メッセージの投稿、ファイルのアップロード、チャンネルへのユーザー招待、チャンネル履歴のプログラムによる取得などに使用します。

from slack_bolt import App

app = App(
    token=os.environ['SLACK_BOT_TOKEN'],
    signing_secret=os.environ['SLACK_SIGNING_SECRET']
)

# Use app.client for direct API calls
def post_to_channel(channel_id, text):
    result = app.client.chat_postMessage(
        channel=channel_id,
        text=text
    )
    print(f'Message posted: ts={result["ts"]}')
    return result

# Get channel list
def list_channels():
    result = app.client.conversations_list(
        types='public_channel',
        limit=100
    )
    channels = result['channels']
    print(f'Found {len(channels)} public channels')
    return channels

# Look up user info
def get_user(user_id):
    result = app.client.users_info(user=user_id)
    return result['user']

環境設定チェックリスト

Slackボットを稼働させる前に、次の設定チェックリストを確認して、正しく構成されていることを確かめてください。

  • 環境変数にBot TokenとSigning Secretを設定
  • Slack Appダッシュボードで必要なスコープを追加
  • イベントサブスクリプションを有効化(app_mention、message.imなど)
  • Socket Modeを有効化(またはHTTP Mode用の公開URLを設定)
  • ワークスペースにアプリをインストール(OAuthフローを完了)
import os
from slack_bolt import App

def verify_slack_setup():
    required_env = [
        'SLACK_BOT_TOKEN',
        'SLACK_SIGNING_SECRET',
        'SLACK_APP_TOKEN'
    ]
    missing = [var for var in required_env if not os.environ.get(var)]
    if missing:
        raise EnvironmentError(f'Missing env vars: {missing}')

    token = os.environ['SLACK_BOT_TOKEN']
    if not token.startswith('xoxb-'):
        raise ValueError('SLACK_BOT_TOKEN must start with xoxb-')

    app_token = os.environ['SLACK_APP_TOKEN']
    if not app_token.startswith('xapp-'):
        raise ValueError('SLACK_APP_TOKEN must start with xapp-')

    print('Slack environment setup looks correct!')

verify_slack_setup()

クイックチェック: Socket ModeとHTTP Modeの比較

Slack Boltのデプロイモードについての理解度を確認しましょう。

Slack Boltの基本まとめ

BoltでSlackボットを構築するための基礎が身に付きました。

  • App(token, signing_secret) — 環境変数の認証情報でBoltアプリを初期化
  • Bot Token(xoxb-)はAPI呼び出しに使用し、App-Level Token(xapp-)はSocket Modeに使用
  • Socket Mode — WebSocketを使用し、公開URLが不要。開発や社内ツールに最適
  • HTTP Mode — 公開HTTPSエンドポイントが必要。本番アプリや複数ワークスペースのアプリに必須
  • Scopes — Slack Appダッシュボードで設定し、必要なものだけを追加
  • Middlewareと@app.error — ロギング、検証、エラー処理に使用

よくある質問

「Slack Bolt SDKの基礎」レッスンは無料ですか?

はい。「Slack Bolt SDKの基礎」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、AI Agentsコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 AI Agentsコースには全4レッスンが含まれています。

「Slack Bolt SDKの基礎」で何を学びますか?

アプリの初期化、ボットトークン、Socket ModeとHTTPの違い、イベント購読を学びます。 ブラウザで直接実行するハンズオンコードでAI Agentsを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

AI Agentsを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのAI Agentsは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン1/4です。

「Slack Bolt SDKの基礎」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このAI Agentsレッスンでコードを書いて実行できますか?

はい。すべてのAI Agentsレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. Slack Bolt SDKの基礎
  2. イベントとスラッシュコマンドの受信
  3. メッセージとリッチブロックの送信
  4. チーム通知ボットの構築
← AI Agentsに戻る