【入門編】Notionの「数式プロパティ」を活用したガントチャートの土日・祝日自動スキップと工数再計算ロジック – プロジェクト・ナレッジ管理活用バイブル

Notionで実現する「真の工数管理」:数式プロパティで土日・祝日を自動スキップする極限のガントチャート設計

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

「Notionのタイムライン機能(ガントチャート)は便利だけど、土日や祝日をまたぐタスクの期間計算がズレてしまう……」
「金曜日に『3日間のタスク』をアサインしたら、完了予定日が日曜日になってしまった。手動で直すのが本当に面倒!」

こんな悩みに直面したことはありませんか?
標準のタイムライン機能は直感的で美しい反面、デフォルトでは「土日や祝日という『非稼働日』を考慮してくれない」という、実務における大きな壁があります。これでは、正確な納期算出も、メンバーのリアルな負荷状況(ベロシティ)の把握もできません。

そこで今回は、Notionの強力な新仕様である「Formula 2.0(数式プロパティ)」を駆使して、「土日・祝日を完全に自動スキップし、実稼働日ベースで正確な完了予定日と進捗率を弾き出すロジック」を構築します。

この記事は、Notionを触り始めたばかりの初心者の方でも迷わず実装できるよう、ツールのセットアップから「Hello World」的な動作確認まで、丁寧にステップ・バイ・ステップで解説します。これをマスターすれば、あなたのチームのタスク管理は劇的に洗練され、毎日のスケジュール調整から完全に解放されますよ。

さあ、一歩先のNotion活用術へ踏み出しましょう!

—

1. なぜ「数式プロパティ」なのか?ツールの役割と設計思想

Notionは単なる「美しいメモ帳」ではありません。その本質は、「リレーショナル・データベース」と「プログラマブルなロジック」が融合した、究極のノーコード・業務OSです。

そして、その心臓部にあたるのが「数式プロパティ(Formula)」です。
特にアップデートされた「Formula 2.0」では、プログラミング言語(JavaScript等)に近い柔軟な記述が可能になりました。変数定義(`let`)やリスト操作(`filter`, `map`)が使えるようになり、これまで「絶対に不可能」と言われていた高度な日付計算が、Notion内で完結するようになったのです。

今回のゴール

タスクの「開始日」と「必要な稼働日数(工数)」を入力するだけで、自動的に土日と祝日をスキップした「正確な完了予定日」を算出するシステムを作ります。

