業務やチーム活動で「会議の予定を Slack に自動通知したい」「Google カレンダーの予定を Python で取得して、開始前にリマインダーを送信したい」といったニーズは多いはずです。
本記事では Python × Slack × Google Calendar API を組み合わせて、シンプルな自動通知システムを構築する手順を解説します。
全体の仕組み
今回作るシステムの流れは以下のとおりです。
- Python スクリプトが Google Calendar API から予定を取得
- 開始前の予定を抽出
- Slack API を使ってチャンネルに通知
- 定期実行(cron や Windows タスクスケジューラ)で自動化
前提条件
- Python 3.9+ がインストール済み
- Google アカウント(Google Calendar を利用中)
- Slack ワークスペースの管理権限(Bot を追加できる権限)
ステップ1:Google Calendar API の準備
- Google Cloud Console にアクセス
- 新しいプロジェクトを作成
- 「APIとサービス」→「有効化されたAPIとサービス」→「APIとサービスの有効化」
- Google Calendar API を検索し、有効化
- 「認証情報」→「OAuth 2.0 クライアントID」を作成
credentials.json
をダウンロードして、Python プロジェクトに保存
ステップ2:Slack API の準備
- Slack API にアクセスし、新しいアプリを作成
- 「OAuth & Permissions」で chat:write 権限を追加
- Bot User OAuth Token を発行
- 対象の Slack チャンネルに Bot を招待(例:
/invite @botname
)
ステップ3:Python パッケージのインストール
ターミナルで以下を実行します。
pip install google-api-python-client google-auth-httplib2 google-auth-oauthlib slack_sdk
ステップ4:Google Calendar の予定を取得
次のサンプルコードで予定を取得できます。
from __future__ import print_function
import datetime
import os.path
from google.oauth2.credentials import Credentials
from google_auth_oauthlib.flow import InstalledAppFlow
from google.auth.transport.requests import Request
from googleapiclient.discovery import build
SCOPES = ['https://www.googleapis.com/auth/calendar.readonly']
def get_calendar_events():
creds = None
if os.path.exists('token.json'):
creds = Credentials.from_authorized_user_file('token.json', SCOPES)
if not creds or not creds.valid:
if creds and creds.expired and creds.refresh_token:
creds.refresh(Request())
else:
flow = InstalledAppFlow.from_client_secrets_file('credentials.json', SCOPES)
creds = flow.run_local_server(port=0)
with open('token.json', 'w') as token:
token.write(creds.to_json())
service = build('calendar', 'v3', credentials=creds)
now = datetime.datetime.utcnow().isoformat() + 'Z'
events_result = service.events().list(calendarId='primary', timeMin=now,
maxResults=5, singleEvents=True,
orderBy='startTime').execute()
events = events_result.get('items', [])
return events
ステップ5:Slack に通知する
次のコードを追加します。
from slack_sdk import WebClient
from slack_sdk.errors import SlackApiError
SLACK_TOKEN = "xoxb-xxxxxxxxxxxxxxxx"
CHANNEL_ID = "#general"
def send_slack_message(message):
client = WebClient(token=SLACK_TOKEN)
try:
response = client.chat_postMessage(channel=CHANNEL_ID, text=message)
except SlackApiError as e:
print(f"Error sending message: {e.response['error']}")
ステップ6:カレンダーの予定を Slack に送信
全体を組み合わせると以下のようになります。
if __name__ == "__main__":
events = get_calendar_events()
if not events:
send_slack_message("本日の予定はありません。")
else:
for event in events:
start = event['start'].get('dateTime', event['start'].get('date'))
message = f"予定: {event['summary']} | 開始: {start}"
send_slack_message(message)
ステップ7:定期実行で自動化
- Linux / Mac → cron に登録
crontab -e
例:毎朝9時に通知0 9 * * * /usr/bin/python3 /home/user/calendar_slack.py
- Windows → タスクスケジューラで「毎日実行」設定
応用アイデア
- 会議の 10分前にリマインダー送信
- 特定の予定(「MTG」「納期」など)だけ通知
- Slack メンション(
<@userID>
)を含めて参加者をリマインド
まとめ
本記事では Python × Slack × Google Calendar を使って、自動通知・リマインダーを構築する方法を紹介しました。
API の認証部分は一度セットアップすれば再利用できるので、業務の生産性向上に直結します。
「予定が近づいたら Slack に自動通知される」仕組みを取り入れることで、会議忘れやタスク漏れを防止しましょう。