定期的なタスクを忘れないように Microsoft To Do を使おうと思ったのですが、どうせその追加すら忘れるので Power Automate で自動化しました。
作業環境
- Windows 10 20H2 (OS Build 19042.1466)
- Power Automate
- Microsoft To Do 2.60.1
やりたいこと
定期的に行うタスクを自動で Microsoft To Do に追加します。
今回は、毎月1日の午前8時30分に「カレンダーをめくる」というタスクを追加します。タスクの期限は2日後とし、タスク追加の翌日午後17時00分にリマインダーを設定します。2月の場合は以下のようになります。
日時 | イベント |
---|---|
2/1 08:30 AM | タスク追加 |
2/2 17:00 PM | リマインダー |
2/3 | 期限 |
完成形
こんな風になります。
手順
Power Automate にアクセスする
まずは https://www.office.com/ からサインインしてください。
画面左下の「すべてのアプリ」アイコンをクリックし、「Power Automate」をクリックしてください。
フローを作成する
画面左端の「作成」をクリックし、「一から作成」の「スケジュール済みクラウド フロー」をクリックしてください。「フロー」というのは、自動化する作業のことです。
フロー名等を指定する画面が開きますが、全て次の画面でも設定できますので、フロー名だけ入力して「作成」をクリックしましょう。
繰り返し頻度や開始時刻を指定する
以下のような作成画面になったはずです。
時計のアイコンの「Recurrence」というのは、繰り返し頻度等を司る何かです。クリックして、さらに「詳細オプションを表示する」もクリックしてみましょう。以下のようになりますね。
この画面で、以下のように設定します。「開始時刻」にもともと入っている日時には末尾に Z
が付いていますが、この Z
は消してください。詳しくは後述。
項目 | 値 |
---|---|
間隔 | 1 |
頻度 | カ月 |
タイムゾーン | (UTC+09:00) 大阪、札幌、東京 |
開始時刻 | 2022-02-01T08:30:00.000 |
アクションを追加する
「Recurrence」の下の「新しいステップ」をクリックして、操作を追加します。検索欄に「tasks」と入力して出てきた「Outlook Tasks」をクリックしてください。
出てきたアクションの一覧の「タスクを作成する (V2)」をクリックしてください。
この画面でタスクの内容を設定します。
「タスク名」を指定する
「件名」にタスク名を入力してください。
「期限」を指定する
「期限」を指定します。期限の欄をクリックして、右側の小さいウィンドウの「式」に以下の式をコピペして OK をクリックしてください。式については後述。
addDays(convertFromUtc(utcNow(), 'Tokyo Standard Time'), 2)
「リマインダー日時」を指定する
「リマインダー日時」を指定します。これも同様に以下の式をコピペして OK をクリックしてください。
addHours(addDays(convertToUtc(startOfDay(convertFromUtc(utcNow(), 'Tokyo Standard Time')),'Tokyo Standard Time'), 1), 17)
リマインダーをオンにする
「詳細オプションを表示する」をクリックして、一番下の「リマインダーをオンにする」を「はい」にします。
保存してテストする
「保存」をクリックして、お勧めされるままにテストしましょう。
「手動」 > 「テスト」または「保存 & テスト」 > 「フローの実行」 > 「完了」です。
エラーが出ず、以下の画面になれば Power Automate の設定は完了です。お疲れ様でした。
To Do を確認する
「すべてのアプリ」の中の「To Do」をクリックしてください。画面左端の「タスク」に先ほどテストしたタスクが入っているはずです。今後は毎月自動で追加されます。
(1月23日にテストを行ったので、期限は1月25日、リマインダー日時は1月24日 17時になっています)
To Do を自動で開く
タスクを自動追加しても、そのリストを見なければ意味がないですね。パソコンを起動するたびに自動で To Do が開くようにしましょう。
To Do のアプリをインストールできる場合はインストールして、以下の要領でスタートアップに追加します。
Windows キー + i
で「設定」アプリを起動し、「アプリ」 > 「スタートアップ」と進む- 「Microsoft To Do」をオンにする
To Do のアプリをインストールできない場合は、以下の要領でインターネット ショートカットを作成し、スタートアップに追加します。
Windows キー + r
で「ファイル名を指定して実行」を起動し、shell:startup
と入力する- 開いたフォルダの何もないところで右クリックし、「新規作成(X)」 > 「ショートカット(S)」をクリックする
- 「項目の場所を入力してください(T):」に
https://to-do.live.com/tasks/inbox
と入力して「次へ(N)」をクリックする - 「このショートカットの名前を入力してください(T):」に
Microsoft To Do
等と入力して「完了(E)」をクリックする
これで全ての作業が完了です。お疲れ様でした。
説明
以下、説明兼覚書です。時間のある時にお読みください。
日時について
こちらが参考になりました。ありがとうございました。
Reccurence の設定
「タイムゾーン」は必ず (UTC+09:00) 大阪、札幌、東京
を指定してください。ここが空欄になっていると、「開始時刻」を UTC(協定世界時、世界の基準となっている時刻)として扱ってしまいます。時差の話ですね。日本標準時 (JST) は UTC に9時間足した時間です。
「タイムゾーン」の指定なしで「開始時刻」を 2022/02/01 08:30:00 とすると、2022/02/01 08:30:00 (UTC) = 2022/02/01 17:30:00 (JST) と変換されてしまい、思い通りの時間にフローを実行できません。「開始時刻」を 2022/02/01 18:00:00 とした場合は、2022/02/02 03:00:00 (JST) に変換されて1日ずれます。
また、「開始時刻」の末尾に Z
が付いていても UTC になります。初期値には Z
が付いていますが、消してください。
Outlook Tasks の設定
「期限」は日本標準時でいいようです。一方「リマインダー日時」は UTC で指定します。最初ハマりました。
式について
それぞれの関数については公式のリファレンスをご覧ください(↓このタイトルどうやって発音するんだろう)。
「式」っていう響き、かっこいいですよね。
期限用の式
以下の式は、先述のOutlook Tasks の期限用の式です。UTC の現在時刻を日本標準時に変換して2日足します。見た通りですね。
addDays(convertFromUtc(utcNow(), 'Tokyo Standard Time'), 2)
Power Automate で現在時刻(=フローを実行した日時)を取得する関数は utcNow()
しかなく、その名の通り UTC の日時を返します。そのため convertFromUtc()
で変換する必要があります。
リマインダー日時用の式
以下の式は、先述のOutlook Tasks のリマインダー日時用の式です。UTC の現在の日時を日本標準時に変換して startOfDay()
で時刻の部分を 00:00:00.000 にした後、UTC に戻して日数と時間を足しています。
addHours(addDays(convertToUtc(startOfDay(convertFromUtc(utcNow(), 'Tokyo Standard Time')),'Tokyo Standard Time'), 1), 17)
上の式を 2022/02/01 08:30:00 (JST) に実行した場合、以下の順で日時を処理していきます。
utcNow() # 2022-01-31T23:30:02.123 convertFromUtc(utcNow(), 'Tokyo Standard Time') # 2022-02-01T08:30:02.123 startOfDay(convertFromUtc(utcNow(), 'Tokyo Standard Time')) # 2022-02-01T00:00:00.000 convertToUtc(startOfDay(convertFromUtc(utcNow(), 'Tokyo Standard Time')),'Tokyo Standard Time') # 2022-01-31T15:00:00.000Z addDays(convertToUtc(startOfDay(convertFromUtc(utcNow(), 'Tokyo Standard Time')),'Tokyo Standard Time'), 1) # 2022-02-01T15:00:00.000Z addHours(addDays(convertToUtc(startOfDay(convertFromUtc(utcNow(), 'Tokyo Standard Time')),'Tokyo Standard Time'), 1), 17) # 2022-02-02T08:00:00.000Z
途中で startOfDay()
をはさむ理由は以下の2つです。
- フローの実行が指定時刻から少しずれるから
- リマインダー日時を指定しやすくなるから
08:30:00.000 丁度に実行するように設定しても、実際には前後に数秒ずれることがあります。そのまま addHours()
等すると、 2022-02-01T17:00:02.123 のように半端な時刻になってしまいます。これだとなんだか気持ち悪いので startOfDay()
で時刻を綺麗に揃えています。
また、現在時刻(=フローを実行した時刻、この場合 08:30)から リマインダーの時刻(17:00)を作るには、17:00 - 08:30 = 08:30 と計算して、addHours()
で8時間足して addHours()
で30分足すことになります。リマインダーの時刻と実行時刻の差を求める必要があり、開始時刻を変更した場合、式も変わってきます。一方 startOfDay()
して 00:00 を取得すれば addHours()
で17時間足すだけで済み、開始時刻に影響されません。
件名用の式
件名に以下の式を入力すると、タスク名に日付や月を含めることができます。
concat('カレンダーをめくる', convertFromUtc(utcNow(), 'Tokyo Standard Time', ' (yyyy/MM/dd)'))
結果例:「カレンダーをめくる (2022/02/01)」
concat('カレンダーをめくる', convertFromUtc(utcNow(), 'Tokyo Standard Time', ' (M月)'))
結果例:「カレンダーをめくる (2月)」
結び
「定期的なタスクを Microsoft To Do に自動で追加する」ことを自動化したい。
関数たのしい。でもやっぱりパイプ演算子がほしいな。↓これを
addHours(addDays(convertToUtc(startOfDay(convertFromUtc(utcNow(), 'Tokyo Standard Time')),'Tokyo Standard Time'), 1), 17)
↓ PowerShell 風に書けると楽。
utcNow() | convertFromUtc($_, 'Tokyo Standard Time') | startOfDay($_) | convertToUtc($_, 'Tokyo Standard Time') | addDays($_, 1) | addHours($_, 17)
参考
- Power Automate のドキュメント - Power Automate | Microsoft Docs
- スケジュールに従ったフローの実行 - Power Automate | Microsoft Docs
- 式関数のリァレンス ガイド - Azure Logic Apps | Microsoft Docs
- Outlook Tasks - Connectors | Microsoft Docs
- Outlook Tasks - Connectors | Microsoft Docs
- Power Automateで指定時間に繰り返し実行するフローを作成する | Nothing comes of nothing