WBSのフォーマットについて考えたメモ(備忘録)

Published: Sept. 3, 2024, 7:07 a.m. (UTC) / Updated: Sept. 4, 2024, 9:02 a.m. (UTC) 🔖 0 Bookmarks
👍 0 👎 0
日本語

WBSのカラムに含まれる要素

基本要素

  1. タスクID: 各タスクの一意な識別子。
  2. タスク名: タスクの名前や概要。
  3. 開始日: タスクの開始日。
  4. 終了日: タスクの終了日。
  5. 期間: タスクに要する日数または時間。
  6. 依存関係: 他のタスクとの依存関係(例:先行タスク、後続タスク)。
  7. 担当者: タスクを担当する個人またはチームの名前。
  8. ステータス: タスクの進捗状況(例:未着手、進行中、完了、遅延)。
  9. 優先度: タスクの優先度(例:高、中、低)。
  10. マイルストーン: プロジェクト内の重要な節目や目標。
  11. 成果物とExit Criteria

詳細要素

  1. タスクの説明: タスクの詳細な説明や目的。各タスクやサブタスクの目的や達成目標を簡潔に記載する。タスクの意図や最終的な成果物を明確化。
  2. 進捗率: タスクの完了度合い(例:50%、75%)。
  3. リソース: タスクに割り当てられているリソース(例:人員、設備、ソフトウェア)。
  4. コスト: タスクに関連するコスト(予算、実際のコスト)。
  5. 作業量: タスクに必要な作業量(例:人日、時間)。
  6. 成果物: タスクの成果物や納品物の詳細。
  7. リスク: タスクに関連するリスクや課題。タスクの複雑さやリスク度合いを記録して、管理の重点を判断
  8. 依存関係のタイプ: 依存関係の詳細(例:FS(Finish to Start)、SS(Start to Start))。
  9. クリティカルパス: クリティカルパスに含まれるタスクかどうかの識別。
  10. タスクタイプ: タスクのタイプ(例:フェーズ、アクティビティ、マイルストーン)。
  11. スラック(余裕時間): タスクのスラック(開始または終了の遅延が許される時間)。
  12. ベースライン日付: プロジェクト開始時点の計画された開始日と終了日。
  13. 実際の開始日: タスクが実際に開始された日。
  14. 実際の終了日: タスクが実際に終了した日。
  15. タスクの依存先: 特定のタスクに依存している他のタスク。
  16. WBSレベル: WBS内でのタスクの階層レベル(例:レベル1、レベル2)。
  17. コメント/メモ: タスクに関する追加情報やメモ。

その他の要素

  1. 進捗状況の更新日: 最後に進捗状況が更新された日。
  2. 承認状況: タスクが承認されているかどうか。
  3. バッファー: タスクに設定された余裕期間やバッファーの時間。
  4. 外部依存関係: プロジェクト外部の要因やタスクとの依存関係。
  5. スケジュール制約: 特定のタスクに関連する制約(例:特定の日に開始しなければならない)。
  6. タスクの完了条件: タスクが完了と見なされるための基準。
  7. 作業の種類: タスクの作業内容の分類(例:設計、開発、テスト)。
  8. 連絡先情報: タスクに関連する担当者や関係者の連絡先情報。
  9. 成果物のレビュー状況: 成果物がレビューされ、承認されたかどうかの状況。
  10. フィードバック: タスクに対するフィードバックや改善要求。
  11. レポート頻度: タスクの進捗を報告する頻度(例:毎週、毎日)。
  12. 文書リンク: タスクに関連する文書やリソースへのリンク。
  13. プロジェクトフェーズ: タスクが属するプロジェクトのフェーズ(例:計画、実行、閉鎖)。
  14. 変更履歴: タスクの変更履歴や変更理由の記録。

