タイダログ

もっと怠けますか? (y/n)

定期的なタスクを Microsoft To Do に自動で追加する

定期的なタスクを忘れないように Microsoft To Do を使おうと思ったのですが、どうせその追加すら忘れるので Power Automate で自動化しました。

作業環境

やりたいこと

定期的に行うタスクを自動で Microsoft To Do に追加します。

今回は、毎月1日の午前8時30分に「カレンダーをめくる」というタスクを追加します。タスクの期限は2日後とし、タスク追加の翌日午後17時00分にリマインダーを設定します。2月の場合は以下のようになります。

日時 イベント
2/1 08:30 AM タスク追加
2/2 17:00 PM リマインダー
2/3 期限

完成形

こんな風になります。

f:id:taidalog:20220123233959p:plain
フローの完成形

f:id:taidalog:20220124001224p:plain
タスクを追加できた

手順

Power Automate にアクセスする

まずは https://www.office.com/ からサインインしてください。

画面左下の「すべてのアプリ」アイコンをクリックし、「Power Automate」をクリックしてください。

f:id:taidalog:20220123234050p:plain
「Power Automate」をクリック

フローを作成する

画面左端の「作成」をクリックし、「一から作成」の「スケジュール済みクラウド フロー」をクリックしてください。「フロー」というのは、自動化する作業のことです。

f:id:taidalog:20220125222228p:plain
「スケジュール済みクラウド フロー」をクリック

フロー名等を指定する画面が開きますが、全て次の画面でも設定できますので、フロー名だけ入力して「作成」をクリックしましょう。

f:id:taidalog:20220125222326p:plain
フロー名を指定

繰り返し頻度や開始時刻を指定する

以下のような作成画面になったはずです。

f:id:taidalog:20220123234331p:plain
フロー作成画面

時計のアイコンの「Recurrence」というのは、繰り返し頻度等を司る何かです。クリックして、さらに「詳細オプションを表示する」もクリックしてみましょう。以下のようになりますね。

f:id:taidalog:20220123234506p:plain
「Recurrence」>「詳細オプションを表示する」をクリック

この画面で、以下のように設定します。「開始時刻」にもともと入っている日時には末尾に Z が付いていますが、この Z は消してください。詳しくは後述

項目
間隔 1
頻度 カ月
タイムゾーン (UTC+09:00) 大阪、札幌、東京
開始時刻 2022-02-01T08:30:00.000

f:id:taidalog:20220123234619p:plain
繰り返し頻度や開始時刻を設定

アクションを追加する

「Recurrence」の下の「新しいステップ」をクリックして、操作を追加します。検索欄に「tasks」と入力して出てきた「Outlook Tasks」をクリックしてください。

f:id:taidalog:20220124004649p:plain
Outlook Tasks」を検索してクリック

出てきたアクションの一覧の「タスクを作成する (V2)」をクリックしてください。

f:id:taidalog:20220123235916p:plain
「タスクを作成する (V2)」をクリック

この画面でタスクの内容を設定します。

f:id:taidalog:20220124000005p:plain
タスクの設定画面

「タスク名」を指定する

「件名」にタスク名を入力してください。

f:id:taidalog:20220124000058p:plain
タスク名を入力

「期限」を指定する

「期限」を指定します。期限の欄をクリックして、右側の小さいウィンドウの「式」に以下の式をコピペして OK をクリックしてください。式については後述

addDays(convertFromUtc(utcNow(), 'Tokyo Standard Time'), 2)

f:id:taidalog:20220124000330p:plain
「期限」の欄をクリック

f:id:taidalog:20220124000404p:plain
式をコピペ

「リマインダー日時」を指定する

「リマインダー日時」を指定します。これも同様に以下の式をコピペして OK をクリックしてください。

addHours(addDays(convertToUtc(startOfDay(convertFromUtc(utcNow(), 'Tokyo Standard Time')),'Tokyo Standard Time'), 1), 17)

f:id:taidalog:20220124000722p:plain
「リマインダー日時」に式をコピペ

リマインダーをオンにする

「詳細オプションを表示する」をクリックして、一番下の「リマインダーをオンにする」を「はい」にします。

f:id:taidalog:20220124000817p:plain
リマインダーをオンにする

保存してテストする

「保存」をクリックして、お勧めされるままにテストしましょう。

f:id:taidalog:20220124000927p:plain
保存してテスト

「手動」 > 「テスト」または「保存 & テスト」 > 「フローの実行」 > 「完了」です。

エラーが出ず、以下の画面になれば Power Automate の設定は完了です。お疲れ様でした。

f:id:taidalog:20220124001043p:plain
この画面になれば成功

To Do を確認する

「すべてのアプリ」の中の「To Do」をクリックしてください。画面左端の「タスク」に先ほどテストしたタスクが入っているはずです。今後は毎月自動で追加されます。

(1月23日にテストを行ったので、期限は1月25日、リマインダー日時は1月24日 17時になっています)

f:id:taidalog:20220124001224p:plain
タスクを追加できた

To Do を自動で開く

タスクを自動追加しても、そのリストを見なければ意味がないですね。パソコンを起動するたびに自動で To Do が開くようにしましょう。

To Do のアプリをインストールできる場合はインストールして、以下の要領でスタートアップに追加します。

  1. Windows キー + i で「設定」アプリを起動し、「アプリ」 > 「スタートアップ」と進む
  2. Microsoft To Do」をオンにする

To Do のアプリをインストールできない場合は、以下の要領でインターネット ショートカットを作成し、スタートアップに追加します。

  1. Windows キー + r で「ファイル名を指定して実行」を起動し、shell:startup と入力する
  2. 開いたフォルダの何もないところで右クリックし、「新規作成(X)」 > 「ショートカット(S)」をクリックする
  3. 「項目の場所を入力してください(T):」に https://to-do.live.com/tasks/inbox と入力して「次へ(N)」をクリックする
  4. 「このショートカットの名前を入力してください(T):」に Microsoft To Do 等と入力して「完了(E)」をクリックする

これで全ての作業が完了です。お疲れ様でした。

説明

以下、説明兼覚書です。時間のある時にお読みください。

日時について

こちらが参考になりました。ありがとうございました。

www.ncon.blog

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 で指定します。最初ハマりました。

式について

それぞれの関数については公式のリファレンスをご覧ください(↓このタイトルどうやって発音するんだろう)。

docs.microsoft.com

「式」っていう響き、かっこいいですよね。

期限用の式

以下の式は、先述の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つです。

  1. フローの実行が指定時刻から少しずれるから
  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)

参考