Notion から Outlook カレンダー登録 : Notion Tips (145)

はじめに

Notion Tips の第145回目は Notion から Outlook にカレンダー登録するリンクを解説します。

これまでの使い方

現在は、Alfred で anc コマンドを実行すると、Notion タスクと Google Calendar イベントが同時に作成されます。このとき、職場の Power Automate で作成した GoogleCalendarToOutlook というフローで、Outlook カレンダーイベントが自動的に実行されています。

Power Automate

中身は単純で Google Calendar イベントがカレンダーに追加されたときに、Outlook イベントが作成されるようにしているだけです。あくまで作成だけするだけで、更新や削除には対応していません。ただ、一つ問題があって、終日予定が朝9時からの24時間タスクになってしまい、カレンダーだと二日間の予定に見えてしまいました。

Power Automate のフロー

また、そもそも Outlook カレンダーは職場で会議の空き時間を調整するために共有しているものです。しかし、この仕組みだと私の休日などの個人予定まで職場にさらけ出すことになります。このため、毎週日程確認のたびに、個人予定を削除しまくっている状態です。作るよりは消すほうが簡単なので、我慢して使っていました。

Outlook カレンダーイベントを作成する deeplink

141回目で新規メール雛形を作成するリンクを解説しました。同じように Outlook イベントを作成する deep リンクも存在しています。この記事から参照したページにも掲載されていました。

hkob.hatenablog.com

しかし、その内容に従って実行してみましたが、うまくいきませんでした。いろいろ探したところ、以下の記事を見つけました。どうやらビジネスプランの Outlook の場合だけ、リンク中の「+」がスペースに変換されてしまい、上手く時刻と認識されなくなるようです。

techcommunity.microsoft.com

理由がわかれば対処可能なので、実際に Formula でリンクを作成してみます。

toMicrosoft Formula の作成

普段は使わないリンクなので、ページのパネルの一番上に設置しました。

toMicrosoft Formula

Formula は以下のようになりました。offset の「+」の部分を「%2b」にエンコードしています。また、開始時刻・終了時刻が 00:00 の場合には、終日イベントと判断し、allday フラグを true にしています。また、Office Calendar の特性か終日イベントの場合、終了日は1日後の日付を入れる必要があるようです。そこで、allday の時だけ終了日を 1 日追加しています。

prop("Start date").empty() ? "" :
    lets(
        /* 開始日 */
        sd, prop("Start date").dateStart(),
        /* 終了日 */
        ed, prop("Start date").dateEnd(),
        /* 終日イベントかどうか? (開始日・終了日の時間が両方00:00かを確認) */
        allday, sd.formatDate("HHmm") + ed.formatDate("HHmm") == "00000000",
        /* 終日イベントなら終了日を一日後ろにする */
        edd, allday ? ed.dateAdd(1, "days") : ed,
        /* タイムゾーンのオフセット (日本なら +9時間、ただし + が化けるので encode) */
        offset, "%2b09:00",
        /* 時間のフォーマット設定: 日付のみ、時間も含むかの選択 */
        format, allday ? "YYYY-MM-DD" : ("YYYY-MM-DDTHH:mm:00" + offset),
        /* 開始日付文字列 */
        startdt, "startdt=" + sd.formatDate(format),
        /* 終了日付文字列 */
        enddt, "enddt=" + edd.formatDate(format),
        /* 終日フラグ */
        allday_str, "allday=" + allday,
        /* リンクを作成 */
        link("toMicrosoft", [
            "https://outlook.office.com/calendar/deeplink/compose?subject=" + prop("Task name"),
            startdt, enddt, allday_str
        ].join("&"))
    )

動作確認

今回も事前に X に動画をポストしていました。Notion のタスクからクリックするだけでイベント作成画面に遷移します。

おわりに

今回は、Notion から Outlook カレンダーにイベントを登録するリンクを解説しました。終日イベントも正しく登録できるようになったので、基本的にこちらに移行する予定でいます。数日したら Power Automate のイベント自動作成は止める予定です。

hkob.notion.site