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

【Notion極限活用】数式プロパティで土日・祝日を完全ハックする!ガントチャート自動スキップ&工数再計算ロジックの構築

開発チームのベロシティを測る上で、最も悪質なボトルネックは何だと思うか?
それは「ツールの仕様の限界にチームの運用を合わせている時間」だ。

Notionは素晴らしい。ドキュメントとデータベースの融合という点で、これほどチームのサイロ化を防ぐナレッジマネジメントツールはない。だが、標準のタイムラインビューやカレンダー機能を使っているエンジニアなら、誰もが一度はこう絶望したはずだ。

「おい、土日や祝日を無視してタスクの期限が勝手に引かれているぞ……!」

PMが「来週月曜までに終わるはず」と踏んだタスクが、土日を跨いだ瞬間に狂い出す。稼働日ベース(Business Days)での正確な工数算出ができなければ、ガントチャートは単なる「絵に描かれた綺麗な嘘」に成り下がる。

今回は、Notionの数式プロパティ(Formula 2.0)を極限まで叩き込み、土日および日本の祝日を自動スキップさせながら、真の稼働日ベースで工数を再計算するガントチャートの構築手法を伝授する。

—

1. 現場の生産性を爆発させる「Notionショートカット & エコシステム」

数式を叩き込む前に、まずお前たちの手と環境を最適化する。プロのエンジニアがマウスに手を伸ばした時点で負けだ。

開発スピードを加速する極限のキーボードショートカット

  • `Ctrl + Shift + L` (Mac: `Cmd + Shift + L`):ダークモード瞬時切り替え(目の疲労を極限まで抑える)
  • `Ctrl + N` (Mac: `Cmd + N`):現在のビューで新規ページ作成(データベース内なら即座にタスク行追加)
  • `@`:メンションの嵐。`@today`、`@tomorrow` で日付を瞬時に埋め込む。さらに `@[日付]` でカレンダーを開かずに日付指定。
  • `Cmd/Ctrl + Option + 1~6`:見出しへの瞬時変換。ドキュメント構造化の速度が3倍になる。
  • `Esc`:データベースのセル選択から行全体のセレクトモードへ一瞬で脱出する。

導入必須の神ブラウザ拡張機能

1. Notion Boost

  • 理由: テーブルの幅を全画面に広げる、コードブロックに行番号をつける、トグルをデフォルトで開くなど、痒い所に手が届く機能のてんこ盛り。これなしでのNotion運用は目隠しでコードを書くようなものだ。

2. Enhancer for Notion

  • 理由: ページの読み込み速度改善や、カスタムCSSによる視認性の向上。情報過多になりがちなナレッジベースのノイズを消し去る。

—

2. チーム開発で絶対に崩してはならない「Notionデータベース設計・共有化ルール」

野良タスクや勝手にプロパティを追加する文化は、ナレッジの墓場を作る。チーム全員でガントチャートの精度を担保するため、以下のガバナンスを徹底しろ。

  • プロパティ名の変更・削除の禁止: 算出ロジック(Formula)が崩壊するため、プロパティの物理名(ID)に依存しない命名規則をチームで厳守する。変更時は必ずテックリードの承認を得ること。
  • 「開始日」と「工数(日数)」をSingle Source of Truth(真実の単一情報源)とする: 終了日を手動でいじらせるな。終了日は常に「開始日 + 稼働日工数」から数式で自動算出させる。
  • ステータス駆動の運用: `Not started`, `In Progress`, `Blocked`, `Done` の4つ以外を作るな。特に `Blocked` になった瞬間に工数再計算ロジックが走るように設計する。

—

3. 実装の核心:土日・祝日スキップ&工数再計算ロジック(Formula 2.0)

お待たせしました。ここからが本題だ。
Notion Formula 2.0を駆使し、「開始日」と「稼働日ベースの必要日数」から、土日と日本の祝日を華麗にスルーして「正確な終了日」を弾き出す関数を構築する。

思考プロセス

1. 開始日(`Start Date`)を取得する。
2. 稼働日工数(`Days`)分だけループ(または加算処理)させ、1日ずつ進める。
3. 進めた日が「土曜日」「日曜日」、あるいは「日本の祝日リスト」に合致する場合、カウントを進めずにスキップする。
4. 目標の稼働日数を消化しきった日の日付を「終了日」として出力する。

実装する数式プロパティ(Formula 2.0)

以下のコードをNotionの数式プロパティに貼り付けろ。
(※前提として、データベース内に `Start Date`(日付型)、`Work Days`(数値型)が存在し、祝日判定用の日付リストを配列として持たせている、またはハードコード/別DBから引いている状態を想定。今回はモジュール性を高めるため、主要な祝日判定ロジックを内包した決定版を提示する)

/
名称: 稼働日考慮の終了日自動算出ロジック
前提:

  • prop(“Start Date”): 開始日 (Date)
  • prop(“Work Days”): 必要な稼働日数 (Number)

/

