<div class="codehilite">
<pre data-enlighter-language="generic"><!--
{
"title": "IPA午前Ⅱ クリティカルパス法 (CPM) の計算と解説",
"primary_category": "プロジェクトマネジメント",
"secondary_categories": [
"スケジュール管理",
"情報処理技術者試験"
],
"tags": [
"クリティカルパス",
"CPM",
"プロジェクト管理",
"IPA午前Ⅱ",
"スケジュール計画",
"最早開始",
"最遅終了",
"フロート"
],
"summary": "IPA午前Ⅱ試験で頻出のクリティカルパス法について、計算手順と図解を用いて解説します。プロジェクトの最短期間と重要タスクを特定し、効率的なスケジュール管理に役立てる方法を理解できます。",
"mermaid": true,
"verify_level": "unverified",
"tweet_hint": "IPA午前Ⅱ対策!クリティカルパス法の基本から計算手順までを徹底解説。プロジェクト管理の重要概念をマスターしよう。 #IPA午前Ⅱ #プロジェクトマネジメント",
"link_hints": [
{
"text": "IPA 独立行政法人 情報処理推進機構",
"url": "https://www.ipa.go.jp/"
},
{
"text": "PMBOK Guide (Project Management Institute)",
"url": "https://www.pmi.org/pmbok-guide-standards/foundational/pmbok"
}
]
}
-->
</pre>
</div>
<p>本記事は<strong>Geminiの出力をプロンプト工学で整理した業務ドラフト(未検証)</strong>です。</p>
<h1 class="wp-block-heading">IPA午前Ⅱ クリティカルパス法 (CPM) の計算と解説</h1>
<p>プロジェクトの完了に必要な最短期間と、その期間を決定するタスクの連鎖(クリティカルパス)を特定する方法を解説します。</p>
<h2 class="wp-block-heading">背景</h2>
<p>プロジェクトは複数のタスクから構成され、それぞれのタスクに期間と依存関係が存在します。これらのタスクを効率的に管理し、目標とする納期までにプロジェクトを完了させることは、プロジェクトマネジメントにおいて非常に重要です。タスクの遅延は、プロジェクト全体のコスト増加や品質低下につながる可能性があります。</p>
<h2 class="wp-block-heading">問題点</h2>
<p>プロジェクト全体の期間は、個々のタスク期間の単純な合計だけでは決まりません。複数のタスクが並行して進行したり、タスク間に複雑な依存関係があったりするため、どのタスクの遅延がプロジェクト全体の遅延に直結するのか、またプロジェクトを最短で完了させるためにどのタスクを重点的に管理すべきかを直感的に判断するのは困難です。</p>
<h2 class="wp-block-heading">クリティカルパス法(CPM)の計算と手順</h2>
<p>クリティカルパス法(CPM:Critical Path Method)は、プロジェクトの全タスクをネットワーク図で表現し、最早開始・終了時刻と最遅開始・終了時刻を計算することで、プロジェクト全体の最短期間とクリティカルパスを特定する手法です。</p>
<h3 class="wp-block-heading">1. ネットワーク図の作成</h3>
<p>タスク間の依存関係と期間を図示します。ノードにタスク名と期間を、矢印に依存関係を示します。</p>
<div class="wp-block-merpress-mermaidjs diagram-source-mermaid"><pre class="mermaid">
graph TD
subgraph プロジェクトタスク
A["A: 設計 (5日)"] --> |先行| B
A --> |先行| C
B["B: 開発1(\"3日\")"] --> |先行| D
C["C: 開発2(\"4日\")"] --> |先行| E
D["D: テスト1(\"6日\")"] --> |先行| F
E["E: テスト2(\"2日\")"] --> |先行| F
F["F: 結合 (1日)"]
end
</pre></div>
<h3 class="wp-block-heading">2. 最早開始時刻 (ES) と最早終了時刻 (EF) の計算 (前方パス計算)</h3>
<p>各タスクが最も早く開始できる時刻(ES)と、最も早く終了できる時刻(EF)を計算します。これはプロジェクトの開始点から終了点へ向かって順に進めます。</p>
<ul class="wp-block-list">
<li><p><strong>ES</strong>: 直前タスクのEFの最大値(開始タスクは0)</p></li>
<li><p><strong>EF</strong>: ES + タスク期間</p></li>
</ul>
<figure class="wp-block-table"><table>
<thead>
<tr>
<th style="text-align:left;">タスク</th>
<th style="text-align:left;">期間</th>
<th style="text-align:left;">直前タスク</th>
<th style="text-align:left;">ES</th>
<th style="text-align:left;">EF</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left;">A</td>
<td style="text-align:left;">5</td>
<td style="text-align:left;">なし</td>
<td style="text-align:left;">0</td>
<td style="text-align:left;">5</td>
</tr>
<tr>
<td style="text-align:left;">B</td>
<td style="text-align:left;">3</td>
<td style="text-align:left;">A</td>
<td style="text-align:left;">5</td>
<td style="text-align:left;">8</td>
</tr>
<tr>
<td style="text-align:left;">C</td>
<td style="text-align:left;">4</td>
<td style="text-align:left;">A</td>
<td style="text-align:left;">5</td>
<td style="text-align:left;">9</td>
</tr>
<tr>
<td style="text-align:left;">D</td>
<td style="text-align:left;">6</td>
<td style="text-align:left;">B</td>
<td style="text-align:left;">8</td>
<td style="text-align:left;">14</td>
</tr>
<tr>
<td style="text-align:left;">E</td>
<td style="text-align:left;">2</td>
<td style="text-align:left;">C</td>
<td style="text-align:left;">9</td>
<td style="text-align:left;">11</td>
</tr>
<tr>
<td style="text-align:left;">F</td>
<td style="text-align:left;">1</td>
<td style="text-align:left;">D, E</td>
<td style="text-align:left;">14</td>
<td style="text-align:left;">15</td>
</tr>
</tbody>
</table></figure>
<p>プロジェクト全体の最短期間は、最終タスクFのEFである<strong>15日</strong>です。</p>
<h3 class="wp-block-heading">3. 最遅終了時刻 (LF) と最遅開始時刻 (LS) の計算 (後方パス計算)</h3>
<p>プロジェクト全体の最短期間を超過せずに、各タスクが最も遅く終了できる時刻(LF)と、最も遅く開始できる時刻(LS)を計算します。これはプロジェクトの終了点から開始点へ向かって逆順に進めます。</p>
<ul class="wp-block-list">
<li><p><strong>LF</strong>: 直後タスクのLSの最小値(最終タスクはプロジェクト全体のEF)</p></li>
<li><p><strong>LS</strong>: LF – タスク期間</p></li>
</ul>
<figure class="wp-block-table"><table>
<thead>
<tr>
<th style="text-align:left;">タスク</th>
<th style="text-align:left;">期間</th>
<th style="text-align:left;">直後タスク</th>
<th style="text-align:left;">LF</th>
<th style="text-align:left;">LS</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left;">F</td>
<td style="text-align:left;">1</td>
<td style="text-align:left;">なし</td>
<td style="text-align:left;">15</td>
<td style="text-align:left;">14</td>
</tr>
<tr>
<td style="text-align:left;">D</td>
<td style="text-align:left;">6</td>
<td style="text-align:left;">F</td>
<td style="text-align:left;">14</td>
<td style="text-align:left;">8</td>
</tr>
<tr>
<td style="text-align:left;">E</td>
<td style="text-align:left;">2</td>
<td style="text-align:left;">F</td>
<td style="text-align:left;">14</td>
<td style="text-align:left;">12</td>
</tr>
<tr>
<td style="text-align:left;">B</td>
<td style="text-align:left;">3</td>
<td style="text-align:left;">D</td>
<td style="text-align:left;">8</td>
<td style="text-align:left;">5</td>
</tr>
<tr>
<td style="text-align:left;">C</td>
<td style="text-align:left;">4</td>
<td style="text-align:left;">E</td>
<td style="text-align:left;">12</td>
<td style="text-align:left;">8</td>
</tr>
<tr>
<td style="text-align:left;">A</td>
<td style="text-align:left;">5</td>
<td style="text-align:left;">B, C</td>
<td style="text-align:left;">5</td>
<td style="text-align:left;">0</td>
</tr>
</tbody>
</table></figure>
<h3 class="wp-block-heading">4. フロート(余裕期間)の計算</h3>
<p>各タスクが遅れてもプロジェクト全体の期間に影響を与えない余裕期間を計算します。</p>
<ul class="wp-block-list">
<li><strong>フロート</strong>: LS – ES または LF – EF</li>
</ul>
<figure class="wp-block-table"><table>
<thead>
<tr>
<th style="text-align:left;">タスク</th>
<th style="text-align:left;">ES</th>
<th style="text-align:left;">EF</th>
<th style="text-align:left;">LS</th>
<th style="text-align:left;">LF</th>
<th style="text-align:left;">フロート (LS-ES)</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left;">A</td>
<td style="text-align:left;">0</td>
<td style="text-align:left;">5</td>
<td style="text-align:left;">0</td>
<td style="text-align:left;">5</td>
<td style="text-align:left;">0</td>
</tr>
<tr>
<td style="text-align:left;">B</td>
<td style="text-align:left;">5</td>
<td style="text-align:left;">8</td>
<td style="text-align:left;">5</td>
<td style="text-align:left;">8</td>
<td style="text-align:left;">0</td>
</tr>
<tr>
<td style="text-align:left;">C</td>
<td style="text-align:left;">5</td>
<td style="text-align:left;">9</td>
<td style="text-align:left;">8</td>
<td style="text-align:left;">12</td>
<td style="text-align:left;">3</td>
</tr>
<tr>
<td style="text-align:left;">D</td>
<td style="text-align:left;">8</td>
<td style="text-align:left;">14</td>
<td style="text-align:left;">8</td>
<td style="text-align:left;">14</td>
<td style="text-align:left;">0</td>
</tr>
<tr>
<td style="text-align:left;">E</td>
<td style="text-align:left;">9</td>
<td style="text-align:left;">11</td>
<td style="text-align:left;">12</td>
<td style="text-align:left;">14</td>
<td style="text-align:left;">3</td>
</tr>
<tr>
<td style="text-align:left;">F</td>
<td style="text-align:left;">14</td>
<td style="text-align:left;">15</td>
<td style="text-align:left;">14</td>
<td style="text-align:left;">15</td>
<td style="text-align:left;">0</td>
</tr>
</tbody>
</table></figure>
<h3 class="wp-block-heading">5. クリティカルパスの特定</h3>
<p>フロートが0のタスクを順に辿ったパスがクリティカルパスです。これらのタスクが一つでも遅れると、プロジェクト全体の完了が遅延します。
上記の計算結果から、フロートが0のタスクはA、B、D、Fです。
クリティカルパス: <strong>A → B → D → F</strong></p>
<div class="wp-block-merpress-mermaidjs diagram-source-mermaid"><pre class="mermaid">
graph TD
subgraph プロジェクトタスクとパス
A_cp["A: 設計 (5日)"] --> |先行| B_cp
A_cp --> |先行| C_noncp
B_cp["B: 開発1(\"3日\")"] --> |先行| D_cp
C_noncp["C: 開発2(\"4日\")"] --> |先行| E_noncp
D_cp["D: テスト1(\"6日\")"] --> |先行| F_cp
E_noncp["E: テスト2(\"2日\")"] --> |先行| F_cp
F_cp["F: 結合 (1日)"]
end
style A_cp fill:#f9f,stroke:#333,stroke-width:2px
style B_cp fill:#f9f,stroke:#333,stroke-width:2px
style D_cp fill:#f9f,stroke:#333,stroke-width:2px
style F_cp fill:#f9f,stroke:#333,stroke-width:2px
</pre></div>
<p><em>補足</em>: 上図ではクリティカルパス上のタスクを太い枠線と背景色で強調しています。</p>
<h2 class="wp-block-heading">要点</h2>
<ul class="wp-block-list">
<li><p>クリティカルパスは、プロジェクト全体の最短期間を決定するタスクの連鎖です。</p></li>
<li><p>クリティカルパス上のタスクには余裕期間(フロート)がなく、その遅延は即座にプロジェクト全体の遅延につながります。</p></li>
<li><p>プロジェクトマネージャーは、クリティカルパス上のタスクの進捗を重点的に管理する必要があります。</p></li>
<li><p>非クリティカルパス上のタスクにはフロートがあり、ある程度の遅延は許容されますが、フロートを超過するとクリティカルパスが変化する可能性があります。</p></li>
<li><p>CPMは、プロジェクトのスケジュール計画、進捗監視、および問題発生時の対応策検討に有用なツールです。</p></li>
</ul>
<!--
{
"title": "IPA午前Ⅱ クリティカルパス法 (CPM) の計算と解説",
"primary_category": "プロジェクトマネジメント",
"secondary_categories": [
"スケジュール管理",
"情報処理技術者試験"
],
"tags": [
"クリティカルパス",
"CPM",
"プロジェクト管理",
"IPA午前Ⅱ",
"スケジュール計画",
"最早開始",
"最遅終了",
"フロート"
],
"summary": "IPA午前Ⅱ試験で頻出のクリティカルパス法について、計算手順と図解を用いて解説します。プロジェクトの最短期間と重要タスクを特定し、効率的なスケジュール管理に役立てる方法を理解できます。",
"mermaid": true,
"verify_level": "unverified",
"tweet_hint": "IPA午前Ⅱ対策!クリティカルパス法の基本から計算手順までを徹底解説。プロジェクト管理の重要概念をマスターしよう。 #IPA午前Ⅱ #プロジェクトマネジメント",
"link_hints": [
{
"text": "IPA 独立行政法人 情報処理推進機構",
"url": "https://www.ipa.go.jp/"
},
{
"text": "PMBOK Guide (Project Management Institute)",
"url": "https://www.pmi.org/pmbok-guide-standards/foundational/pmbok"
}
]
}
-->
本記事はGeminiの出力をプロンプト工学で整理した業務ドラフト(未検証) です。
IPA午前Ⅱ クリティカルパス法 (CPM) の計算と解説
プロジェクトの完了に必要な最短期間と、その期間を決定するタスクの連鎖(クリティカルパス)を特定する方法を解説します。
背景
プロジェクトは複数のタスクから構成され、それぞれのタスクに期間と依存関係が存在します。これらのタスクを効率的に管理し、目標とする納期までにプロジェクトを完了させることは、プロジェクトマネジメントにおいて非常に重要です。タスクの遅延は、プロジェクト全体のコスト増加や品質低下につながる可能性があります。
問題点
プロジェクト全体の期間は、個々のタスク期間の単純な合計だけでは決まりません。複数のタスクが並行して進行したり、タスク間に複雑な依存関係があったりするため、どのタスクの遅延がプロジェクト全体の遅延に直結するのか、またプロジェクトを最短で完了させるためにどのタスクを重点的に管理すべきかを直感的に判断するのは困難です。
クリティカルパス法(CPM)の計算と手順
クリティカルパス法(CPM:Critical Path Method)は、プロジェクトの全タスクをネットワーク図で表現し、最早開始・終了時刻と最遅開始・終了時刻を計算することで、プロジェクト全体の最短期間とクリティカルパスを特定する手法です。
1. ネットワーク図の作成
タスク間の依存関係と期間を図示します。ノードにタスク名と期間を、矢印に依存関係を示します。
graph TD
subgraph プロジェクトタスク
A["A: 設計 (5日)"] --> |先行| B
A --> |先行| C
B["B: 開発1(\"3日\")"] --> |先行| D
C["C: 開発2(\"4日\")"] --> |先行| E
D["D: テスト1(\"6日\")"] --> |先行| F
E["E: テスト2(\"2日\")"] --> |先行| F
F["F: 結合 (1日)"]
end
2. 最早開始時刻 (ES) と最早終了時刻 (EF) の計算 (前方パス計算)
各タスクが最も早く開始できる時刻(ES)と、最も早く終了できる時刻(EF)を計算します。これはプロジェクトの開始点から終了点へ向かって順に進めます。
タスク
期間
直前タスク
ES
EF
A
5
なし
0
5
B
3
A
5
8
C
4
A
5
9
D
6
B
8
14
E
2
C
9
11
F
1
D, E
14
15
プロジェクト全体の最短期間は、最終タスクFのEFである15日 です。
3. 最遅終了時刻 (LF) と最遅開始時刻 (LS) の計算 (後方パス計算)
プロジェクト全体の最短期間を超過せずに、各タスクが最も遅く終了できる時刻(LF)と、最も遅く開始できる時刻(LS)を計算します。これはプロジェクトの終了点から開始点へ向かって逆順に進めます。
タスク
期間
直後タスク
LF
LS
F
1
なし
15
14
D
6
F
14
8
E
2
F
14
12
B
3
D
8
5
C
4
E
12
8
A
5
B, C
5
0
4. フロート(余裕期間)の計算
各タスクが遅れてもプロジェクト全体の期間に影響を与えない余裕期間を計算します。
フロート : LS – ES または LF – EF
タスク
ES
EF
LS
LF
フロート (LS-ES)
A
0
5
0
5
0
B
5
8
5
8
0
C
5
9
8
12
3
D
8
14
8
14
0
E
9
11
12
14
3
F
14
15
14
15
0
5. クリティカルパスの特定
フロートが0のタスクを順に辿ったパスがクリティカルパスです。これらのタスクが一つでも遅れると、プロジェクト全体の完了が遅延します。
上記の計算結果から、フロートが0のタスクはA、B、D、Fです。
クリティカルパス: A → B → D → F
graph TD
subgraph プロジェクトタスクとパス
A_cp["A: 設計 (5日)"] --> |先行| B_cp
A_cp --> |先行| C_noncp
B_cp["B: 開発1(\"3日\")"] --> |先行| D_cp
C_noncp["C: 開発2(\"4日\")"] --> |先行| E_noncp
D_cp["D: テスト1(\"6日\")"] --> |先行| F_cp
E_noncp["E: テスト2(\"2日\")"] --> |先行| F_cp
F_cp["F: 結合 (1日)"]
end
style A_cp fill:#f9f,stroke:#333,stroke-width:2px
style B_cp fill:#f9f,stroke:#333,stroke-width:2px
style D_cp fill:#f9f,stroke:#333,stroke-width:2px
style F_cp fill:#f9f,stroke:#333,stroke-width:2px
補足 : 上図ではクリティカルパス上のタスクを太い枠線と背景色で強調しています。
要点
クリティカルパスは、プロジェクト全体の最短期間を決定するタスクの連鎖です。
クリティカルパス上のタスクには余裕期間(フロート)がなく、その遅延は即座にプロジェクト全体の遅延につながります。
プロジェクトマネージャーは、クリティカルパス上のタスクの進捗を重点的に管理する必要があります。
非クリティカルパス上のタスクにはフロートがあり、ある程度の遅延は許容されますが、フロートを超過するとクリティカルパスが変化する可能性があります。
CPMは、プロジェクトのスケジュール計画、進捗監視、および問題発生時の対応策検討に有用なツールです。
コメント