Python × Slack × Google Calendar で自動通知・リマインダーを構築する方法

業務やチーム活動で「会議の予定を Slack に自動通知したい」「Google カレンダーの予定を Python で取得して、開始前にリマインダーを送信したい」といったニーズは多いはずです。
本記事では Python × Slack × Google Calendar API を組み合わせて、シンプルな自動通知システムを構築する手順を解説します。


全体の仕組み

今回作るシステムの流れは以下のとおりです。

  1. Python スクリプトが Google Calendar API から予定を取得
  2. 開始前の予定を抽出
  3. Slack API を使ってチャンネルに通知
  4. 定期実行(cron や Windows タスクスケジューラ)で自動化

前提条件

  • Python 3.9+ がインストール済み
  • Google アカウント(Google Calendar を利用中)
  • Slack ワークスペースの管理権限(Bot を追加できる権限)

ステップ1:Google Calendar API の準備

  1. Google Cloud Console にアクセス
  2. 新しいプロジェクトを作成
  3. 「APIとサービス」→「有効化されたAPIとサービス」→「APIとサービスの有効化」
    • Google Calendar API を検索し、有効化
  4. 「認証情報」→「OAuth 2.0 クライアントID」を作成
  5. credentials.json をダウンロードして、Python プロジェクトに保存

ステップ2:Slack API の準備

  1. Slack API にアクセスし、新しいアプリを作成
  2. 「OAuth & Permissions」で chat:write 権限を追加
  3. Bot User OAuth Token を発行
  4. 対象の 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 に自動通知される」仕組みを取り入れることで、会議忘れやタスク漏れを防止しましょう。

タイトルとURLをコピーしました