秘書のようにPower Automateがスケジュールを知らせてくれる！

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3514199/ff64663a-f92f-32e1-deb8-4a3ee869a86b.png)
## 前日18:00にメールでスケジュールを知らせてくれる便利ツール完成しました。
自分はスケジュール管理を手帳とパソコン・iPad・iPhoneのGoogleカレンダーで管理しています。
プライベートスケジュール含めすべて入力管理しているため、「重要な業務スケジュールのみ前日に個人メールへ知らせてくれるツールを開発できればよいな」と思い**Power Automate**で試作してみました。
スケジュールの前日18時にスマホ(自分の場合はiPhone)に自動送信されるメールはこんな感じです。
複数スケジュールがあってもメールは1件で届き、そのメールを開くと複数のスケジュールが表示されます。
うん、なかなか気持ちいいです。
<blockquote class="twitter-tweet"><p lang="ja" dir="ltr"><a href="https://twitter.com/hashtag/protoout?src=hash&amp;ref_src=twsrc%5Etfw">#protoout</a><br>クラウド版Power Automateでスケジュール自動配信できた！！<br>複数スケジュールでも1つのメールでくるよう設定完了 <a href="https://t.co/K58RLtl6Ax">pic.twitter.com/K58RLtl6Ax</a></p>&mdash; takeomagic (@takeomagic) <a href="https://twitter.com/takeomagic/status/1699289115039322472?ref_src=twsrc%5Etfw">September 6, 2023</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>
今回作成でこだわったポイントは下記3点です。

| |こだわったポイント           |
|---------|-------------- |
|1|弊社で標準使用している**SharePoint**からスケジュール読み込み |
|2|複数スケジュールでも送信されるメールを分けず、<font color="Red">1回で送信される</font>事|
|3|複数スケジュールは<font color="Red">箇条書き</font>で送信される事|

iPhoneの場合は**AppleWatch**にも連携されるので下記のようにきれいに表示される事を確認しました。
左の画面**AppleWatch**の標準メールアプリを開けると複数スケジュールでも1件のメールが送信され、開くと右の画面で複数のスケジュールが表示されています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3514199/424b446a-4023-bffc-000b-cf785338e16e.png)