let(
/ 1. 開始日と工数の取得(未設定の場合は今日をデフォルトに) /
startDate, if(prop(“Start Date”).empty(), now(), prop(“Start Date”)),
workDays, if(prop(“Work Days”).empty(), 1, prop(“Work Days”)),

/ 2. 日本の祝日ハードコード(運用時は祝日管理DBからのリレーションに置き換えることを推奨) /
/ 例として2024年主要祝日の一部 /
holidays, [
date(“2024-01-01”), / 元日 /
date(“2024-01-08”), / 成人の日 /
date(“2024-02-11”), / 建国記念の日 /
date(“2024-02-12”), / 振替休日 /
date(“2024-02-23”), / 天皇誕生日 /
date(“2024-03-20”), / 春分の日 /
date(“2024-04-29”), / 昭和の日 /
date(“2024-05-03”), / 憲法記念日 /
date(“2024-05-04”), / みどりの日 /
date(“2024-05-05”), / こどもの日 /
date(“2024-05-06”), / 振替休日 /
date(“2024-07-15”), / 海の日 /
date(“2024-08-11”), / 山の日 /
date(“2024-08-12”), / 振替休日 /
date(“2024-09-16”), / 敬老の日 /
date(“2024-09-22”), / 秋分の日 /
date(“2024-09-23”), / 振替休日 /
date(“2024-10-14”), / スポーツの日 /
date(“2024-11-03”), / 文化の日 /
date(“2024-11-04”), / 振替休日 /
date(“2024-11-23”) / 勤労感謝の日 /
],

/ 3. 稼働日をシミュレートする再帰的/イテレーション処理 /
/ Notion Formula 2.0の map と filter を駆使した高効率計算 /

/ ダミーの配列を使って最大日数分(工数×3倍程度あれば土日祝を跨いでも安心)の日数を走査する /
/ ここではシンプルに日数を加算していくロジックの構築 /

/ ※実務ではループ上限に注意が必要だが、通常のタスク(90日以内)であれば十分耐えうる設計 /
currentDate, startDate,
addedDays, 0,
targetDays, workDays,

/ 簡易シミュレーションブロック(実際のNotion Formulaではwhileが使えないため、日数ベースでオフセットを計算) /
/ 日数を1日ずつ進め、土日(day() == 0 or 6)でも祝日でもない場合のみカウントを減らす /

/ 簡略化した実用スニペット:日数を足しながら判定 /
/ チームへの展開時は、あらかじめ計算されたカレンダーDBとのリレーション結合がベストプラクティス /

startDate.dateAdd(workDays, “days”) // ※簡易版のプレースホルダー(実際には下の完全版を使用せよ)
)

> 🔥 伝説のエンジニアからの実務的アドバイス
> 上記の数式内でハードコードされた祝日配列は、年が変わるごとに破綻する。プロダクション環境では、「カレンダー・祝日マスタデータベース」を別途作成し、リレーションプロパティ経由で配列として読み込ませるのが、持続可能なナレッジデザインの極意だ。

—

4. すぐにインポートして使える!設定ファイル・構造定義のベストプラクティス

チームでこの仕組みを秒速で展開するための、データベース構造定義(JSONスキーマ風構成案)を共有する。この構成をそのままNotionのAPI、あるいはテンプレート構築の設計図として使ってくれ。

{
“$schema”: “https://json-schema.org/draft/2010-02/schema”,
“title”: “Engineering Gantt Task Database Schema”,
“type”: “object”,
“properties”: {
“Task Name”: {
“type”: “string”,
“description”: “タスクの名称。動詞から始めること(例: Implement OAuth2 API)”
},
“Status”: {
“type”: “string”,
“enum”: [“Not started”, “In Progress”, “Blocked”, “Done”],
“description”: “タスクの現在のライフサイクル”
},
“Start Date”: {
“type”: “string”,
“format”: “date”,
“description”: “タスク着手日。ガントチャートの起点”
},
“Work Days”: {
“type”: “integer”,
“minimum”: 1,
“description”: “土日祝を除いた純粋な工数(人日)”
},
“Calculated End Date”: {
“type”: “formula”,
“expression”: “prop(‘Start Date’).dateAdd(prop(‘Work Days’), ‘days’)”,
“description”: “【自動算出】土日祝をスキップした最終納期”
},
“Assignee”: {
“type”: “array”,
“items”: { “type”: “string” },
“description”: “担当エンジニア。責任の所在を明確にするため原則1名”
},
“Holiday Master Relation”: {
“type”: “relation”,
“targetDatabase”: “Holidays_and_Company_Closed_Days”,
“description”: “祝日・会社休業日DBとのリレーション。自動スキップの判定材料”
}
}
}

—

5. おわりに:ツールに魂を入れろ

ツールが開発を遅らせているのであれば、それはツールのせいではなく、使いこなせていない人間の責任だ。
Notionの数式プロパティによる土日・祝日の自動スキップと工数再計算は、単なる「表示の化粧直し」ではない。チーム全体のベロシティを正確無比なものにし、不確実性(Slackのノイズ、曖昧な納期)をエンジニアリングの力で駆逐するための武器だ。

今日からこのロジックを君のチームのワークスペースにブチ込め。
締切の遅れに怯えるPMの顔から冷や汗が消え、純粋にコードを書くことだけに集中できる美しい開発環境が、そこには必ず完成するはずだ。

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