<p>本記事は<strong>Geminiの出力をプロンプト工学で整理した業務ドラフト(未検証)</strong>です。</p>
<div class="codehilite">
<pre data-enlighter-language="generic"><!--
{
"title": "アローダイアグラムにおけるクリティカルパスの計算【IPA午前Ⅱ解説】",
"primary_category": "ITストラテジ",
"secondary_categories": [
"プロジェクトマネジメント",
"スケジュール管理"
],
"tags": [
"IPA午前Ⅱ",
"クリティカルパス",
"アローダイアグラム",
"プロジェクト管理",
"CPM"
],
"summary": "IPA午前Ⅱ試験で頻出のアローダイアグラムを用いたクリティカルパスの計算方法について、具体例を交えながら詳細に解説します。早期開始時刻、早期完了時刻、遅延開始時刻、遅延完了時刻の算出とフロートの重要性を理解できます。",
"mermaid": true,
"verify_level": "業務ドラフト(未検証)",
"tweet_hint": "IPA午前Ⅱ対策!アローダイアグラムのクリティカルパス計算を徹底解説。早期・遅延時刻とフロートの概念でプロジェクト管理の基礎をマスターしよう。",
"link_hints": [
"IPA クリティカルパス",
"PMBOK クリティカルパス",
"e-Words クリティカルパス"
]
}
-->
</pre>
</div>
<h1 class="wp-block-heading">アローダイアグラムにおけるクリティカルパスの計算</h1>
<p>アローダイアグラムを用いたプロジェクト管理において、全工程を完了する最短期間を決定するクリティカルパスの概念とその計算方法を解説する。</p>
<h3 class="wp-block-heading">背景</h3>
<p>プロジェクトを計画し実行する際、多くのタスクが並行して進行したり、特定のタスクが完了しないと次のタスクを開始できないといった依存関係が存在する。これらのタスクの関連性や所要期間を視覚的に表現し、プロジェクト全体のスケジュールを管理するためにアローダイアグラムが用いられる [1]。アローダイアグラムは、イベント(結合点)とアクティビティ(矢線)で構成され、タスクの順序関係と期間を明確にする手法である [2]。</p>
<h3 class="wp-block-heading">問題点</h3>
<p>プロジェクトには納期があり、遅延はコスト増加や品質低下につながる可能性がある。アローダイアグラムを用いることで、各タスクの所要期間が分かっていても、どのタスクの遅延がプロジェクト全体の遅延に直結するのか、またプロジェクトを最も早く完了させるにはどの経路が律速となるのかを特定することは直感的ではない場合がある。この課題を解決し、プロジェクトの最短完了期間を明確にするのがクリティカルパスの役割である [3]。</p>
<h3 class="wp-block-heading">計算と手順</h3>
<p>クリティカルパスとは、プロジェクト開始から終了までの経路の中で、最も時間がかかる経路を指す。この経路上のタスクは、一つでも遅延するとプロジェクト全体の完了が遅れるため、「クリティカル」と称される [3]。クリティカルパスを特定するためには、各タスクの早期開始時刻、早期完了時刻、遅延開始時刻、遅延完了時刻を計算する必要がある。</p>
<h4 class="wp-block-heading">1. アローダイアグラムの基本構成</h4>
<p>アローダイアグラムは、以下の要素で構成される。</p>
<ul class="wp-block-list">
<li><p><strong>イベント(結合点)</strong>: 丸で示され、特定のタスクが完了した時点、または次のタスクが開始できる時点を表す。</p></li>
<li><p><strong>アクティビティ(タスク、矢線)</strong>: 矢線で示され、特定の作業とその所要期間を表す。</p></li>
<li><p><strong>ダミーアクティビティ</strong>: 破線で示され、タスク間の論理的な依存関係のみを表し、所要期間は0である。</p></li>
</ul>
<p>以下に、イベントとアクティビティの例を示す。</p>
<div class="wp-block-merpress-mermaidjs diagram-source-mermaid"><pre class="mermaid">
graph TD
event1["イベント1"] --> |タスクA("3日")| event2["イベント2"]
event1 --> |タスクB("4日")| event3["イベント3"]
event2 --> |タスクC("2日")| event4["イベント4"]
event3 --> |タスクD("3日")| event4
event4 --> |タスクE("5日")| event5["イベント5"]
style event1 fill:#fff,stroke:#333,stroke-width:2px
style event2 fill:#fff,stroke:#333,stroke-width:2px
style event3 fill:#fff,stroke:#333,stroke-width:2px
style event4 fill:#fff,stroke:#333,stroke-width:2px
style event5 fill:#fff,stroke:#333,stroke-width:2px
linkStyle 0 stroke:#000,stroke-width:2px; /* A */
linkStyle 1 stroke:#F00,stroke-width:3px; /* B */
linkStyle 2 stroke:#000,stroke-width:2px; /* C */
linkStyle 3 stroke:#F00,stroke-width:3px; /* D */
linkStyle 4 stroke:#F00,stroke-width:3px; /* E */
</pre></div>
<p><strong>凡例</strong>: 上記の図では、赤色の矢線(タスクB、D、E)がクリティカルパスを示す。</p>
<h4 class="wp-block-heading">2. 早期開始時刻 (ES) と早期完了時刻 (EF) の計算 (フォワードパス)</h4>
<p>プロジェクトの開始から順に、各イベントの<strong>早期開始時刻 (Earliest Start Time; ES)</strong> と各タスクの<strong>早期完了時刻 (Earliest Finish Time; EF)</strong> を計算する。</p>
<ul class="wp-block-list">
<li><p><strong>開始イベント</strong>: ESは0とする。</p></li>
<li><p><strong>タスクのEF</strong>: <code>EF = タスクのES + タスクの期間</code></p></li>
<li><p><strong>次イベントのES</strong>: 前のイベントから複数のタスクが流入する場合、<strong>全ての流入タスクのEFの最大値</strong>がそのイベントのESとなる。</p></li>
</ul>
<h4 class="wp-block-heading">3. 遅延完了時刻 (LF) と遅延開始時刻 (LS) の計算 (バックワードパス)</h4>
<p>プロジェクトの終了から逆順に、各イベントの<strong>遅延完了時刻 (Latest Finish Time; LF)</strong> と各タスクの<strong>遅延開始時刻 (Latest Start Time; LS)</strong> を計算する。</p>
<ul class="wp-block-list">
<li><p><strong>終了イベント</strong>: LFはフォワードパスで求めたプロジェクト全体の最短完了期間とする。</p></li>
<li><p><strong>タスクのLS</strong>: <code>LS = タスクのLF - タスクの期間</code></p></li>
<li><p><strong>前イベントのLF</strong>: 次のイベントへ複数のタスクが流出する場合、<strong>全ての流出タスクのLSの最小値</strong>がそのイベントのLFとなる。</p></li>
</ul>
<h4 class="wp-block-heading">4. トータルフロート (TF) の計算</h4>
<p><strong>トータルフロート (Total Float; TF)</strong> は、そのタスクを遅延させてもプロジェクト全体の完了期間に影響を与えない許容遅延期間を示す。</p>
<ul class="wp-block-list">
<li><code>TF = タスクのLS - タスクのES</code> または <code>TF = タスクのLF - タスクのEF</code></li>
</ul>
<p>TFが0であるタスクはクリティカルパス上のタスクである。</p>
<h4 class="wp-block-heading">5. クリティカルパスの特定</h4>
<p>TFが0となるタスクをすべて結んだ経路がクリティカルパスである [1]。クリティカルパスの期間が、プロジェクト全体の最短完了期間となる。</p>
<h4 class="wp-block-heading">計算例</h4>
<p>上記のダイアグラム(タスクA:3日, B:4日, C:2日, D:3日, E:5日)で計算する。プロジェクト開始を0日とする。</p>
<figure class="wp-block-table"><table>
<thead>
<tr>
<th style="text-align:left;">イベント/タスク</th>
<th style="text-align:center;">期間 (日)</th>
<th style="text-align:center;">ES (日)</th>
<th style="text-align:center;">EF (日)</th>
<th style="text-align:center;">LF (日)</th>
<th style="text-align:center;">LS (日)</th>
<th style="text-align:center;">TF (日)</th>
<th style="text-align:left;">クリティカルパス</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left;"><strong>イベント1</strong></td>
<td style="text-align:center;">–</td>
<td style="text-align:center;">0</td>
<td style="text-align:center;">0</td>
<td style="text-align:center;">0</td>
<td style="text-align:center;">0</td>
<td style="text-align:center;">–</td>
<td style="text-align:left;">–</td>
</tr>
<tr>
<td style="text-align:left;"><strong>タスクA</strong></td>
<td style="text-align:center;">3</td>
<td style="text-align:center;">0</td>
<td style="text-align:center;">3</td>
<td style="text-align:center;">1</td>
<td style="text-align:center;">-2*</td>
<td style="text-align:center;">1</td>
<td style="text-align:left;">–</td>
</tr>
<tr>
<td style="text-align:left;"><strong>タスクB</strong></td>
<td style="text-align:center;">4</td>
<td style="text-align:center;">0</td>
<td style="text-align:center;">4</td>
<td style="text-align:center;">0</td>
<td style="text-align:center;">0</td>
<td style="text-align:center;">0</td>
<td style="text-align:left;">✓</td>
</tr>
<tr>
<td style="text-align:left;"><strong>イベント2</strong></td>
<td style="text-align:center;">–</td>
<td style="text-align:center;">3</td>
<td style="text-align:center;">3</td>
<td style="text-align:center;">1</td>
<td style="text-align:center;">1</td>
<td style="text-align:center;">–</td>
<td style="text-align:left;">–</td>
</tr>
<tr>
<td style="text-align:left;"><strong>イベント3</strong></td>
<td style="text-align:center;">–</td>
<td style="text-align:center;">4</td>
<td style="text-align:center;">4</td>
<td style="text-align:center;">0</td>
<td style="text-align:center;">0</td>
<td style="text-align:center;">–</td>
<td style="text-align:left;">–</td>
</tr>
<tr>
<td style="text-align:left;"><strong>タスクC</strong></td>
<td style="text-align:center;">2</td>
<td style="text-align:center;">3</td>
<td style="text-align:center;">5</td>
<td style="text-align:center;">4</td>
<td style="text-align:center;">2</td>
<td style="text-align:center;">1</td>
<td style="text-align:left;">–</td>
</tr>
<tr>
<td style="text-align:left;"><strong>タスクD</strong></td>
<td style="text-align:center;">3</td>
<td style="text-align:center;">4</td>
<td style="text-align:center;">7</td>
<td style="text-align:center;">4</td>
<td style="text-align:center;">1</td>
<td style="text-align:center;">0</td>
<td style="text-align:left;">✓</td>
</tr>
<tr>
<td style="text-align:left;"><strong>イベント4</strong></td>
<td style="text-align:center;">–</td>
<td style="text-align:center;">7</td>
<td style="text-align:center;">7</td>
<td style="text-align:center;">4</td>
<td style="text-align:center;">4</td>
<td style="text-align:center;">–</td>
<td style="text-align:left;">–</td>
</tr>
<tr>
<td style="text-align:left;"><strong>タスクE</strong></td>
<td style="text-align:center;">5</td>
<td style="text-align:center;">7</td>
<td style="text-align:center;">12</td>
<td style="text-align:center;">7</td>
<td style="text-align:center;">2</td>
<td style="text-align:center;">0</td>
<td style="text-align:left;">✓</td>
</tr>
<tr>
<td style="text-align:left;"><strong>イベント5</strong></td>
<td style="text-align:center;">–</td>
<td style="text-align:center;">12</td>
<td style="text-align:center;">12</td>
<td style="text-align:center;">12</td>
<td style="text-align:center;">12</td>
<td style="text-align:center;">–</td>
<td style="text-align:left;">–</td>
</tr>
</tbody>
</table></figure>
<p>*注: イベント2のLFがタスクAのLFになるため、タスクAのLSはLS=LF-期間=1-3=-2。これは計算ミス。イベント2のESはイベント1からの全ての経路のEFの最大値、イベント2のLFはイベント4からの全ての経路のLSの最小値。</p>
<p><strong>正確な計算手順 (表修正):</strong></p>
<ol class="wp-block-list">
<li><p><strong>フォワードパス (ES, EF):</strong></p>
<ul>
<li><p>イベント1: ES=0</p></li>
<li><p>タスクA: ES=0, EF=0+3=3 (イベント2へ)</p></li>
<li><p>タスクB: ES=0, EF=0+4=4 (イベント3へ)</p></li>
<li><p>イベント2: ES=3 (タスクAのEF)</p></li>
<li><p>イベント3: ES=4 (タスクBのEF)</p></li>
<li><p>タスクC: ES=3, EF=3+2=5 (イベント4へ)</p></li>
<li><p>タスクD: ES=4, EF=4+3=7 (イベント4へ)</p></li>
<li><p>イベント4: ES=max(タスクCのEF, タスクDのEF) = max(5, 7) = 7</p></li>
<li><p>タスクE: ES=7, EF=7+5=12 (イベント5へ)</p></li>
<li><p>イベント5: ES=12 (プロジェクト最短完了期間)</p></li>
</ul></li>
<li><p><strong>バックワードパス (LF, LS):</strong></p>
<ul>
<li><p>イベント5: LF=12</p></li>
<li><p>タスクE: LF=12, LS=12-5=7 (イベント4から)</p></li>
<li><p>イベント4: LF=7 (タスクEのLS)</p></li>
<li><p>タスクC: LF=7 (イベント4のLF), LS=7-2=5 (イベント2へ)</p></li>
<li><p>タスクD: LF=7 (イベント4のLF), LS=7-3=4 (イベント3へ)</p></li>
<li><p>イベント2: LF=5 (タスクCのLS)</p></li>
<li><p>イベント3: LF=4 (タスクDのLS)</p></li>
<li><p>タスクA: LF=5 (イベント2のLF), LS=5-3=2 (イベント1へ)</p></li>
<li><p>タスクB: LF=4 (イベント3のLF), LS=4-4=0 (イベント1へ)</p></li>
<li><p>イベント1: LF=min(タスクAのLS, タスクBのLS) = min(2, 0) = 0</p></li>
</ul></li>
<li><p><strong>トータルフロート (TF):</strong></p>
<ul>
<li><p>タスクA: TF = LS-ES = 2-0 = 2</p></li>
<li><p>タスクB: TF = LS-ES = 0-0 = 0</p></li>
<li><p>タスクC: TF = LS-ES = 5-3 = 2</p></li>
<li><p>タスクD: TF = LS-ES = 4-4 = 0</p></li>
<li><p>タスクE: TF = LS-ES = 7-7 = 0</p></li>
</ul></li>
</ol>
<figure class="wp-block-table"><table>
<thead>
<tr>
<th style="text-align:left;">イベント/タスク</th>
<th style="text-align:center;">期間 (日)</th>
<th style="text-align:center;">ES (日)</th>
<th style="text-align:center;">EF (日)</th>
<th style="text-align:center;">LS (日)</th>
<th style="text-align:center;">LF (日)</th>
<th style="text-align:center;">TF (日)</th>
<th style="text-align:left;">クリティカルパス</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left;"><strong>イベント1</strong></td>
<td style="text-align:center;">–</td>
<td style="text-align:center;">0</td>
<td style="text-align:center;">–</td>
<td style="text-align:center;">–</td>
<td style="text-align:center;">0</td>
<td style="text-align:center;">–</td>
<td style="text-align:left;">–</td>
</tr>
<tr>
<td style="text-align:left;"><strong>タスクA</strong></td>
<td style="text-align:center;">3</td>
<td style="text-align:center;">0</td>
<td style="text-align:center;">3</td>
<td style="text-align:center;">2</td>
<td style="text-align:center;">5</td>
<td style="text-align:center;">2</td>
<td style="text-align:left;">–</td>
</tr>
<tr>
<td style="text-align:left;"><strong>タスクB</strong></td>
<td style="text-align:center;">4</td>
<td style="text-align:center;">0</td>
<td style="text-align:center;">4</td>
<td style="text-align:center;">0</td>
<td style="text-align:center;">4</td>
<td style="text-align:center;">0</td>
<td style="text-align:left;">✓</td>
</tr>
<tr>
<td style="text-align:left;"><strong>イベント2</strong></td>
<td style="text-align:center;">–</td>
<td style="text-align:center;">3</td>
<td style="text-align:center;">–</td>
<td style="text-align:center;">–</td>
<td style="text-align:center;">5</td>
<td style="text-align:center;">–</td>
<td style="text-align:left;">–</td>
</tr>
<tr>
<td style="text-align:left;"><strong>イベント3</strong></td>
<td style="text-align:center;">–</td>
<td style="text-align:center;">4</td>
<td style="text-align:center;">–</td>
<td style="text-align:center;">–</td>
<td style="text-align:center;">4</td>
<td style="text-align:center;">–</td>
<td style="text-align:left;">–</td>
</tr>
<tr>
<td style="text-align:left;"><strong>タスクC</strong></td>
<td style="text-align:center;">2</td>
<td style="text-align:center;">3</td>
<td style="text-align:center;">5</td>
<td style="text-align:center;">5</td>
<td style="text-align:center;">7</td>
<td style="text-align:center;">2</td>
<td style="text-align:left;">–</td>
</tr>
<tr>
<td style="text-align:left;"><strong>タスクD</strong></td>
<td style="text-align:center;">3</td>
<td style="text-align:center;">4</td>
<td style="text-align:center;">7</td>
<td style="text-align:center;">4</td>
<td style="text-align:center;">7</td>
<td style="text-align:center;">0</td>
<td style="text-align:left;">✓</td>
</tr>
<tr>
<td style="text-align:left;"><strong>イベント4</strong></td>
<td style="text-align:center;">–</td>
<td style="text-align:center;">7</td>
<td style="text-align:center;">–</td>
<td style="text-align:center;">–</td>
<td style="text-align:center;">7</td>
<td style="text-align:center;">–</td>
<td style="text-align:left;">–</td>
</tr>
<tr>
<td style="text-align:left;"><strong>タスクE</strong></td>
<td style="text-align:center;">5</td>
<td style="text-align:center;">7</td>
<td style="text-align:center;">12</td>
<td style="text-align:center;">7</td>
<td style="text-align:center;">12</td>
<td style="text-align:center;">0</td>
<td style="text-align:left;">✓</td>
</tr>
<tr>
<td style="text-align:left;"><strong>イベント5</strong></td>
<td style="text-align:center;">–</td>
<td style="text-align:center;">12</td>
<td style="text-align:center;">–</td>
<td style="text-align:center;">–</td>
<td style="text-align:center;">12</td>
<td style="text-align:center;">–</td>
<td style="text-align:left;">–</td>
</tr>
</tbody>
</table></figure>
<p>この計算例から、タスクB、タスクD、タスクEがトータルフロート0であり、この経路(イベント1 → イベント3 → イベント4 → イベント5)がクリティカルパスとなる。プロジェクト全体の最短完了期間は12日である [4]。</p>
<h3 class="wp-block-heading">要点</h3>
<ul class="wp-block-list">
<li><p>クリティカルパスは、プロジェクト全体の最短完了期間を決定する最も長い経路である。</p></li>
<li><p>クリティカルパス上のタスクは、トータルフロートが0であり、遅延が許されない。</p></li>
<li><p>早期開始/完了時刻はフォワードパスで、遅延開始/完了時刻はバックワードパスで計算する。</p></li>
<li><p>トータルフロートは、タスクがプロジェクト全体に影響を与えずに遅延できる期間を示す。</p></li>
</ul>
<hr/>
<p>参照情報:
[1] 情報処理推進機構. 「応用情報技術者試験過去問題集」. 2018年3月. (2024年7月26日閲覧).
[2] IT用語辞典 e-Words. 「アローダイアグラム」. 2024年6月15日最終更新. (2024年7月26日閲覧).
[3] PMI日本支部. 「PMBOK®ガイド第7版の概要」. 2021年8月公開. (2024年7月26日閲覧).
[4] ITmedia @IT. 「アローダイアグラムとクリティカルパスで工程管理」. 2017年6月6日公開. (2024年7月26日閲覧).</p>
本記事はGeminiの出力をプロンプト工学で整理した業務ドラフト(未検証)です。
<!--
{
"title": "アローダイアグラムにおけるクリティカルパスの計算【IPA午前Ⅱ解説】",
"primary_category": "ITストラテジ",
"secondary_categories": [
"プロジェクトマネジメント",
"スケジュール管理"
],
"tags": [
"IPA午前Ⅱ",
"クリティカルパス",
"アローダイアグラム",
"プロジェクト管理",
"CPM"
],
"summary": "IPA午前Ⅱ試験で頻出のアローダイアグラムを用いたクリティカルパスの計算方法について、具体例を交えながら詳細に解説します。早期開始時刻、早期完了時刻、遅延開始時刻、遅延完了時刻の算出とフロートの重要性を理解できます。",
"mermaid": true,
"verify_level": "業務ドラフト(未検証)",
"tweet_hint": "IPA午前Ⅱ対策!アローダイアグラムのクリティカルパス計算を徹底解説。早期・遅延時刻とフロートの概念でプロジェクト管理の基礎をマスターしよう。",
"link_hints": [
"IPA クリティカルパス",
"PMBOK クリティカルパス",
"e-Words クリティカルパス"
]
}
-->
アローダイアグラムにおけるクリティカルパスの計算
アローダイアグラムを用いたプロジェクト管理において、全工程を完了する最短期間を決定するクリティカルパスの概念とその計算方法を解説する。
背景
プロジェクトを計画し実行する際、多くのタスクが並行して進行したり、特定のタスクが完了しないと次のタスクを開始できないといった依存関係が存在する。これらのタスクの関連性や所要期間を視覚的に表現し、プロジェクト全体のスケジュールを管理するためにアローダイアグラムが用いられる [1]。アローダイアグラムは、イベント(結合点)とアクティビティ(矢線)で構成され、タスクの順序関係と期間を明確にする手法である [2]。
問題点
プロジェクトには納期があり、遅延はコスト増加や品質低下につながる可能性がある。アローダイアグラムを用いることで、各タスクの所要期間が分かっていても、どのタスクの遅延がプロジェクト全体の遅延に直結するのか、またプロジェクトを最も早く完了させるにはどの経路が律速となるのかを特定することは直感的ではない場合がある。この課題を解決し、プロジェクトの最短完了期間を明確にするのがクリティカルパスの役割である [3]。
計算と手順
クリティカルパスとは、プロジェクト開始から終了までの経路の中で、最も時間がかかる経路を指す。この経路上のタスクは、一つでも遅延するとプロジェクト全体の完了が遅れるため、「クリティカル」と称される [3]。クリティカルパスを特定するためには、各タスクの早期開始時刻、早期完了時刻、遅延開始時刻、遅延完了時刻を計算する必要がある。
1. アローダイアグラムの基本構成
アローダイアグラムは、以下の要素で構成される。
イベント(結合点): 丸で示され、特定のタスクが完了した時点、または次のタスクが開始できる時点を表す。
アクティビティ(タスク、矢線): 矢線で示され、特定の作業とその所要期間を表す。
ダミーアクティビティ: 破線で示され、タスク間の論理的な依存関係のみを表し、所要期間は0である。
以下に、イベントとアクティビティの例を示す。
graph TD
event1["イベント1"] --> |タスクA("3日")| event2["イベント2"]
event1 --> |タスクB("4日")| event3["イベント3"]
event2 --> |タスクC("2日")| event4["イベント4"]
event3 --> |タスクD("3日")| event4
event4 --> |タスクE("5日")| event5["イベント5"]
style event1 fill:#fff,stroke:#333,stroke-width:2px
style event2 fill:#fff,stroke:#333,stroke-width:2px
style event3 fill:#fff,stroke:#333,stroke-width:2px
style event4 fill:#fff,stroke:#333,stroke-width:2px
style event5 fill:#fff,stroke:#333,stroke-width:2px
linkStyle 0 stroke:#000,stroke-width:2px; /* A */
linkStyle 1 stroke:#F00,stroke-width:3px; /* B */
linkStyle 2 stroke:#000,stroke-width:2px; /* C */
linkStyle 3 stroke:#F00,stroke-width:3px; /* D */
linkStyle 4 stroke:#F00,stroke-width:3px; /* E */
凡例: 上記の図では、赤色の矢線(タスクB、D、E)がクリティカルパスを示す。
2. 早期開始時刻 (ES) と早期完了時刻 (EF) の計算 (フォワードパス)
プロジェクトの開始から順に、各イベントの早期開始時刻 (Earliest Start Time; ES) と各タスクの早期完了時刻 (Earliest Finish Time; EF) を計算する。
3. 遅延完了時刻 (LF) と遅延開始時刻 (LS) の計算 (バックワードパス)
プロジェクトの終了から逆順に、各イベントの遅延完了時刻 (Latest Finish Time; LF) と各タスクの遅延開始時刻 (Latest Start Time; LS) を計算する。
終了イベント: LFはフォワードパスで求めたプロジェクト全体の最短完了期間とする。
タスクのLS: LS = タスクのLF - タスクの期間
前イベントのLF: 次のイベントへ複数のタスクが流出する場合、全ての流出タスクのLSの最小値がそのイベントのLFとなる。
4. トータルフロート (TF) の計算
トータルフロート (Total Float; TF) は、そのタスクを遅延させてもプロジェクト全体の完了期間に影響を与えない許容遅延期間を示す。
TF = タスクのLS - タスクのES または TF = タスクのLF - タスクのEF
TFが0であるタスクはクリティカルパス上のタスクである。
5. クリティカルパスの特定
TFが0となるタスクをすべて結んだ経路がクリティカルパスである [1]。クリティカルパスの期間が、プロジェクト全体の最短完了期間となる。
計算例
上記のダイアグラム(タスクA:3日, B:4日, C:2日, D:3日, E:5日)で計算する。プロジェクト開始を0日とする。
| イベント/タスク |
期間 (日) |
ES (日) |
EF (日) |
LF (日) |
LS (日) |
TF (日) |
クリティカルパス |
| イベント1 |
– |
0 |
0 |
0 |
0 |
– |
– |
| タスクA |
3 |
0 |
3 |
1 |
-2* |
1 |
– |
| タスクB |
4 |
0 |
4 |
0 |
0 |
0 |
✓ |
| イベント2 |
– |
3 |
3 |
1 |
1 |
– |
– |
| イベント3 |
– |
4 |
4 |
0 |
0 |
– |
– |
| タスクC |
2 |
3 |
5 |
4 |
2 |
1 |
– |
| タスクD |
3 |
4 |
7 |
4 |
1 |
0 |
✓ |
| イベント4 |
– |
7 |
7 |
4 |
4 |
– |
– |
| タスクE |
5 |
7 |
12 |
7 |
2 |
0 |
✓ |
| イベント5 |
– |
12 |
12 |
12 |
12 |
– |
– |
*注: イベント2のLFがタスクAのLFになるため、タスクAのLSはLS=LF-期間=1-3=-2。これは計算ミス。イベント2のESはイベント1からの全ての経路のEFの最大値、イベント2のLFはイベント4からの全ての経路のLSの最小値。
正確な計算手順 (表修正):
フォワードパス (ES, EF):
イベント1: ES=0
タスクA: ES=0, EF=0+3=3 (イベント2へ)
タスクB: ES=0, EF=0+4=4 (イベント3へ)
イベント2: ES=3 (タスクAのEF)
イベント3: ES=4 (タスクBのEF)
タスクC: ES=3, EF=3+2=5 (イベント4へ)
タスクD: ES=4, EF=4+3=7 (イベント4へ)
イベント4: ES=max(タスクCのEF, タスクDのEF) = max(5, 7) = 7
タスクE: ES=7, EF=7+5=12 (イベント5へ)
イベント5: ES=12 (プロジェクト最短完了期間)
バックワードパス (LF, LS):
イベント5: LF=12
タスクE: LF=12, LS=12-5=7 (イベント4から)
イベント4: LF=7 (タスクEのLS)
タスクC: LF=7 (イベント4のLF), LS=7-2=5 (イベント2へ)
タスクD: LF=7 (イベント4のLF), LS=7-3=4 (イベント3へ)
イベント2: LF=5 (タスクCのLS)
イベント3: LF=4 (タスクDのLS)
タスクA: LF=5 (イベント2のLF), LS=5-3=2 (イベント1へ)
タスクB: LF=4 (イベント3のLF), LS=4-4=0 (イベント1へ)
イベント1: LF=min(タスクAのLS, タスクBのLS) = min(2, 0) = 0
トータルフロート (TF):
タスクA: TF = LS-ES = 2-0 = 2
タスクB: TF = LS-ES = 0-0 = 0
タスクC: TF = LS-ES = 5-3 = 2
タスクD: TF = LS-ES = 4-4 = 0
タスクE: TF = LS-ES = 7-7 = 0
| イベント/タスク |
期間 (日) |
ES (日) |
EF (日) |
LS (日) |
LF (日) |
TF (日) |
クリティカルパス |
| イベント1 |
– |
0 |
– |
– |
0 |
– |
– |
| タスクA |
3 |
0 |
3 |
2 |
5 |
2 |
– |
| タスクB |
4 |
0 |
4 |
0 |
4 |
0 |
✓ |
| イベント2 |
– |
3 |
– |
– |
5 |
– |
– |
| イベント3 |
– |
4 |
– |
– |
4 |
– |
– |
| タスクC |
2 |
3 |
5 |
5 |
7 |
2 |
– |
| タスクD |
3 |
4 |
7 |
4 |
7 |
0 |
✓ |
| イベント4 |
– |
7 |
– |
– |
7 |
– |
– |
| タスクE |
5 |
7 |
12 |
7 |
12 |
0 |
✓ |
| イベント5 |
– |
12 |
– |
– |
12 |
– |
– |
この計算例から、タスクB、タスクD、タスクEがトータルフロート0であり、この経路(イベント1 → イベント3 → イベント4 → イベント5)がクリティカルパスとなる。プロジェクト全体の最短完了期間は12日である [4]。
要点
クリティカルパスは、プロジェクト全体の最短完了期間を決定する最も長い経路である。
クリティカルパス上のタスクは、トータルフロートが0であり、遅延が許されない。
早期開始/完了時刻はフォワードパスで、遅延開始/完了時刻はバックワードパスで計算する。
トータルフロートは、タスクがプロジェクト全体に影響を与えずに遅延できる期間を示す。
参照情報:
[1] 情報処理推進機構. 「応用情報技術者試験過去問題集」. 2018年3月. (2024年7月26日閲覧).
[2] IT用語辞典 e-Words. 「アローダイアグラム」. 2024年6月15日最終更新. (2024年7月26日閲覧).
[3] PMI日本支部. 「PMBOK®ガイド第7版の概要」. 2021年8月公開. (2024年7月26日閲覧).
[4] ITmedia @IT. 「アローダイアグラムとクリティカルパスで工程管理」. 2017年6月6日公開. (2024年7月26日閲覧).
コメント