## 使用したツール
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3514199/27144068-7bf0-9948-9efe-f7bcfd0fd15a.png)
・クラウド版**Power Automate** 
**Power Automate**はMicrosoftより2種類提供されています。
（スマホ版除く）
|バージョン　    |サービス名           |特    記                           |
|---------|-------------- |----------------------------------|
|**Desktop版**|[**Power Automate**](https://www.microsoft.com/ja-jp/biz/smb/column-power-automate-desktop.aspx)|パソコンへインストールするバージョン       |
|**クラウド版**|[**Power Automate**](https://learn.microsoft.com/ja-jp/power-automate/get-started-logic-flow)|各社が運営するWebサービスを利用できる|


:::note info
今回使用したのは[クラウド版**Power Automate**](https://learn.microsoft.com/ja-jp/power-automate/get-started-logic-flow)です。
弊社で標準で使用しているWebサービスSharePointスケジュール表からデータを読み取り、自動送信させるためクラウド版で作成しました。
以下の説明では、標記を**Power Automate**で統一します。
:::

[**SharePoint**](https://www.microsoft.com/ja-jp/microsoft-365/sharepoint/collaboration)
弊社では**SharePoint**を標準で使用しているのでスケジュールの格納先に設定しました。

:::note info
**SharePoint**は、Microsoft提供の同じファイルを複数のユーザーで閲覧できるように共有するシステムサービスです。 **SharePoint**にファイルをアップロードすることによって、ユーザーそれぞれの端末から同じファイルを閲覧することができます。
:::
## ツールの目的
業務・個人スケジュールが混在し、自分からスマホでスケジュール確認をしています。
重要な業務スケジュールを決めたタイミングで個人スマホに自動で知らせてくれる定型業務を「自動化」できれば見落としなどもなくなります。

## 設定した全体の流れ
① **SharePoint**にスケジュールをリスト化します。
　今回は会社で使用している**SharePoint**のサイトコンテンツにスケジュール管理リストを追加しました。
② **Power Automate**に条件を設定します。
　この部分を詳しく説明していきます。

## SharePoint設定
**SharePoint**の<font color="Red">サイトコンテンツ</font>内にスケジュールをリスト化しました。
今回はヘッダの部分、タイトル(会議タイトル)とday(スケジュール)を設定しています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3514199/8ece897d-96ce-fbc7-6175-279f630cd9dd.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3514199/30f26a6d-a216-8d20-4160-323277ec6d75.png)
このリスト(スケジュール)はいつでも修正・追加可能です。
後で、この**SharePoint**のアドレスを使用します。

## Power Automate設定
最初に**マイフロー**から**＋新しいフロー**を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3514199/42538959-fbe4-7651-d9de-2d611851573a.png)
処理を順番に追加していきます。
今回設定した全体の流れは以下の通りです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3514199/85ae3ea3-5d95-d27a-0ccd-68d9de0493a0.png)
横長の箱1つ1つを**ステップ**といいます。
この**ステップ**を押して中に入っていき詳細の設定をしていきます。

１，まず一番上に**Recurrence**（繰り返し処理の意味）の*ステップ*を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3514199/b88ca142-f7f2-2715-0588-a5f403fcc8a5.png)
**Recurrence**を押し中を開きます。
今回は下記の通り設定しました。
・「毎日処理」の意味です。
・タイムゾーンは日本を選択。
・開始時間は「今」でかまいません。
・設定時刻　今回は18時に自動メール処理をしてもらいます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3514199/d018cfeb-a510-f1a7-6b38-70fec2af18ad.png)
**Recurrence**の下の
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3514199/52951a61-cb31-9a3d-f712-058b1b4706eb.png)
を押して次の**ステップ**を選択します。

２，**複数の項目の設定**を選択します。
・さきほどの**SharePoint**のアドレス
・**SharePoint**のリストに設定したリスト名
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3514199/370d43d4-2502-3c94-7857-18d85c43740e.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3514199/52951a61-cb31-9a3d-f712-058b1b4706eb.png)
を押して次の**ステップ**を選択します。

３，**変数を初期化する**ステップを選択します。
　（ワークフロー内で情報を保持するステップ）
・名前に処理名称を記入(わかりやすい名前であれば何でもかまいません)
・種類は文字列を選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3514199/c6449575-ce30-75e0-e5c9-b2669f5a274d.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3514199/52951a61-cb31-9a3d-f712-058b1b4706eb.png)
を押して次の**ステップ**を選択します。

４，**Apply to each2**を選択します。
　　(複数のアクションを繰り返し操作を設定するステップ）
一番上のボックスに**value**を選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3514199/c1722d0c-8ad1-38f4-ebe7-6828a7222959.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3514199/f20cfb75-a334-754b-9602-51757fa4d008.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3514199/c9c09f79-50f8-0e0f-d540-9bef2c8e5bae.png)
**条件**部分を押し、左から順番に
・day
・次の値を含む はそのまま
・関数式より
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3514199/cf673c20-0c69-cd36-6b01-7845f01a62a8.png)
を入力。
**現在の日より1日先をみる**という条件です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3514199/c35b2477-c3e6-d945-d9bf-593ef9c14d72.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3514199/34a8aaab-da34-d955-fc15-f768d31f983f.png)

:::note alert
注意
・日付けは画面通り <font color="Red">yyyy-MM-dd</font> と入力。　大文字、小文字に注意。
・入力完了したら必ず<font color="Red">更新ボタンを押す事</font>。
:::


このまま下にメール送信のステップを追加するだけでは、複数件スケジュールがあれば分けて複数メール送信される事がわかりました。
これでは1件ずつメールを確認する必要があり不便です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3514199/1b457de7-dbb2-899b-ac34-b1df2522d610.png)
予定が複数ある場合、<font color="Red">1つのメールで箇条書き</font>で送信されるように設定を考えてみました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3514199/1c597d23-6f55-14dd-d023-da5a7faac3a9.png)