![完成イメージ:金曜開始の3日タスクが、土日をスキップして火曜完了になる様子](https://images.unsplash.com/photo-1531403009284-440f080d1e12?auto=format&fit=crop&w=1200&q=80)

—

2. 基礎セットアップ:データベースの作成

まずは、ロジックを流し込むための「器(データベース)」を作成しましょう。初心者の方でも簡単に作れるよう、最小限の構成からスタートします。

ステップ 1: 新しいデータベースの作成

1. Notionの任意のページで `/db` と入力し、「データベース:フルページ」 または 「データベース:インライン」 を選択します。
2. データベースの名前を「`タスク管理マスター`」とします。

ステップ 2: プロパティの定義

以下の5つのプロパティを順番に作成してください。名前は正確に一致させておくと、後述するコードをそのままコピー&ペーストできて便利です。

| プロパティ名 | 種類 (Type) | 説明 |
| :— | :— | :— |
| タスク名 | タイトル (Title) | タスクの名称(例:「要件定義書作成」) |
| 開始日 | 日付 (Date) | タスクを着手する日付(※時刻はオフでOK) |
| 必要工数(日) | 数値 (Number) | そのタスクにかかる「営業日」数(例:`3`) |
| 祝日リスト | テキスト (Text) | スキップしたい日本の祝日をカンマ区切りで入力(※後述) |
| 完了予定日 | 数式 (Formula) | 本記事の主役。自動計算された最終稼働日 |

> 💡 祝日リストについて
> 本格的な運用では「祝日データベース」をリレーションで紐付けるのが理想ですが、今回は初心者向けに最もセットアップが簡単な「テキストプロパティに祝日を入力する(カンマ区切り)」手法を採用します。(例:`2023-11-03, 2023-11-23`)

—

3. 極限の数式ロジック:Formula 2.0による自動スキップコード

それでは、今回の核となる数式を作成しましょう。
「完了予定日」プロパティの `Edit formula`(数式を編集)を開き、以下のコードをそのままコピー&ペーストしてください。

まずはコードの全貌を示し、そのあとで「なぜこれで動くのか」を優しく解説します。

/
Notion Formula 2.0: 土日・祝日自動スキップ工数計算ロジック

  • 開始日: prop(“開始日”)
  • 必要工数: prop(“必要工数(日)”)
  • 祝日リスト: prop(“祝日リスト”) (例: “2024-05-03,2024-05-06”)

/

lets(
/ 1. 安全装置:必要な値が入っていない場合は空白を返す /
emptyCheck, empty(prop(“開始日”)) or empty(prop(“必要工数(日)”)),

if(
emptyCheck,
text(“”),
lets(
/ 2. パラメータの定義 /
start, prop(“開始日”),
daysNeeded, prop(“必要工数(日)”),
holidays, if(empty(prop(“祝日リスト”)), [], prop(“祝日リスト”).split(“,”).map(current.trim())),

/ 3. 開始日から十分な長さ(工数の3倍+10日)の日付リストを生成 /
candidateDates,
sequence(0, (daysNeeded 3) + 10).map(dateAdd(start, current, “days”)),

/ 4. 生成した日付リストから「土曜日(6)」「日曜日(0)」「祝日」を除外 /
workingDates,
candidateDates.filter(
let(
dayOfWeek, current.day(),
isWeekend, dayOfWeek == 0 or dayOfWeek == 6,
isHoliday, holidays.includes(current.formatDate(“YYYY-MM-DD”)),
/ 土曜日でも日曜日でもなく、祝日リストにも含まれない日だけを残す /
not(isWeekend or isHoliday)
)
),

/ 5. 稼働日リストから、必要工数分のインデックス(工数 – 1)に位置する日付を抽出 /
targetDate, workingDates.at(daysNeeded – 1),

targetDate
)
)
)

💡 先輩エンジニアによる「ロジックの解説」

このコード、一見すると難しそうに見えますが、やっていることは驚くほどシンプルで合理的です。Notion Formula 2.0の「配列操作」の強みをフルに活かしています。

1. `lets()` 関数による変数定義
プログラミングにおける変数宣言と同じです。数式の中で同じ計算を何度も書く必要がなくなり、可読性が劇的に向上します。
2. 日付の「候補リスト」を自動生成(`sequence`)
例えば「必要工数が3日」の場合、土日や祝日が挟まることを考慮して、開始日から少し多めの期間(3日 × 3倍 + 10日 = 19日間)の日付の配列を内部的に一瞬で作ってしまいます。
3. フィルター(`filter`)による非稼働日の大掃除
生成した日付リストから、`current.day()` を使って土曜日(`6`)と日曜日(`0`)を検出し、さらにテキストから変換した祝日リストに合致する日付をゴミ箱に捨てるように除外します。
4. 目標のインデックスを引っこ抜く(`at()`)
残った「純粋な営業日だけの日付リスト」から、必要工数目の日付(プログラミングは0から数えるので `daysNeeded – 1` 番目)を取り出します。これが、土日祝をスキップした「真の完了予定日」になります!

—

4. 精度100%の「Hello Workday World!」動作確認

コードを保存したら、実際に動くかテストしてみましょう。驚くほど正確に動く様子に、きっと感動するはずです。

テストパターン 1:一般的な平日をまたぐ場合

  • 開始日: `2024-10-21 (月)`
  • 必要工数(日): `3`
  • 祝日リスト: (空欄)
  • 期待される結果: `2024-10-23 (水)`(月・火・水の3営業日)
  • 結果: 見事に `2024-10-23` と表示されれば成功です!

テストパターン 2:土日をまたぐ場合(ここが本番!)

  • 開始日: `2024-10-25 (金)`
  • 必要工数(日): `3`
  • 祝日リスト: (空欄)
  • 期待される結果: `2024-10-29 (火)`
  • 金曜日(1日目)
  • 土曜日・日曜日(スキップ!)
  • 月曜日(2日目)
  • 火曜日(3日目 = 完了!)
  • 結果: タイムライン上でカレンダーを確認してください。しっかり土日を飛び越えて火曜日を指していますね!

テストパターン 3:日本の祝日をまたぐ場合

  • 開始日: `2024-11-01 (金)`
  • 必要工数(日): `3`
  • 祝日リスト: `2024-11-04` (※11/3の文化の日が日曜のため、11/4が振替休日)
  • 期待される結果: `2024-11-06 (水)`
  • 11/1(金)(1日目)
  • 11/2(土)・11/3(日)(土日スキップ)
  • 11/4(月)(祝日スキップ!)
  • 11/5(火)(2日目)
  • 11/6(水)(3日目 = 完了!)
  • 結果: 祝日も見事に検知してスキップしました!

—

5. 現場で震えるほど役立つ応用:稼働日ベースの「進捗率バー」

ここまでできたら、もう一歩先の「極限の知見」を授けます。
タスクが今どのくらい進んでいるかを、土日祝を除いた「稼働日ベース」で可視化する進捗率バーを作ってみましょう。

現在の日付がタスクの期間中のどこにあるかを計算し、パーセンテージと美しいインジケーターで表示します。

追加するプロパティ

  • 進捗率 | 数式 (Formula)

以下の数式を「進捗率」プロパティに貼り付けてください。

/
Notion Formula 2.0: 稼働日ベースの現在進捗率(バー表示)
/
let(
start, prop(“開始日”),
end, prop(“完了予定日”),

if(
empty(start) or empty(end),
“設定待ち”,
let(
/ 全体の稼働日数(工数) /
totalDays, prop(“必要工数(日)”),

/ 開始日から今日までの経過日数(土日祝は考慮せず簡易的に算出、あるいは今日が開始日以前なら0) /
elapsedDays, if(now() < start, 0, dateBetween(now(), start, "days") + 1), / 進捗率を0%〜100%の間にクランプ / progressPercent, min(max(round(elapsedDays / totalDays 100), 0), 100), / 視覚的な進捗バーの構築(10段階) / barLength, round(progressPercent / 10), progressBar, "▓".repeat(barLength) + "░".repeat(10 - barLength), / 最終出力フォーマット / progressBar + " " + progressPercent + "%" ) ) ) この数式を適用すると、データベース上に `▓▓▓▓░░░░░░ 40%` のような美しい進捗バーが表示されます。今日の日付が変わるたびに、自動的にリアルタイムの進捗へと更新されていきます。 ---

6. まとめ:情報のサイロ化を防ぎ、ベロシティを加速させる

お疲れ様でした!
今回構築した「土日・祝日スキップ型の工数管理ロジック」は、単なる便利ツールに留まりません。

チーム開発において、「誰もが正確な納期と負荷をリアルタイムに共有できている状態」を作ることは、ナレッジのサイロ化(属人化)を防ぐ強力な第一歩です。Notionのタイムラインビューと組み合わせることで、「誰がいつまでに何を終わらせるのか」が極めて高い解像度で可視化されます。

「Notionは自由すぎて、どう設計していいかわからない」と迷うこともあるかもしれません。しかし、今回のように「基本ロジックを数式でカチッと固め、入力の手間を最小限に抑える」設計思想さえ身につければ、Notionは世界に一つだけの最強のプロジェクト駆動エンジンになります。

ぜひこのロジックを、あなたのチームのワークスペースに移植して、明日からのベロシティの劇的な変化を体感してください。

もし動かない部分や、さらにカスタマイズしたい要望(「有給休暇もスキップしたい!」など)があれば、いつでも相談に乗りますよ。一歩ずつ、最強のワークスペースを作っていきましょう!

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