PythonでSlack通知botを作ったら業務連絡が楽になった
Slack通知botを作ったきっかけ
毎朝、チームの担当タスクや期限が近いチケットを手動でSlackに投稿していました。「今日の担当タスク」「期限が3日以内のもの」を確認してコピペするだけで15分かかっていたので、Pythonで自動化することにしました。
Slack APIとPythonの組み合わせは想像以上に簡単で、半日で動くものが完成しました。この記事ではその手順を共有します。
Slack APIのセットアップ
1. Slack Appを作成する
Slack APIにアクセスし、「Create New App」→「From scratch」を選択。アプリ名とワークスペースを設定します。
2. Bot Tokenのスコープを設定する
「OAuth & Permissions」→「Scopes」→「Bot Token Scopes」に以下を追加します。
3. Botをインストールする
「Install to Workspace」でインストールし、Bot User OAuth Token(xoxb-で始まるトークン)を取得します。
4. チャンネルIDを確認する
通知を送りたいチャンネルを右クリック→「チャンネル詳細を表示」の最下部にチャンネルIDがあります。
Pythonでの実装
pip install slack-sdk python-dotenv
.envファイルにトークンを保存します。
SLACK_BOT_TOKEN=xoxb-xxxxxxxxxx
SLACK_CHANNEL_ID=C0XXXXXXXXXX
シンプルなテキスト通知
import os
from slack_sdk import WebClient
from slack_sdk.errors import SlackApiError
from dotenv import load_dotenv
load_dotenv()
client = WebClient(token=os.environ["SLACK_BOT_TOKEN"])
channel = os.environ["SLACK_CHANNEL_ID"]
def send_message(text: str) -> None:
try:
client.chat_postMessage(channel=channel, text=text)
except SlackApiError as e:
print(f"Slack APIエラー: {e.response['error']}")
send_message("おはようございます!今日もよろしくお願いします。")
Block Kitでリッチなメッセージを送る
Slackの「Block Kit」を使うと、ボタンや区切り線、コードブロックなどを含むリッチなメッセージが作れます。
from datetime import date
def send_daily_report(tasks: list[dict]) -> None:
today = date.today().strftime("%Y年%m月%d日")
blocks = [
{
"type": "header",
"text": {"type": "plain_text", "text": f"本日のタスク ({today})"}
},
{"type": "divider"},
]
for task in tasks:
deadline_text = f"期限: {task['deadline']}" if task.get("deadline") else "期限なし"
blocks.append({
"type": "section",
"text": {
"type": "mrkdwn",
"text": f"*{task['title']}*\n{deadline_text} | 担当: {task['assignee']}"
}
})
blocks.append({"type": "divider"})
blocks.append({
"type": "context",
"elements": [{"type": "mrkdwn", "text": "自動送信 by Python Bot"}]
})
try:
client.chat_postMessage(
channel=channel,
text=f"本日のタスク ({today})", # 通知プレビュー用
blocks=blocks
)
except SlackApiError as e:
print(f"エラー: {e.response['error']}")
# 使用例
tasks = [
{"title": "週次レポート作成", "deadline": "2026-03-07", "assignee": "中野"},
{"title": "サーバー監視確認", "deadline": None, "assignee": "中野"},
]
send_daily_report(tasks)
cronで定期実行する
MacまたはLinuxのcronに登録すれば、毎朝自動で通知が飛びます。
crontab -e
# 毎日午前8時に実行
0 8 * * * /path/to/venv/bin/python /path/to/slack_bot.py >> /tmp/slack_bot.log 2>&1
Windowsの場合はタスクスケジューラを使います。
エラー通知botとしても活用する
バッチ処理やスクレイピングが失敗したときにSlackに通知する使い方も非常に便利です。
import traceback
import functools
def notify_on_error(func):
"""エラー発生時にSlackに通知するデコレータ"""
@functools.wraps(func)
def wrapper(*args, **kwargs):
try:
return func(*args, **kwargs)
except Exception as e:
error_msg = f":red_circle: `{func.__name__}` でエラーが発生しました\n```{traceback.format_exc()}```"
send_message(error_msg)
raise
return wrapper
@notify_on_error
def risky_batch_job():
# エラーが起きるとSlackに通知される
raise ValueError("テストエラー")
まとめ
PythonのSlack botは想像より簡単に作れます。ポイントは以下の3点です。
手動でやっていた朝の報告作業が完全になくなったことで、チーム全員が朝から本来の仕事に集中できるようになりました。試したことがない方はぜひ試してみてください。