✅**はいの場合**の下、文字列変数に追加部分の値部分に
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3514199/29202da0-a713-163d-245c-e47a257cc40b.png)
を入力。　**liは改行のコマンドなので/liでしめます。**
これで条件があえばメールを送信するステップにつなげる事ができます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3514199/52951a61-cb31-9a3d-f712-058b1b4706eb.png)
を押して次の**ステップ**を選択します。

５，**メール通知を送信する(V3)**ステップを選択します。
・宛先に送信先メールアドレス
 (今回は自分のスマホのアドレスです)
・件名にメールの件名
・本文に箇条書きで送信されるよう下記を<font color="Red">html</font>構文で記入しました
<font color="Red">複数スケジュールを改行して箇条書き</font>になるよう下記設定で整形してみました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3514199/ba951879-2460-bebb-5187-14bab1db6538.png)

:::note alert
注意
**uiは・(ドット)付きの箇条書き**のコマンドです。
:::
それではテストで動くか試してみます。
手動を選択し、テスト⇒フローの実行と押します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3514199/19251857-ff3c-3d0d-8907-8f81773b50c4.png)

テストはうまく動きましたが、実際の動きを待っていると18時なってもメールがこない！
夜中の3時に配信されていました。
もう一度設定を見直すと一番上のRecurrenceのステップで設定時刻が空白になっていました。
ここを漏らさず、18にすると18時に自動メールが配信されました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3514199/7dc1f09a-7c09-eb57-c8aa-941c8e03a8f2.png)

実際に自動配信された「明日のスケジュール」メールが下記です。
複数スケジュールが箇条書きになったので1つ1つメールをあける必要がなくなりました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3514199/c2247aa4-f2db-f5bb-a3d3-07cf45863f47.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3514199/ff64663a-f92f-32e1-deb8-4a3ee869a86b.png)

## こんな事に活用できそう！
イメージした通り秘書のように
・前日の指定した時間に
・複数スケジュールを1件のメールで
・箇条書きで　
自動メール送信成功されるまでかなり苦労しましたが、ここまでできたので色々な活用方法が思いつきます。
① 全員出席必要なスケジュール自動配信
② メンバーに設定している課題〆日の事前連絡
③ 自社では会議室予約をシステムで行いますが、受付開始日・時間が決まっているため全員へ事前連絡
など

## 同じグループのメンバー中10人に個人のスケジュール自動送信をためしてみました！
**【説明した内容】**

:::note warn
毎日のスケジュールについて自分が手帳などを確認するのではなく、自動で前日、自分のスマホに連絡くれば便利と感じますか？　
毎週のグループ定例MTの場で説明しました。
:::

**【メンバーからの前向きな意見】**

:::note warn
メンバーの声⇒帰る前に明日の予定が自動送信されてくるので明日の準備へ見落としがなくなりすごくよい。
個人スケジュールだけでなく、メンバー統一で出席するミーティングなどもメンバーに自動送信してみました。
⇒ 業務のスケジュール管理について「従来より意識することなく、生産的な業務に集中する事ができるようになった」という感想でした。
:::                     

**メンバーの意見から下記のような改善課題を考えています。**

:::note warn
**【自身が考える課題】**
スケジュール入力時、現状は**SharePoint**に直接手入力している。
試作なので現状は自分が入力しています。
**SharePoint**は共通Webシステムなのでメンバーが共通管理できるのはよいが、現状は手入力管理。
**【メンバーからの改善要望案】**
１，専用に作成するのではなく1か所でだれでも統一管理して連動させ、最初に作成している共通のエクセル管理表から反映させたい。
２，現状はこのツール作成者のスケジュールしか管理できていない。
グループメンバー全員(13人)の在社計画・業務スケジュールを手間をかけず見やすく管理してほしい。
:::                     



**メンバー中、10人にヒアリングした点数**は下記の通りです（5点満点）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3514199/873b9292-7b0e-6338-34d5-4064be9e1a5b.png)
**代表的な意見**

