はじめに ネクストモードの南です。 チームでNotionのデータベースを使っていると、他のメンバーが追加したり更新したページをわかるようにしたい、というケースがあると思います。...
【Notion】期限が過ぎたタスクをSlackに通知する方法をNotionの機能だけで実装してみた
はじめに
こんにちは、ネクストモードの鮎澤です。
Notionでタスク管理をする際、多くの方が期限を設定されていると思いますが、タスクの期限が迫っているのか、すでに過ぎているのかが気づきにくいという声をよく耳にします。解決案として、リマインダー機能が有効ですが、執筆時点(2024年12月)では繰り返し通知してくれるような機能は実装されていません。
そこで本ブログでは、Notionの機能だけで期限が過ぎたタスクをSlackに通知する方法を考えてみました。
最初に結論を述べると、完全に自動化することはできませんでした。それでも毎日Notionにアクセスするユーザーさんであれば、参考になるかと思いますので、強引に実装した私の備忘録をぜひ楽しんでご覧ください。
動作について
はじめにどのような動作になるか紹介します。
-
タスク管理DBの期限プロパティに期限日を設定します。
-
トリガーボタンをクリックすると、トリガー用プロパティの値が編集されたことをトリガーに、期日プロパティに期日が入力されます。
-
期日プロパティが編集されると、期日が過ぎたタスクのみSlackに通知が届きます。
-
完了したタスクの通知は不要なので、期限日クリアボタンをクリックし期限プロパティの値をクリアします。
-
トリガーボタンをクリックすると期日プロパティが空白になり、オートメーションの設定によりSlackに通知されなくなります。
-
この繰り返しです。
ちなみに、期日を過ぎていないタスクや期日当日のタスクは、下図のように期日プロパティに表示されます。
仕組み
動作の流れはなんとなく理解いただけたと思うので、次は仕組みの部分について紹介していきます。この仕組みを実装するために、2つのデータベースオートメーションと、2つのボタンを使用しました。
期日表示用オートメーション
データベースのオートメーション機能を使い、トリガー用プロパティが編集された時点で、期限プロパティの日付から期日が自動計算され、テキストプロパティで作成した期日プロパティに表示されます。
期日表示用オートメーションでは数式を利用しています。オートメーションの数式と変数の詳細は以下のブログをご覧ください。
期日表示用オートメーションで使用した数式はこちらです。
オートメーションの数式で期限プロパティを指定する際に、少し特殊な書き方をするため下図と併せてご参考ください。
数式に記述した関数について説明します。
dateBetween(日付1, 日付2, 単位)
- 2つの日付の間の期間を計算する関数です。
- 単位には "days"(日)、"months"(月)、"years"(年)などを指定できます。
- 例:dateBetween(now(), 締切日, "days") で現在から締切日までの日数が分かります。
dateAdd(日付, 数値, 単位)
- 指定した日付に時間を加算または減算する関数です。
- 単位には "hours"(時間)、"days"(日)、"months"(月)などを指定できます。
now()
- 現在の日時を返す関数です。
- 日付の比較や計算の基準点として使用されます。
数式内では時差調整を行っており、サンフランシスコと日本の時差「-17時間」としています。9時間の時差だと考えていたのですが想定通りの結果にならなかったので、時差調整はサンフランシスコにしました。
この数式は期限日に応じて異なるメッセージを表示する条件分岐を行っており、以下のように動作します。
期限プロパティが空の場合
- 空白を表示します(if(empty(prop("期限")), "")の部分)。
期限プロパティが入力されている場合
- 期限が過ぎている場合:赤色で「Check! 期日からX日過ぎています」と表示しています。
- 期限当日の場合:黄色で「期日当日です」と表示しています。
- 期限までまだ日数がある場合:緑色で「期日まであとX日です」と表示しています。
Slack通知用オートメーション
Slack通知用オートメーションの動作はシンプルで、期日プロパティの値に「Check!」が含まれていたら、Slackに通知するアクションを設定しています。余談ですが、執筆時点(2024年12月)だとトリガーに日本語を含めてもオートメーションが動きません。そのため、期日プロパティの値に英語を含めるように、期日表示用オートメーションで「Check! 期日からX日過ぎています」と表示するように設定しました。
トリガーボタン
トリガーボタンは、テキストプロパティで作成したトリガー用プロパティに、クリック時の時刻を記録するように設定しています。このトリガー用プロパティは、期日表示用オートメーションを動かすためのトリガーとして機能します。
当初の予定ではトリガー用プロパティはテキストではなく数式を使ってリアルタイムで日付が更新されるようにし、数式プロパティが編集されたことをトリガーに動作させたかったのですが、トリガーで数式プロパティを選択できなかったため、代替案としてボタンブロックを設置しました。これが一部手動になってしまった要因でもあります。
トリガー用プロパティの設定は以下のとおりです。
期限日クリアボタン
期限日プロパティに日付があると、データベースのオートメーションが動作し、不要な通知がSlackに届いてしまいます。予防策として、期限プロパティが空白になっていれば期日表示用オートメーションが動かないので、ステータスプロパティが「完了」になったら期限プロパティがクリアされるように設定しています。
まとめ
ブログを書いているときに、トリガーボタンと期限日クリアボタンの配置が逆の方が、動線や使い方としては正しいのではないかと思いました。ただ、期限日クリアボタンについて先に説明すると、却って分かりづらい内容になってしまうので、もし本ブログを参考にされる方は、ボタンの順序はお好みで押していただければと思います。
ここからは宣伝ですがネクストモードでは現在、アドベントカレンダー企画を開催しています!働き方のベースとなっている『ネクストモードのカルチャー』をどのように絡めて日々業務を遂行しているかについて、メンバー個々のユースケースや実践例、想いなどを様々な切り口でご紹介していますので、ぜひご覧ください!
Notionについてのお問い合わせ
ネクストモード社は、日本で3社しかないNotion販売代理店です。(2023年01月01日現在)
Notion導入を検討の際は是非下記からお問い合わせ頂けますと幸いです。