WBSの行に含まれる要素

  1. WBSコード(階層番号):

    • 各タスクやサブタスクを階層的に識別するための番号です。プロジェクト全体をトップレベル(例:1)、その下に階層的な番号(例:1.1、1.1.1)をつけることで、タスクの階層構造を示します。これにより、どのタスクが上位・下位に位置するかが明確になります。
  2. タスクの階層レベル:

    • 各タスクがプロジェクト全体の中でどのレベルに属しているかを示す階層情報です。例えば、レベル1はトップレベルの主要フェーズ、レベル2はその下位のタスク群、レベル3はさらに詳細なサブタスクとなります。
  3. タスク名(作業パッケージ):

    • 具体的な作業内容やサブタスクの名称です。WBSコードに対応するタスクや作業内容の説明がここに記載されます。
  4. タスクID:

    • WBSコードとは別に、システムやソフトウェア内で一意に管理されるタスクID。これにより、各タスクが一意に識別されます。

WBSの標準フォームの考え方

WBS(Work Breakdown Structure)を世界標準でシームレスに受け渡し可能なフォーマットにするためには、データの柔軟性、互換性、そして標準化が求められます。以下に提案するフォーマットは、JSON(JavaScript Object Notation)形式で記述され、さまざまなプラットフォームやシステム間でのシームレスなデータ交換が可能です。このフォーマットは、基本要素、詳細要素、その他要素、およびWBSコードに関する要素を含み、拡張性や柔軟性に優れています。

WBSデータの標準フォーマット(JSON形式)

  {
    "project": {
      "projectName": "プロジェクト名",
      "wbsElements": [
        {
          "wbsCode": "1.1",
          "level": 2,
          "taskID": "TASK-001",
          "taskName": "タスク名",
          "description": "タスクの詳細な説明",
          "startDate": "2024-09-01",
          "endDate": "2024-09-10",
          "duration": 10,
          "dependencies": [
            {
              "taskID": "TASK-000",
              "type": "FS"
            }
          ],
          "resources": [
            {
              "resourceName": "John Doe",
              "role": "Developer"
            }
          ],
          "status": "進行中",
          "priority": "高",
          "milestone": false,
          "deliverables": [
            {
              "name": "成果物名",
              "exitCriteria": "Exit Criteriaの詳細"
            }
          ],
          "progress": 50,
          "cost": {
            "estimated": 1000,
            "actual": 800
          },
          "workEffort": {
            "estimated": "5人日",
            "actual": "3人日"
          },
          "risks": [
            {
              "riskID": "RISK-001",
              "description": "リスクの説明"
            }
          ],
          "slack": 2,
          "baselineDates": {
            "startDate": "2024-09-01",
            "endDate": "2024-09-09"
          },
          "actualDates": {
            "startDate": "2024-09-02",
            "endDate": "未定"
          },
          "comments": "タスクに関する追加情報",
          "updatedOn": "2024-09-03",
          "approvalStatus": "承認済み",
          "buffer": 1,
          "externalDependencies": [
            {
              "externalTaskID": "EXT-001",
              "description": "外部依存関係の説明"
            }
          ],
          "scheduleConstraints": "特定の日に開始しなければならない",
          "completionCriteria": "タスクの完了条件の詳細",
          "taskType": "アクティビティ",
          "contactInfo": {
            "email": "contact@example.com",
            "phone": "123-456-7890"
          },
          "reviewStatus": "レビュー済み",
          "feedback": "フィードバック内容",
          "reportingFrequency": "毎週",
          "documentationLinks": [
            "http://example.com/doc1",
            "http://example.com/doc2"
          ],
          "projectPhase": "実行",
          "changeLog": [
            {
              "changeID": "CHANGE-001",
              "description": "変更内容の説明",
              "changedOn": "2024-09-03"
            }
          ]
        }
      ]
    }
  }