|対象　    |点数(5点満点)           |意見           |
|---------|-------------- |----------------------------------|
|**Bさん 男性社員**|5点|前日に予定が自動でくるのはうれしい|
|**Dさん 男性社員**|4点|自分のスマホにくるのがよい|
|**Cさん 女性社員**|4点|すごく便利　開始時間や会場も教えてほしい|
|**Fさん 男性社員**|3点|期限にやる事項目も教えてほしい|
|**Jさん パート女性社員**|2点|スケジュールよりも期限でTO DO管理しているので知らせてほしい|

点数に差があるのは個人によりスケジュールを教えて欲しいのかToDoを教えて欲しいのかはたまた、前日か当日朝か開始の30分前かなど要望が異なる事もあります。
スマホには数々の便利アプリがあるのでそれらとすみわけし、自グループ共有データをそのまま有効活用できるツールへさらに仕上げていきたいと思います。
[**LINE Bot**](https://developers.line.biz/ja/docs/messaging-api/building-bot/)と[**Googleスプレッドシート**](https://www.google.com/intl/ja_jp/sheets/about/)との組み合わせや[**Glide**](https://www.glideapps.com/)など様々な可能性も検討します。


:::note info
[**LINE Bot**](https://developers.line.biz/ja/docs/messaging-api/building-bot/)
   設定により自動応答や情報提供が可能な対話型プログラム。
[**Googleスプレッドシート**](https://www.google.com/intl/ja_jp/sheets/about/)
   Google提供のオンライン表計算ソフト。
[**Glide**](https://www.glideapps.com/)
データベースから素早くアプリを開発できるプラットフォーム。
:::


## まとめ
今回、メンバーが共有でスケジュール管理できるためSharePointにスケジュールを手入力で対応しましたが、自グループでは**会議室予約管理用に同じSharePointにExcelフォーマット**で管理しているものがあるのでそこから直接読み込めるアップデート版を現在作成中です。
これだと毎回手入力することなく
・会議名
・開始時間
・会場
を知らせてくれます。
間もなく完成するので公開しようと思います。

**最後にフローのソースコード記入します**
{
  "name": "6af17c89-0983-4b69-aee7-3d2680015386",
  "id": "/providers/Microsoft.Flow/flows/6af17c89-0983-4b69-aee7-3d2680015386",
  "type": "Microsoft.Flow/flows",
  "properties": {
    "apiId": "/providers/Microsoft.PowerApps/apis/shared_logicflows",
    "displayName": "スケジュールお知らせ",
    "definition": {
      "metadata": {
        "workflowEntityId": null,
        "processAdvisorMetadata": null,
        "flowChargedByPaygo": null,
        "flowclientsuspensionreason": "None",
        "flowclientsuspensiontime": null,
        "flowclientsuspensionreasondetails": "",
        "creator": {
          "id": "a41cb033-7696-4210-acc7-63d910522776",
          "type": "User",
          "tenantId": "76a9015f-a1e0-440f-a5f4-ca0683cd76a1"
        },
        "provisioningMethod": "FromDefinition",
        "failureAlertSubscription": true,
        "clientLastModifiedTime": "2023-09-13T01:20:38.2374095Z"
      },
      "$schema": "https://schema.management.azure.com/providers/Microsoft.Logic/schemas/2016-06-01/workflowdefinition.json#",
      "contentVersion": "1.0.0.0",
      "parameters": {
        "$connections": {
          "defaultValue": {},
          "type": "Object"
        },
        "$authentication": {
          "defaultValue": {},
          "type": "SecureObject"
        }
      },
      "triggers": {
        "Recurrence": {
          "recurrence": {
            "frequency": "Day",
            "interval": 1,
            "timeZone": "Tokyo Standard Time",
            "startTime": "2023-08-28T09:00:00.000Z",
            "schedule": {
              "hours": [
                "18"
              ],
              "minutes": [
                0
              ]
            }
          },
          "metadata": {
            "operationMetadataId": "7fbbffad-cd4a-4563-bd97-e9259868b177"
          },
          "type": "Recurrence"
        }
      },
      "actions": {
        "複数の項目の取得": {
          "runAfter": {},
          "metadata": {
            "operationMetadataId": "8ca4adee-9ded-4961-95df-8424649faa26"
          },
          "type": "OpenApiConnection",
          "inputs": {
            "host": {
              "apiId": "/providers/Microsoft.PowerApps/apis/shared_sharepointonline",
              "connectionName": "shared_sharepointonline",
              "operationId": "GetItems"
            },
            "parameters": {
              "dataset": "https://aeon21.sharepoint.com/sites/00000920012",
              "table": "f39f9822-3f5b-47d2-8795-2b7bbb5b2960"
            },
            "authentication": "@parameters('$authentication')"
          }
        },
        "Apply_to_each_2": {
          "foreach": "@outputs('複数の項目の取得')?['body/value']",
          "actions": {
            "条件": {
              "actions": {
                "文字列変数に追加": {
                  "runAfter": {},
                  "metadata": {
                    "operationMetadataId": "28948597-a385-46cd-95cf-17a98500350a"
                  },
                  "type": "AppendToStringVariable",
                  "inputs": {
                    "name": "複数メールを1回に",
                    "value": "<li>@{items('Apply_to_each_2')?['Title']}</li>"
                  }
                }
              },
              "runAfter": {},
              "expression": {
                "contains": [
                  "@items('Apply_to_each_2')?['i14i']",
                  "@addDays(utcNow(),1,'yyyy-MM-dd')"
                ]
              },
              "metadata": {
                "operationMetadataId": "ce21445d-b5b0-4b00-83bc-16b361026d72"
              },
              "type": "If"
            }
          },
          "runAfter": {
            "変数を初期化する": [
              "Succeeded"
            ]
          },
          "metadata": {
            "operationMetadataId": "70ba7c45-4900-4e06-b8cd-15261f69d181"
          },
          "type": "Foreach"
        },
        "変数を初期化する": {
          "runAfter": {
            "複数の項目の取得": [
              "Succeeded"
            ]
          },
          "metadata": {
            "operationMetadataId": "981e0a01-84f2-4047-b5ee-0827cbb08749"
          },
          "type": "InitializeVariable",
          "inputs": {
            "variables": [
              {
                "name": "複数メールを1回に",
                "type": "string"
              }
            ]
          }
        },
        "メール通知を送信する_(V3)": {
          "runAfter": {
            "Apply_to_each_2": [
              "Succeeded"
            ]
          },
          "metadata": {
            "operationMetadataId": "6158da9e-12eb-48a2-a564-156bddfc41cc"
          },
          "type": "OpenApiConnection",
          "inputs": {
            "host": {
              "apiId": "/providers/Microsoft.PowerApps/apis/shared_sendmail",
              "connectionName": "shared_sendmail",
              "operationId": "SendEmailV3"
            },
            "parameters": {
              "request/to": "メールアドレス記入",
              "request/subject": "スケジュール連絡",
              "request/text": "<html>\n<body>\n    <h3>明日の予定はこちら</h3>\n    <ul>\n     　　@{variables('複数メールを1回に')}\n    </ul>\n</body>\n</html>"
            },
            "authentication": "@parameters('$authentication')"
          }
        }
      }
    },
    "connectionReferences": {
      "shared_sharepointonline": {
        "connectionName": "shared-sharepointonl-b1f9a43f-6035-4485-8d94-833c21d0b460",
        "source": "Embedded",
        "id": "/providers/Microsoft.PowerApps/apis/shared_sharepointonline",
        "tier": "NotSpecified"
      },
      "shared_sendmail": {
        "connectionName": "shared-sendmail-188cf175-3b7c-48a9-b70d-d47a0713e4f3",
        "source": "Embedded",
        "id": "/providers/Microsoft.PowerApps/apis/shared_sendmail",
        "tier": "NotSpecified"
      }
    },
    "flowFailureAlertSubscribed": false,
    "isManaged": false
  }
}

ご覧いただきありがとうございました。