はじめに
Notion Tips の第177回目は、今週の未完了タスクをメール送信するオートメーションを解説します。こちらもネタ元はこちらの Notion API を触ってみようの会からです。
NotionキャンパスリーダーのHaruki(@Haruki_dev)とAsahi(@ashh_log)主催の【NotionAPIを触ってみようの会】に参加しています!! https://t.co/ZcZoRMPy6o #NotionAPIを触ってみようの会
— hkob|Notion Ambassador (@hkob) 2024年12月14日
本編終了後に、Haruki さんが未消化タスクの通知を GAS で作成しているとのことでした。日付が決まっている未消化のタスク一覧を取得し、Gmail に HTML メールで送信してくれるものです。かなり見た目もこだわっていていい感じです。
昨日のイベントで紹介したNotionタスクの自動Gmail通知のスクリプト全公開(配布)します!って言ったらどれぐらい需要ありますか?🤔 pic.twitter.com/rmmMdSLoug
— Haruki | NotionCampusLeader (@Haruki_dev) 2024年12月14日
その後、あさぎさんのメール通知を数式で書いているのを見つけました。これを見て、なんとかタスク通知もオートメーションだけで実現できないかとあがいた記録です。
NotionフォームとGmail通知のオートメーションを組み合わせてみたけどかなり良い感じ。
— あさぎ|今すぐ実践したくなるNotion術 (@asagi_notion) 2024年12月15日
回答を受信すること(ページ作成)をトリガーにして、回答内容を表示させる数式を組むことで、Gmail内からすぐに確認できるから便利◎
今後、Notionテンプレートのアンケートにもこの仕組みを活用していきたい。 pic.twitter.com/AFVbdMRUEi
ただし、実際にはもう一つの iOS オートメーションも必要でした。今回は、その作成記録です。
Mail trigger データベースの作成
今回は、Mail trigger データベースを作成します。このデータベースにページが追加された時に、オートメーションが発火します。ここではすでに今日のメールを送信済なので、一つだけページが作成されています。送信が終わってしまえばゴミページなので、適当なタイミングで全て消します。

プロパティは以下の通りです。
- 名前: 意味はありません。送信が終わると「送信済」となります。
map: 日付を設定したらスプリントを自動設定するオートメーション: Notion Tips (164) - hkob’s blog で作成した 全てのスプリントを保持した以下のようなデータベースへのリレーションです。ここには all というページのみが存在しています。過去のスプリントは参照しないので、現在・次・将来のスプリントだけが登録されています。なお、このリレーションは片方向のみとしています。all への参照ができればいいだけだからです。

map データベース date: 作成された日付が入ります。
week_id: date からスプリントの名前を検索するための週番号を計算します。UTC で計算するため、9時間のオフセットを加算しています。こうしないと月曜日の9時前のタスクが前のスプリントに入ってしまうためです。

week_id の数式 prop("date").dateAdd(9, "hours").formatDate("GGGG-WW")
オートメーションの作成
オートメーションはこの Mail trigger に設定します。

このオートメーションのトリガはページを追加とします。アクションの最初は、プロパティの値を適切に設定することです。map を all に設定し、日付を「トリガーされた日付」とします。これによって week_id が週番号として計算されます。

その後、これらの情報からメールを送信します。送信元(Gmail)、送信先(Gmail以外も可)、件名は適当に設定します。

メッセージは数式で作成します。かなり複雑ですが、追っていけば十分理解できる内容かと思います。下のテキストは少し読みやすいように改行を追加してみました。

lets( sprint, prop("トリガーページ").prop("map") .first() .prop("Sprints") .filter(current.prop("week_id") == prop("トリガーページ").prop("week_id")) .first(), tasks, sprint.prop("Tasks") .filter(current.prop("Status") != "Done") .sort(current.prop("Start date")), tasks.map( [ current.prop("Start date").formatDate("YYYY-MM-DD H:mm"), current.prop("Task name").link("notion://notion.so/" + (current.id())) ].join(" ") ).join("\n") )
手動検証
自動化の前に手動でページを作成して、オートメーションの動作を確認してみます。実際に動かしてみた例を X にポストしました。個人で使う分にはこれでも十分です。必要に応じてリンクをクリックすると、そのページに飛ぶことができます。
メールの画面はこんな感じです。 @Haruki_dev さんのほど綺麗じゃないですが、個人利用だから十分かなと。link で飛べるのは同じです。#Notion pic.twitter.com/aLkUOoqaHR
— hkob|Notion Ambassador (@hkob) 2024年12月16日
繰り返しテンプレートでの検証 → 失敗
前に繰り返しテンプレートでページ作成時にオートメーションが起動するのではと検証した気がするのですが、実際にはオートメーションで作成されたページでは、オートメーションは発動しませんでした。ということで、全てを Notion で完結することはできませんでした。
iOS オートメーションでの検証
ページの作成さえできればいいので、 iOS のショートカットアプリで、時刻トリガでページ作成を行いました。適当な時刻で試したところ、無事メール送信されたことを確認しました。

おわりに
これで毎日 7:30 に今週分の未完了タスクが送信されることになります。Notion だけでも十分なタスク一覧の送付ができることが確認できました。俯瞰して少し先の予定まで確認できるのはやはり便利ですね。