【入門編】Notionの「数式プロパティ2.0」を活用した日付・時間の複雑な差分計算:稼働日ベースのタスク遅延アラートシステムの構築 – プロジェクト・ナレッジ管理活用バイブル

こんにちは!日々のプロジェクト管理、順調に進んでいますか?

タスク管理ツールで「締切まであと3日!」と表示されていて安心していたら、「あ、明日と明後日は土日だから、実質的に作業できるのは今日しかないじゃん……!」 と青ざめた経験、一度や二度はありますよね。

一般的なカレンダー通りの単純な日数計算(全日計算)だと、休業日(土日)がカウントに含まれてしまい、現場のリアルな「残稼働日(営業日)」とギャップが生まれてしまいます。これがプロジェクトの遅延を引き起こす静かな犯人です。

今回は、Notionの強力な「数式プロパティ2.0(Formulas 2.0)」を活用して、土日を除外した「本当の稼働日」を自動計算し、危険度に応じて動的に警告アイコンを変化させる『稼働日ベースのタスク遅延アラートシステム』を一緒に作っていきましょう!

「数式プロパティってなんだか難しそう…」という初心者の方も安心してください。ツールの基礎から一歩ずつ、丁寧に解説していきますね。これをマスターすれば、あなたのNotionデータベースは一気にプロ仕様のマネージメントツールへと進化しますよ!

—

1. そもそもNotionの「数式プロパティ2.0」とは?

Notionには以前から「関数(Formula)」プロパティがありましたが、2.0にアップデートされたことでプログラミング言語(JavaScriptに近い感覚)のような柔軟で強力な記述が可能になりました。

特に重要な進化は以下の3点です。

1. 変数の定義(`let` / `lets`): 途中の計算結果に名前をつけて使い回せるようになり、コードの可読性が劇的に向上しました。
2. 配列(リスト)とループ処理のサポート: 日付のリストを作成したり、条件に合う要素だけを絞り込む(`filter`)といった高度なデータ操作が可能になりました。
3. リッチテキストとスタイリング(`style`): 文字に色をつけたり太字にしたりと、視覚的なフィードバックを数式だけで作れるようになりました。

今回はこの「配列」と「絞り込み」の機能をフル活用して、「指定された期間から土曜日と日曜日だけを抜き取る」という処理を実現します。

—

2. 準備編:データベースのセットアップと「Hello World」

まずは、動作確認をするための最小限のデータベースを作成しましょう。

ステップ1:プロパティの作成

新しいNotionページに「インラインデータベース」を作成し、以下のプロパティを用意してください。

| プロパティ名 | 種別 | 説明 |
| :— | :— | :— |
| タスク名 | タイトル | タスクの名称 |
| ステータス | ステータス | 「未着手」「進行中」「完了」などを設定 |
| 締切日 | 日付 | タスクの完了期限 |
| アラート表示 | 数式 | ここに今回の数式を書きます! |

ステップ2:Hello Worldで動作確認してみよう!

まずは数式プロパティが正しく動くか、超シンプルな「今日から締切日までの単純な日数(全日)」を計算するHello Worldを試してみましょう。

プロパティ「アラート表示」の編集画面を開き、以下のコードを入力してみてください。

/ 【Hello World】単純な日付差分の計算 /
dateBetween(prop(“締切日”), now(), “days”)

動作確認:
「締切日」に3日後の日付を入れると `3` と表示されれば大成功です!
これがすべての基礎となります。ただし、これだと土日も「1日」として数えられてしまいますよね。ここからが本番です。

—

3. 実践編1:土日を除外した「稼働日」を計算する極意

土日を除外した稼働日数を計算するために、どのようなロジックを組むべきか、プログラミング的な思考プロセスを整理してみましょう。

アルゴリズムの考え方

1. 期間の算出: 「今日」から「締切日」までの全日付のリスト(配列)を作る。
2. 曜日の判定: リスト内の各日付について、曜日を調べる(Notionの `day()` 関数は、日曜日を `0`、土曜日を `6` として返します)。
3. 土日の除外: 曜日が `0`(日)でも `6`(土)でもない日付だけをフィルタリングして抽出する。
4. 個数のカウント: 残った日付の数(要素数)を数える。これが「残稼働日数」です!

これをNotion Formula 2.0で表現すると、以下のような美しいコードになります。

稼働日計算の数式コード

「アラート表示」プロパティを以下の数式に書き換えてみましょう。

/
==============================================
稼働日(土日除外)計算ロジック
==============================================
/
lets(
// 1. 今日の日付(時刻を切り捨てて日付のみにする)
today, parseDate(formatDate(now(), “YYYY-MM-DD”)),

// 2. 締切日(時刻を切り捨てて日付のみにする)
dueDate, parseDate(formatDate(prop(“締切日”), “YYYY-MM-DD”)),

// 3. 今日から締切日までの全日数を取得
totalDays, dateBetween(dueDate, today, “days”),

// 締切日が設定されていない場合は blank を返す
if(empty(dueDate), null,
// 4. 全日付のシーケンス(インデックス配列)を生成し、各日付を計算
// 例: totalDaysが3なら [0, 1, 2] の配列を作り、今日+0日, 今日+1日… を調べる
lets(
dayIndexes, maps(repeat(“.”, abs(totalDays) + 1), index),

// 日付の配列に変換
dateList, dayIndexes.map(
dateAdd(today, current if(totalDays >= 0, 1, -1), “days”)
),

// 土曜日(6)と日曜日(0)を除外した配列を作成
workDays, dateList.filter(
current.day() != 0 and current.day() != 6
),

// 稼働日数をカウント(当日を含める調整として-1、過去の場合は負数にする)
workDayCount, (workDays.length() – 1) if(totalDays >= 0, 1, -1),

workDayCount
)
)
)

