Power AutomateでOutlookから予定を取得してメールを送るフローを作ってみた
今回は、Power Automateを使って「毎朝7時に自動的にその日の予定をメールで妻に送信する」フローを作成した経験を共有します。
なぜ作成したのか
フルリモートで働いている私には、以下の悩みがありました:
- 集中したい時間に部屋に入られたくない
- 逆に家事・育児を手伝える時間帯を共有したい
- LINEで予定を聞かれるたびに返信するのが面倒
これらの問題を解決するため、自動的に予定を共有するシステムを構築することにしました。
完成イメージ
フロー

送られてくるメール

作成したフロー
毎日午前7時に以下の処理を自動実行するフローを作成しました:
- Outlookから当日の予定を取得
- 取得した予定をわかりやすい形式に整形
- 指定したメールアドレスに送信
参考にしたのはこちらの記事ですが、自分のニーズに合わせて調整しています。
苦戦した点①:Outlookに登録されている時間
時間帯の調整に苦戦しました。Outlookの予定は世界標準時間(UTC)で登録されているため、日本時間から9時間引いて取得する必要がありました。
苦戦した点②:Outlookからの予定取得方法
最初はOutlookの「イベントの取得(V4)」を利用しましたが、これだと繰り返しの予定を取得できないことが判明。そこで「イベントのカレンダー ビューの取得 (V3)」に変更しました。
苦戦した点③:JSONの扱い
初めてJSONを扱ったので理解に苦労しました。流れとしてはOutlookからテキストで渡ってきたデータをPower Automateで使えるようにして、HTML形式に整形しています。
特に「JSONの解析」アクションの意味がわからなかったので、AIに質問してみました。
私:「JSONの解析」って何をしているんですか?よくわかりません。
AI:JSON形式のテキストは、ただの「文字列」(文字の集まり)です。このままだとPower Automateにとっては単なる「文字列」なので、自由に使えません。
私:じゃあ解析するとどうなるんですか?
AI:「JSONの解析」を行うと、文字列だったデータがPower Automate内部で意味を持つ『構造化データ』になります。テキストから構造化されたデータに変換されるのです。
簡単な例で説明すると:
- 解析前(ただの文字):
"{ "名前": "山田", "年齢": 30 }" - 解析後:Power Automate内部で「名前」「山田」、「年齢」「30」という関係性をもった構造化データになります
これにより「Apply to each」が不要となり、一括処理が可能になりました。
苦戦した点④:メール本文のCSS
Gmailではスタイルタグが効かないため、インラインCSSを適用する必要がありました。そこで、replaceタグを使って置換処理を行いました。
このコードもAIに作成してもらいました:
replace(
replace(
replace(
replace(
body('必要なデータをHTML形式に成形'),
'<table>',
'<table style="border-collapse: collapse; width: 100%; font-family: \'Segoe UI\', \'Meiryo UI\', sans-serif; box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1); border-radius: 8px; overflow: hidden; margin: 15px 0;">'
),
'<tr><th',
'<tr><th'
),
'<th>',
'<th style="background-color: #4CAF50; color: white; font-weight: 600; padding: 12px 15px; text-align: center; font-size: 15px; letter-spacing: 0.5px;">'
),
'<td>',
'<td style="padding: 10px 15px; text-align: left; border: 1px solid #e0e0e0; font-size: 14px;">'
)
まとめ
Power Automateを活用することで、めんどくさい作業を自動化できました。これからもめんどくさいものをどんどん自動化します。