PythonでSlack・Teamsに通知を送る!チームの進捗を自動で報告するBot作成法
日々の業務の中で、チームメンバーへの進捗報告やシステムのアラート通知を手動で行っていませんか?
毎日同じような内容をチャットツールに打ち込む作業は、積み重なると意外に大きな時間を奪っていきます。
もし、その作業をPythonが代わりにやってくれたら、どれほど楽になるでしょうか。 今回は、Pythonを使ってSlackやMicrosoft Teamsに自動でメッセージを送る「通知Bot」の作り方を詳しく解説します。
エンジニア歴10年の私が、現場で実際に使っているテクニックや、初心者がハマりやすいポイントもあわせてお伝えしますね。 この記事を読み終える頃には、あなたの代わりに働く心強い相棒が誕生しているはずです。
なぜ自動通知にPythonを使うのか¶
世の中には便利な自動化ツールがたくさんありますが、あえてPythonでBotを作るのには理由があります。 それは、Pythonが圧倒的に汎用性が高く、一度覚えるとあらゆる業務に応用できるからです。
例えば、Excelデータを集計した直後にその結果を投稿したり、特定のWebサイトが更新された瞬間に通知したりすることも自由自在です。
また、Pythonには外部サービスと連携するためのライブラリが豊富に揃っています。 複雑な設定を抜きにして、数行のコードを書くだけで世界中のツールとつながることができるのです。
プログラミング初心者にとって、自分の書いたコードが実際のチャット画面に反映される瞬間は、最高の感動体験になります。 まずは、自動化の第一歩として通知Botの作成にチャレンジしてみましょう。
【関連記事】:非エンジニアがPythonを学ぶべき「コスパ最強」の理由。事務作業を秒で終わらせるには?
SlackとTeams、どちらで始める?¶
あなたが普段使っているツールはどちらでしょうか。 SlackとTeamsでは、通知を送るための仕組みや準備方法が少し異なります。
それぞれのツールの特徴や、プログラム側から見た際の違いを表にまとめてみました。 まずは自分の環境に合わせて、どちらから読み進めるか決めてみてください。
| 比較項目 | Slack (スラック) | Microsoft Teams (チームズ) |
|---|---|---|
| 主な仕組み | Incoming Webhooks / Slack API | Incoming Webhook / Workflows |
| 設定のしやすさ | 直感的で非常に簡単 | 組織の権限設定により少し複雑 |
| メッセージ装飾 | Block Kitで自由なレイアウトが可能 | Adaptive Cardsで高度な表現が可能 |
| 初心者の始めやすさ | ★★★★★ | ★★★☆☆ |
| 適した用途 | 開発チームの素早い共有 | 全社的な報告や企業の公式通知 |
最近のTeamsは、従来のWebhookから「Workflows(ワークフロー)」という仕組みへの移行が進んでいます。 そのため、設定手順はSlackの方がシンプルに感じることが多いかもしれません。
どちらのツールも、Pythonから見れば「特定のURLにデータを送る」という本質は同じです。 それでは、具体的な準備と実装の手順を見ていきましょう。
Slack Botを作成するための準備¶
Slackに通知を送る最も簡単な方法は、Incoming Webhooksという機能を使うことです。 まずは、通知を受け取りたいチャンネルを作成し、設定画面からWebhook URLを発行する必要があります。
「アプリを追加」というメニューから「Incoming Webhooks」を探し、設定を追加してみてください。
そこで発行される、https://hooks.slack.com/services/... という長いURLが、プログラムの送信先になります。
このURLは、言わば「そのチャンネルに投稿するための魔法の鍵」です。 外部に漏れると誰でも投稿できてしまうため、取り扱いには十分に注意してくださいね。
準備ができたら、Pythonでコードを書くための環境を整えましょう。 まだPython自体の準備が不安な方は、こちらの記事を参考にしてみてください。 【関連記事】:pyenvの使い方をわかりやすく解説!Pythonのバージョンを変える
PythonでSlackにメッセージを送ってみよう¶
いよいよ、実際にコードを書いてSlackに通知を送るステップです。
Pythonで外部のURLにデータを送るには、requestsという非常に有名なライブラリを使います。
まずは、コマンドライン(ターミナル)で以下のコマンドを入力して、ライブラリをインストールしましょう。 この一歩が、あなたのプログラムを外部の世界と繋げるための入り口になります。
pip install requests
インストールが完了したら、以下のコードを参考にPythonファイルを作成してください。 URLの部分は、先ほど自分で取得したWebhook URLに書き換えるのを忘れないでくださいね。
import requests
import json
# あなたのWebhook URLをここに貼り付けてください
WEBHOOK_URL = "https://hooks.slack.com/services/YOUR/WEBHOOK/URL"
def send_slack_notification(message):
# 送信するデータを辞書形式で作成します
payload = {
"text": message
}
# データをJSON形式に変換して送信します
response = requests.post(
WEBHOOK_URL,
data=json.dumps(payload),
headers={'Content-Type': 'application/json'}
)
if response.status_code == 200:
print("通知の送信に成功しました!")
else:
print(f"エラーが発生しました: {response.status_code}")
# 実際に使ってみる
send_slack_notification("お疲れ様です!本日の進捗報告を自動でお送りします。")
いかがでしょうか、無事にSlackのチャンネルにメッセージが届きましたか? たったこれだけのコードで、あなたのパソコンとSlackが繋がったのです。
この基本をマスターすれば、あとはメッセージの内容を動的に変えるだけで、立派な進捗報告Botになります。 次に、ビジネスの現場でよく使われるTeamsへの通知についても見ていきましょう。
Microsoft Teams Botを作成する手順¶
Teamsの場合、以前はSlackと同様にURLを取得するだけでしたが、現在は少し手順が異なります。 Teamsのチャンネルにある「ワークフロー」メニューから、「Webhook 要求を受信したときにチャネルに投稿する」というテンプレートを選んでください。
設定を進めるとURLが発行されますが、TeamsはSlackよりもメッセージの形式が厳密です。 特に、送信するデータの形式(JSON)が正しくないと、エラーになってしまうことが多いので注意が必要です。
また、職場での利用がメインになるため、管理者によって外部連携が制限されている場合もあります。 もし設定が進まないときは、システム管理者に相談してみるのも一つの手ですね。
では、Teamsにメッセージを送るための専用コードを確認してみましょう。 Slackとの違いに注目しながら読んでみてください。
import requests
import json
# Teamsのワークフローで取得したURLをここに貼り付けます
TEAMS_WEBHOOK_URL = "https://prod-XX.logic.azure.com:443/..."
def send_teams_notification(title, summary):
# Teams用のデータ構造(Adaptive Cards形式)を作成
payload = {
"type": "message",
"attachments": [
{
"contentType": "application/vnd.microsoft.card.adaptive",
"content": {
"type": "AdaptiveCard",
"body": [
{"type": "TextBlock", "text": title, "weight": "bolder", "size": "medium"},
{"type": "TextBlock", "text": summary}
],
"$schema": "http://adaptivecards.io/schemas/adaptive-card.json",
"version": "1.0"
}
}
]
}
response = requests.post(
TEAMS_WEBHOOK_URL,
headers={"Content-Type": "application/json"},
data=json.dumps(payload)
)
if response.ok:
print("Teamsへの送信が成功しました")
else:
print(f"失敗しました: {response.text}")
send_teams_notification("進捗報告", "プロジェクトAのタスクが完了しました!")
Teamsのメッセージは、このように「カード形式」で送るのが一般的です。 見た目がリッチになる分、コードは少し長くなりますが、その分プロフェッショナルな印象を与えることができます。
エンジニア歴10年の私が学んだ「失敗しないBot」の極意¶
ここまでは「送り方」を解説しましたが、実は本当に大切なのは「運用の仕方」です。 私がこれまでの10年間で、数々のBotを作ってきて学んだ教訓をいくつかシェアさせてください。
一番やってはいけない失敗は、「通知を送りすぎること」です。 1分おきに進捗報告が飛んでくるようなチャンネルは、誰も見なくなり、ただのノイズになってしまいます。
本当に必要なときだけ、あるいは1日に1回決まった時間に、重要な情報だけを絞って送るようにしましょう。 通知は「人の注意を引くためのもの」であって、「ログを垂れ流すためのもの」ではないからです。
また、エラー通知を作る際も注意が必要です。 もしシステムが故障して無限ループに陥り、1秒間に100通の通知を飛ばしてしまったらどうなるでしょうか。
SlackやTeamsのAPIには「回数制限」があり、度を越した送信をするとBotが凍結されてしまうこともあります。 現場では、1回通知を送ったら、その後10分間は同じ通知を送らないといった「制御機能」を入れるのが常識です。
初心者のうちはそこまで考えなくても大丈夫ですが、「相手にとって心地よい通知か?」という視点は常に持っておきましょう。 これこそが、機械的なコードに「気遣い」という命を吹き込む、プロの視点です。
セキュリティを守るための「絶対のルール」¶
コードの中にWebhook URLを直接書き込むのは、実はとても危険な行為です。 もしそのコードをGitHubなどの公開サイトにアップロードしてしまったら、世界中の誰もがあなたのチャンネルを乗っ取れてしまいます。
開発の現場では、環境変数という仕組みを使って、URLをプログラムの外で管理します。
Pythonでは、.envというファイルにURLを書き込み、python-dotenvというライブラリで読み込む方法が一般的です。
# ライブラリのインストール
pip install python-dotenv
設定ファイル(.env)の中身は次のように記述します。 このファイルを、コードとは別に保存しておくわけですね。
SLACK_WEBHOOK_URL=https://hooks.slack.com/services/xxx/yyy/zzz
そして、Pythonコードからは以下のように呼び出します。 これだけで、セキュリティレベルはぐんと上がります。
import os
from dotenv import load_dotenv
load_dotenv()
url = os.getenv("SLACK_WEBHOOK_URL")
このような「綺麗な書き方」や「安全な書き方」を意識することは、エンジニアとしての価値を高めることに直結します。
毎日決まった時間に自動で報告させるには¶
通知Botが完成したら、最後はそれを「どうやって定期実行させるか」という問題が残ります。 自分のパソコンをずっと起動しておくわけにはいきませんよね。
一番手軽なのは、GitHubを使っている人なら「GitHub Actions」という機能を使う方法です。 これを使えば、毎日朝9時にPythonコードを自動で動かす、といった設定が無料(範囲内)で簡単に行えます。
他には、Google CloudやAWSといったクラウドサービスを利用するのも一般的です。 少し難易度は上がりますが、サーバーレス(Cloud Functionsなど)という仕組みを使えば、月数十円程度のコストでBotを運用できます。
まずは自分のパソコンで動くことを確認し、慣れてきたら「自動で動かしてくれる場所」を探してみましょう。 一度サーバーに配置してしまえば、あなたは寝ている間でも、Botが着実に進捗を報告し続けてくれます。
まとめ:あなたの代わりに働くパートナーを育てよう¶
今回は、Pythonを使ってSlackやTeamsに通知を送る方法を解説しました。 最初は難しく感じるかもしれませんが、要領をつかめば、これほど強力な武器はありません。
- WebhooksのURLを取得する。
- Pythonの
requestsでデータを送る。 - セキュリティに配慮してURLを管理する。
この3ステップを繰り返すだけで、あなたの業務効率は驚くほど向上します。 Botに任せられる仕事はどんどん任せて、あなたはもっと創造的で楽しい仕事に時間を使いましょう。
プログラミングの学習は、こうした「小さな成功体験」の積み重ねが何より大切です。 今日作った通知Botが、あなたのエンジニア人生を大きく変えるきっかけになるかもしれません。
エラーが出ても焦らず、一歩ずつ進んでいきましょう。 あなたの素晴らしいBotが、チームに笑顔をもたらすことを願っています!