コードのポイント解説

  • `lets(…)` 関数: 複数の変数を定義できる関数です。途中の計算に `today` や `dueDate` と名前をつけられるため、後から見返したときに構造がとてもわかりやすくなります。
  • `formatDate` & `parseDate`: 時間(hh:mm)の差異による計算のズレを防ぎ、「日付単位」で正確に判定させるためのプロのテクニックです。
  • `day() != 0 and day() != 6`: ここで日曜日(0)と土曜日(6)を綺麗に弾いています。

—

4. 実践編2:視覚的に危険度を伝える「動的アラートシステム」

稼働日数が計算できたら、最後にあらゆる現場で絶大な効果を発揮する「ステータス連動型・視覚アラート」に進化させましょう!

タスクの「ステータス」が『完了』の場合は「✅ 完了」と表示し、未完了の場合は残稼働日数に応じて以下のように表示を変えるロジックを組み込みます。

  • 期限切れ(負の数): 🚨 【遅延】〇稼働日の遅れ!(赤色・太字)
  • 残り1〜2稼働日: 🔥 【緊急】あと〇稼働日(赤色)
  • 残り3〜5稼働日: ⚠️ 【注意】あと〇稼働日(黄色)
  • 残り6稼働日以上: 🟢 【順調】あと〇稼働日(緑色)

完成版:フル機能アラートの数式コード

以下のコードを「アラート表示」プロパティに貼り付けてみてください!

/
==============================================
稼働日ベース タスク遅延アラートシステム(完成版)
==============================================
/
lets(
// — 日付の初期処理 —
today, parseDate(formatDate(now(), “YYYY-MM-DD”)),
dueDate, parseDate(formatDate(prop(“締切日”), “YYYY-MM-DD”)),

// 締切未設定チェック
if(empty(dueDate), “📅 締切未設定”,

// ステータスが完了かチェック
if(prop(“ステータス”) == “完了”, “✅ 完了”,

// — 稼働日数の計算 —
lets(
totalDays, dateBetween(dueDate, today, “days”),
dayIndexes, maps(repeat(“.”, abs(totalDays) + 1), index),
dateList, dayIndexes.map(dateAdd(today, current if(totalDays >= 0, 1, -1), “days”)),
workDays, dateList.filter(current.day() != 0 and current.day() != 6),

// 残稼働日数(今日を除く純残日数)
daysLeft, (workDays.length() – 1) if(totalDays >= 0, 1, -1),

// — 危険度に応じたアラート表示の分岐 —
if(daysLeft < 0, / 遅延発生 / ("🚨 【遅延】 " + style(format(abs(daysLeft)) + " 稼働日超過!", "red", "bold")), if(daysLeft <= 2, / 期限直前(緊急) / ("🔥 【緊急】 残り " + style(format(daysLeft), "red", "bold") + " 稼働日"), if(daysLeft <= 5, / 警告(注意) / ("⚠️ 【注意】 残り " + style(format(daysLeft), "yellow") + " 稼働日"), / 余裕あり(順調) / ("🟢 【順調】 残り " + style(format(daysLeft), "green") + " 稼働日") ) ) ) ) ) ) ) ---

5. 動作確認してみよう!

実際にいくつかテスト用のタスクを入力して、どのように表示されるか確かめてみましょう!

1. 金曜日に「翌週の火曜日」が締切のタスクを作成してみる

  • 全日計算だと「残り4日」になりますが、土日を除外するため「🔥 【緊急】 残り 1 稼働日」(月曜日のみ)と正確に表示されるはずです!

2. ステータスを「完了」に変えてみる

  • 自動的に「✅ 完了」に切り替わり、アラートが消滅します。

3. 過去の日付を締切にしてみる

  • 「🚨 【遅延】 〇稼働日超過!」と赤字で強調されます。

この表示があれば、朝会(スタンドアップミーティング)でデータベース一覧を開いた瞬間に、「今日絶対に手をつけなければいけないタスク」がひと目でわかりますね!

—

まとめと次のステップ

お疲れ様でした!今回はNotionの数式プロパティ2.0を使って、土日を除外した高度な「稼働日ベースの遅延アラートシステム」を構築しました。

今回学んだ要素は、他のさまざまな業務の仕組み化にも応用できます。

  • `lets` による計算プロセスの変数化
  • 配列と `filter` による特定の曜日・データの抽出
  • `style` 関数による動的な視覚フィードバック

Notionは単なるメモ帳ではなく、数式2.0を使いこなすことで「現場の心理的安全性を高め、チームのベロシティ(推進力)を最大化する自動化ツール」へと変貌します。

まずはご自身のタスク管理データベースにこの数式をコピー&ペーストして、その快適さを体感してみてください。毎日の業務が驚くほどスムーズになり、締切に追われるストレスから解放されますよ!

もし「自社の祝日カレンダーも除外したい!」といったさらなるカスタマイズに挑戦したくなった時は、またいつでも聞いてくださいね。応援しています!

タイトルとURLをコピーしました