このフォーマットの特徴と利点

  1. 汎用性と拡張性: JSON形式で記述されているため、ほぼすべてのプラットフォームやシステムと互換性があります。また、必要に応じて新しいフィールドを追加することが容易です。

  2. 階層構造の明示: wbsCodeやlevelなどのフィールドを用いることで、WBSの階層構造を明確に表現しています。

  3. 柔軟な依存関係の管理: dependenciesフィールドを使用することで、タスク間の依存関係を柔軟に設定できます。これにより、さまざまな依存関係タイプ(例:Finish to Start, Start to Startなど)にも対応可能です。

  4. 詳細なリソースおよびコスト管理: resources、cost、workEffortフィールドを活用することで、タスクに関連するリソースの管理やコスト分析を行うことができます。

  5. プロジェクトの進捗追跡: progressフィールドにより、タスクの進捗状況を数値で表現できます。また、status、updatedOnフィールドで最新の状況を把握できます。

  6. 成果物と評価基準の明示: deliverablesとexitCriteriaフィールドを使用することで、タスクの成果物とその評価基準を明確に示しています。

  7. フィードバックと変更履歴の追跡: feedbackやchangeLogフィールドにより、プロジェクト進行中のフィードバックや変更履歴を詳細に記録できます。

シームレスな受け渡しと活用

このフォーマットは、プロジェクト管理ツールやデータ分析ツールとのシームレスなデータ交換を実現可能でしょう。また、JSONをベースにしているため、RESTful APIを介してシステム間でデータをやり取りすることが容易です。さらに、XMLやCSVなど他のフォーマットにも変換可能なため、既存のシステムやプロセスにもスムーズに統合できます。

このような標準化されたフォーマットを用いることで、プロジェクト管理の透明性が向上し、さまざまなニーズやフォームに柔軟に対応できるようになります。

plotlyで描画する例

import plotly.graph_objects as go
import pandas as pd

# ダミーデータを作成
df = wbs_df

# テーブルを表示
fig = go.Figure(data=[go.Table(
    header=dict(values=list(df.columns),
                fill_color='paleturquoise',
                align='left'),
    cells=dict(values=[df[col] for col in df.columns],
               fill_color='lavender',
               align='left'))
])

fig.show()

結果は以下の通り。

全然ダメですね。

日付方向のフォーマット

ステータスを色分けできるようなフォーマットにしたJSON形式のWBSサンプルデータを示します。

WBS サンプルデータ

