目次
🎯 目的
- 毎朝自動でGoogleカレンダーの当日予定をWebから取得
- 時間とタイトルを一覧に整形して
- Teams または Slack(Web)に自動投稿し、社内全体へ共有
✅ Google Workspace API不要
✅ Chromeのプロファイルを使ってログイン状態を維持
✅ Teams / Slack も Webブラウザで直接投稿
🔄 自動化の全体フロー
[1] ChromeでGoogleカレンダーを開く(自動ログイン)
↓
[2] 当日の予定一覧をDOMから抽出(時間・タイトル)
↓
[3] 予定を整形 → 投稿メッセージを生成
↓
[4] TeamsまたはSlackの投稿画面を開く
↓
[5] テキストを貼付 → Enterで送信
📁 フォルダ構成(おすすめ)
CalendarReminderBot/
├─ main_flow.padx
├─ modules/
│ ├─ GetTodayEvents.padx ← カレンダー取得
│ ├─ PostToChat.padx ← チャット送信
│ └─ Utilities/
│ ├─ FormatMessage.padx
├─ data/
│ ├─ config.json ← 設定ファイル(プロファイル名・投稿先など)
│ ├─ message_template.txt ← 投稿テンプレ
📄 config.jsonの例
{
"chromeProfile": "Profile 2",
"calendarUrl": "https://calendar.google.com/calendar/u/0/r/day",
"chatPlatform": "Slack",
"chatUrl": "https://app.slack.com/client/XXXXX/YYYYY"
}
✉️ message_template.txt(テンプレ)
📅 本日の予定({{日付}})
{{予定一覧}}
以上です。よろしくお願いします!
🛠 フロー作成手順(PAD完全解説)
✅ STEP1:GoogleカレンダーをChromeで起動(ログイン済)
アクション:「アプリケーションを起動」
- アプリ:
chrome.exe - 引数:
--profile-directory="Profile 2" https://calendar.google.com/calendar/u/0/r/day
※ 最初にChromeでプロファイルを作成して、Googleにログインしておいてください(2FAなど手動)
🕒 STEP2:当日の予定を取得(GetTodayEvents.padx)
処理内容:
- 「日」表示モード(
/day)で読み込まれていることを前提に、DOMから予定リストを取得
取得要素例(DOM構造に応じて調整):
| 時間 | タイトル |
|---|---|
div[role="main"] span.time | span.event-summary |
実装:
- 「WebページのUI要素を抽出」で、予定が並んでいるブロック全体をループ取得
- 各予定ごとに
時間 + タイトルのセットを作成 - 予定がなければ「予定なし」とする
出力形式:
[
"09:00 - 朝会",
"13:00 - 顧客打合せ(オンライン)",
"16:00 - プロジェクトレビュー"
]
→ 変数名:EventList
🧾 STEP3:メッセージ生成(FormatMessage.padx)
手順:
message_template.txtを読み込み{{日付}}→ 今日の日付(yyyy/MM/dd){{予定一覧}}→EventListを改行で連結
📅 本日の予定(2025/09/11)
09:00 - 朝会
13:00 - 顧客打合せ(オンライン)
16:00 - プロジェクトレビュー
以上です。よろしくお願いします!
→ 出力:FinalMessageText
💬 STEP4:チャット投稿(PostToChat.padx)
1. SlackまたはTeamsの投稿画面を開く
config["chatUrl"]を使用chrome.exe --profile-directory="Profile 2" URLで起動
2. テキスト入力欄を検出
- DOMセレクタ指定
- Slack:
div.ql-editor - Teams:
div[data-text="true"]
- Slack:
UI要素取得が困難な場合は、TAB+Ctrl+Vによるキーボード操作でも代用可
3. メッセージ貼付&送信
クリップボードに FinalMessageText を設定
→ UI要素にフォーカス
→ Ctrl+V(貼り付け)
→ Enter(送信)
🧷 応用Tips
✅ 複数予定のテーブル抽出
- Googleカレンダーの構造は更新が多いので、
- 時間 →
span[jsname="huwtOb"] - タイトル →
div[role="presentation"] div[data-eventchip]
を組み合わせて取得がおすすめ
- 時間 →
✅ Chromeプロファイルでログイン維持
- 複数アカウントがある環境でもログイン状態を保持できる
--profile-directory="Profile名"を必ず明示
✅ Slack / Teams の安定投稿
| プラットフォーム | 投稿UIの特徴 | 操作方法 |
|---|---|---|
| Slack(Web) | エディタにフォーカス必要 | Ctrl+V+Enter |
| Teams(Web) | textarea + 送信ボタン形式 | TAB→貼付→TAB→Enter が安定 |
📋 テスト手順(5分で確認)
- Google Chromeで対象プロファイルでカレンダーにログイン済にしておく
calendarUrlを/day表示に指定(1日分予定だけ)item_list.xlsxなし → 手動で予定登録して確認- SlackまたはTeamsで手動投稿画面を開いてからフロー起動
- 正しく予定が投稿されるか確認
❓ よくある質問(FAQ)
Q1. カレンダーAPIの方が安定では?
A. たしかにAPIの方が正式ですが、APIは認可・アクセストークン・設定が面倒。本フローは純ブラウザ操作で簡単導入可能なのが特徴です。
Q2. メッセージが途中で切れる?
A. SlackやTeamsは長文でも投稿できますが、改行・絵文字・特殊文字のエスケープ処理に注意が必要。template.txtを編集して調整してください。
Q3. DOMが変わって動かない!
A. セレクタ変更が頻繁な場合は、「画像認識」や「表示テキスト検出(例:”終日”など)」と組み合わせて堅牢にしてください。
Q4. 予定がない場合も投稿したい
A. EventListが空だった場合に "予定はありません" と設定すれば対応可能です。
