ひとことで言うと#
タスク間の「先にやらないと次に進めない」関係を有向非巡回グラフ(DAG)で描き出し、クリティカルパスやボトルネックを一目で把握する手法。複雑なプロジェクトほど「何が何を止めているか」を可視化する効果が大きい。
押さえておきたい用語#
- DAG(有向非巡回グラフ)
- タスクをノード、依存関係を矢印で表した循環のないグラフ。ループがないことで順序計算が可能になる。
- クリティカルパス(Critical Path)
- DAG内で最も長い経路。この経路上のタスクが1日遅れると、プロジェクト全体が1日遅れる。
- ボトルネック(Bottleneck)
- 多くのタスクが集中的に依存している単一のタスクやリソース。解消しない限り後続が全て詰まる。
- フロート / スラック(Float / Slack)
- タスクを遅らせても全体の納期に影響しない余裕時間。フロートがゼロのタスクはクリティカルパス上にある。
依存関係マッピングの全体像#
こんな悩みに効く#
- タスクが多すぎて「どこから手をつけるべきか」が見えない
- ある作業が遅れたとき、影響範囲がわからず対応が後手に回る
- 並行で進められるはずの作業が直列になっていてスケジュールが伸びている
- 「このタスクが終わらないと何もできない」という一点集中リスクに気づけていない
基本の使い方#
WBS(作業分解構造)やバックログからタスクを一覧にする。粒度は1〜5日程度の作業単位が扱いやすい。
- 粒度が粗すぎると依存関係が見えず、細かすぎると管理コストが増える
- 各タスクに見積もり工数(日数)を付ける
- 担当者やチーム名もあわせて記録しておくと、リソース競合の発見に使える
各タスクについて「このタスクを始めるには何が完了している必要があるか」を洗い出し、矢印で結ぶ。
- FS(Finish-to-Start): 前のタスクが終わったら次を始める(最も一般的)
- 循環依存(A→B→C→A)が見つかったら、タスク分割で解消する
- ホワイトボードや付箋で物理的に並べると、チームで認識を揃えやすい
DAG上で最も所要時間が長い経路を見つける。この経路がプロジェクト全体の最短完了日を決める。
- クリティカルパス上のタスクはフロートがゼロなので、1日の遅延が即座に全体遅延になる
- クリティカルパスは1本とは限らない。複数経路が同じ長さの場合、すべてがクリティカル
- ツール(MS Project、Mermaid、PlantUML)を使うと自動算出できる
クリティカルパス上の最長タスクや、多くの後続が待っているタスクに対策を打つ。
- 並行化: 1つのタスクを分割して同時に進められないか検討する
- リソース追加: ボトルネックタスクに人員を集中投下する(ただしブルックスの法則に注意)
- 依存の削除: 本当にその依存は必須か?仮の成果物で後続を先行着手できないか確認する
具体例#
SaaS企業の8人チームがダッシュボード機能をリリースする計画を立てた。全体で23タスクあり、直感的に「6週間で終わる」と見積もっていた。
依存関係マッピングを実施すると、次の事実が判明した。
- クリティカルパスは「API設計 → データモデル変更 → バックエンド実装 → フロントエンド結合 → E2Eテスト」の38日間
- フロントエンドチームは「バックエンド実装」が終わるまで18日間待機状態だった
- 「データモデル変更」に後続タスクが7個集中していた
対策として、バックエンドが完了前にモックAPIを提供し、フロントエンドの結合作業を12日前倒しできるよう依存を組み替えた。さらにデータモデル変更をスキーマ定義とマイグレーション実行の2タスクに分割した。
結果、クリティカルパスは38日 → 26日に短縮され、当初見積もりの6週間(30営業日)以内にリリースが完了した。
従業員150名の企業がオフィス移転を計画した。総務部がスケジュールを引いたが、「ネットワーク工事」と「什器搬入」を並行で進める前提だった。
DAGを描いたところ、見落としていた依存が浮かび上がった。
| 依存元 | 依存先 | 理由 |
|---|---|---|
| 電気工事 | ネットワーク工事 | LANケーブルの敷設は電気配線完了後 |
| ネットワーク工事 | セキュリティ機器設置 | ファイアウォールはネットワーク開通後に設定 |
| セキュリティ機器設置 | 社員PC移設 | VPN接続テスト合格が前提 |
当初の並行計画では「社員PC移設」が移転日の2日前に始まる予定だったが、実際には電気工事からの直列依存で最低12日かかることが判明。移転日を2週間後ろ倒しすることで、当日のトラブルを未然に防いだ。
後ろ倒しの判断ができたのは、DAGで依存関係を可視化していたからこそ。描いていなければ移転当日にネットワークが使えない事態になっていた。
人事チーム3名のスタートアップで、エンジニア1名の採用に平均62日かかっていた。「もっと早くしたい」という要望に対し、採用フローの依存関係マッピングを行った。
描いたDAGの結果、クリティカルパスは「求人票作成(5日)→ 書類選考(10日)→ 技術面接(7日)→ 最終面接(5日)→ オファー作成(5日)→ 内定承諾待ち(14日)」の46日間。残りの16日は各ステップ間の「待ち時間」だった。
ボトルネック分析の結果:
- 書類選考の10日は、CTOが週1回しかレビューしていなかったため。レビュー権限を2名に分散し3日に短縮
- 技術面接の7日は、候補者と面接官のスケジュール調整に時間がかかっていた。面接可能スロットを事前に公開する仕組みを導入し3日に短縮
- 待ち時間16日は、次ステップへの引き継ぎが手動だったため。Slackの自動通知で4日に圧縮
結果、採用リードタイムは62日 → 34日に短縮。四半期の採用目標3名に対し、4名の採用に成功した。
やりがちな失敗パターン#
- 依存関係を「なんとなく」で引く — 「たぶん必要」という曖昧な依存を入れると、不要な直列化が発生してスケジュールが無駄に伸びる。依存の根拠を一言で説明できるかがリトマス試験
- DAGを描いて終わりにする — 可視化自体が目的ではない。クリティカルパスを特定し、ボトルネックに具体策を打つところまでがワンセット
- 一度描いたまま更新しない — プロジェクト進行中にタスクの追加・削除や見積もり変更は必ず起きる。週次でDAGを見直さないと、現実と乖離した古い地図で走ることになる
- すべてのタスクを細かく入れすぎる — 数百ノードのDAGは誰も読めない。1〜5日粒度に留め、細部はサブDAGに分割する
まとめ#
依存関係マッピングは、タスクの「前後関係」をDAGで可視化し、プロジェクトの最短完了日を決めるクリティカルパスを見つける手法である。ボトルネックは「依存が集中している一点」に潜んでいることが多く、並行化・分割・リソース集中によって解消できる。大切なのは描いた後に更新し続けることと、「本当にこの依存は必要か?」と依存そのものを疑う姿勢を持つことである。