{
  "WBS": [
    {
      "task_id": 1,
      "task_name": "プロジェクト開始",
      "start_date": "2024-09-01",
      "end_date": "2024-09-03",
      "duration": 3,
      "dependencies": [],
      "assignee": "チームA",
      "status": 4,
      "milestone": true,
      "deliverables_exit_criteria": "プロジェクト計画書完成",
      "progress_bar": {
        "2024-09-01": 4,
        "2024-09-02": 4,
        "2024-09-03": 4
      }
    },
    {
      "task_id": 2,
      "task_name": "要件定義",
      "start_date": "2024-09-04",
      "end_date": "2024-09-10",
      "duration": 7,
      "dependencies": [1],
      "assignee": "チームB",
      "status": 3,
      "milestone": false,
      "deliverables_exit_criteria": "要件定義書完成",
      "progress_bar": {
        "2024-09-04": 2,
        "2024-09-05": 2,
        "2024-09-06": 3,
        "2024-09-07": 3,
        "2024-09-08": 3,
        "2024-09-09": 3,
        "2024-09-10": 3
      }
    },
    {
      "task_id": 3,
      "task_name": "設計",
      "start_date": "2024-09-11",
      "end_date": "2024-09-20",
      "duration": 10,
      "dependencies": [2],
      "assignee": "チームC",
      "status": 2,
      "milestone": false,
      "deliverables_exit_criteria": "設計書完成",
      "progress_bar": {
        "2024-09-11": 2,
        "2024-09-12": 2,
        "2024-09-13": 2,
        "2024-09-14": 2,
        "2024-09-15": 2,
        "2024-09-16": 2,
        "2024-09-17": 2,
        "2024-09-18": 2,
        "2024-09-19": 2,
        "2024-09-20": 2
      }
    },
    {
      "task_id": 4,
      "task_name": "実装",
      "start_date": "2024-09-21",
      "end_date": "2024-09-30",
      "duration": 10,
      "dependencies": [3],
      "assignee": "チームD",
      "status": 1,
      "milestone": false,
      "deliverables_exit_criteria": "コード完成",
      "progress_bar": {
        "2024-09-21": 1,
        "2024-09-22": 1,
        "2024-09-23": 1,
        "2024-09-24": 1,
        "2024-09-25": 1,
        "2024-09-26": 1,
        "2024-09-27": 1,
        "2024-09-28": 1,
        "2024-09-29": 1,
        "2024-09-30": 1
      }
    },
    {
      "task_id": 5,
      "task_name": "テスト",
      "start_date": "2024-10-01",
      "end_date": "2024-10-05",
      "duration": 5,
      "dependencies": [4],
      "assignee": "チームE",
      "status": 0,
      "milestone": false,
      "deliverables_exit_criteria": "テスト結果報告書完成",
      "progress_bar": {
        "2024-10-01": 0,
        "2024-10-02": 0,
        "2024-10-03": 0,
        "2024-10-04": 0,
        "2024-10-05": 0
      }
    },
    {
      "task_id": 6,
      "task_name": "リリース準備",
      "start_date": "2024-10-06",
      "end_date": "2024-10-10",
      "duration": 5,
      "dependencies": [5],
      "assignee": "チームF",
      "status": 0,
      "milestone": true,
      "deliverables_exit_criteria": "リリース計画書完成",
      "progress_bar": {
        "2024-10-06": 0,
        "2024-10-07": 0,
        "2024-10-08": 0,
        "2024-10-09": 0,
        "2024-10-10": 0
      }
    }
  ],
  "status_legend": {
    "0": "情報なし",
    "1": "タスクありだが未開始",
    "2": "タスクありで進捗中",
    "3": "タスクありで遅延中",
    "4": "タスクありで完了済み"
  }
}

フォーマット説明

  • 進捗状況の表示: progress_barというキーを使用し、日ごとのタスクの進捗状況を0から4の値で表現しました。各値は次のステータスを示します:
    • 0: 情報なし
    • 1: タスクありだが未開始
    • 2: タスクありで進捗中
    • 3: タスクありで遅延中
    • 4: タスクありで完了済み
  • ステータス凡例: status_legendキーを追加し、各ステータスが何を意味するかを示しています。
  • このフォーマットを使うことで、進捗状況を可視化しやすくなります。また、色分けを利用することで、タスクの進捗状態を直感的に把握することができます。

plotlyでの表示

import plotly.graph_objects as go
from datetime import datetime

# タスクの色分けルール
status_colors = {
    0: "gray",      # 情報なし
    1: "lightblue", # タスクありだが未開始
    2: "blue",      # タスクありで進捗中
    3: "red",       # タスクありで遅延中
    4: "green"      # タスクありで完了済み
}

# 各タスクを日付ごとに色分けしてバー表示する
bars = []
for task in wbs_data['WBS']:
    task_name = task['task_name']
    for date_str, status in task['progress_bar'].items():
        date = datetime.strptime(date_str, "%Y-%m-%d")
        bars.append(go.Bar(
            x=[date],
            y=[task_name],
            orientation='h',
            marker=dict(color=status_colors[status]),
            width=0.5,
            showlegend=False
        ))

# レイアウトの設定
layout = go.Layout(
    title="WBS Progress",
    xaxis=dict(type='date', title='Date'),
    yaxis=dict(title='Task', autorange="reversed"),
    barmode='stack',
    height=400
)

# 図の作成
fig = go.Figure(data=bars, layout=layout)
fig.show()

結果は以下の通り。

まだまだ全然ダメです。

結論メモ

WBSのような階層構造を持ったタスク構造を表現しつつ、管理項目をそれに紐づけて表示した上で、カレンダー上にGanttチャートを表示して進捗管理を行うというビジュアライズは結構むずかしことがよくわかりました。

Comments