📑

ChatGPTを活用したシステム開発の期間見積もり

2024/12/27に公開

はじめに

受託開発の提案を行なっていると、「このプロジェクトはどれぐらいの期間がかかるのか」「この日に開始したらいつ終わるのか」なども考慮しながらアサインを決定しています。こういう案件の提案では、工数から期間を算出することもあれば、開始終了日が決まっていてどれぐらい人を入れるのか。という時もあります。今回は、「工数から期間を算出する」を楽にしたい・・・と思い、ChatGPTを使いながら迅速な見積もりを出せるようにしていきます。

今回解決したいこと

  • 工数が決まった状態での期間の算出

工数計算の基本概念

  1. 工数の基本的な考え方
    工数は、タスク・作業の合計時間をリソース(人数や稼働率)で割ることで算出ができます。
    工数を出した後に、必要な作業日数や月数を計算します。
  • 人日・人月の定義
    • 1人日:1人が1日働いた作業量を「1」とする単位
    • 1人月:1人が1ヶ月働いた作業量を「1」とする単位

計算式:

\text{必要期間(日)} = \frac{\text{総工数(人日)}}{\text{1日あたりの稼働人数}}

例)

  • タスク総工数: 100人日
  • 稼働人数: 5人
  • 必要日数:100
    \frac{100{人日}}{5{人}} = 20 \, \text{日}
  1. 提案時での工数計算について
    私は、正確さよりも「合理的で説明可能」な見積もりを行うことを心がけています。(なお、案件特性や提案のフェーズによっては正確さを大事にすることもあります。)
    工数は大まかな機能・タスクレイヤーまで落とし込み、顧客に説明できる状態を作っておくようにしています。また、これらを事前に作っておくことで、案件のスコープについても議論しやすくなり、要件の追加/変更などにも柔軟に対応及び共通認識を作成することができます。こうすることで、どのタスクにどのようなリスクがあるのかを事前に把握・共有することができるメリットもあります。

  2. 提案段階で考慮すべき要素
    稼働期間: 休日・祝日を考慮した期間を設定する
    チーム構成: 提案時点で稼働可能な人数を仮定しておく
    リスクの考慮: 想定外のタスクや遅延リスクを工数(コンティンジェンシー予備)に上乗せしておく

工数から案件期間を算出してみる

前提

  • 合計:100人月
  • 案件開始日:2024/12/25
  • 人数:30人
  • 平均稼働率:90%

プロンプト①

{#前提}をもとにシステム開発を行う日数を算出してください。
計算の過程を簡易的に出してください。

# 前提
- 合計:100人月
- 案件開始日:2024/12/25
- 人数:30人
- 平均稼働率:90%

ChatGPTの回答①

土日・祝日が考慮されていなかったため、100連勤する前提の案件期間になってしまいました。

### 計算過程
1. 1人の稼働日数/月を計算
   平均稼働率が90%なので、1人の稼働日数/月は次のように計算されます。
    20日/月(1ヶ月あたりの稼働日数目安) × 0.9 = 18日/月

2. 1ヶ月のチーム総稼働日数を計算
    チーム全体(30人)の1ヶ月の稼働日数は以下の通りです。
    30人 × 18日/月 = 540日/月

3. 必要な稼働月数を計算
    合計作業量(100人月)を30人のチームで計算すると、
    100人月 ÷ 30人 = 3.33ヶ月

4. 必要な稼働日数を計算
    必要な稼働日数を具体的に計算します。
    100人月 × 18日/月 = 1800日(全体の稼働日数)
    チーム全体では、
    1800日 ÷ 540日/月 = 3.33ヶ月

5. 終了予定日を算出
    3.33ヶ月は約100日(1ヶ月を30日換算)に相当します。  
    案件開始日(2024年12月25日)から100日後を計算すると、

    2025年4月3日頃

プロンプト②

プロンプト①で土日も考慮できてなかったので、プロンプト②では、考慮したプロンプトに修正します。

{#前提}をもとにシステム開発を行う日数を算出してください。
計算の過程を簡易的に出してください。

# 前提
- 合計:100人月
- 案件開始日:2024/12/25
- 人数:30人
- 平均稼働率:90%
- 土日・祝日は稼働しない

ChatGPTの回答②

回答内容を確認すると、祝日が考慮されてなさそうだったため、次はもっと明示的に回答するように改良します。

システム開発を行う日数を算出する手順は以下の通りです。
1. 総作業時間(合計100人月)を計算
    1人月はおおよそ20営業日として計算されるため、100人月は「100 × 20 = 2000人日」に相当します。

2. 1日の稼働人数と平均稼働率を考慮
    30人が90%の稼働率で働く場合、1日の稼働時間換算は「30人 × 0.9 = 27人日」となります。

3. 必要な稼働日数を算出
    必要な稼働日数は「2000人日 ÷ 27人日 ≈ 74.07日」です。

4. カレンダー日数を計算
    案件開始日から必要な稼働日数をカレンダーに当てはめ、土日・祝日を除外して計算します。

### カレンダー計算
案件開始日が2024年12月25日(水曜日)であるため、以下の条件を考慮します:
- 稼働日は平日のみで、土日・祝日を除外します。

計算を実施して、正確な終了日を算出します。
計算結果は以下の通りです:
- 必要な稼働日数: 約74営業日
- 案件終了予定日: 2025年4月9日(水曜日)
※ 土日を除外して計算しています。

プロンプト③

祝日も考慮してもらうように修正していきます。
また、祝日を考慮してもらえるか知りたいのでプロンプトに日付も出力してもらうことにします。

{#前提}をもとにシステム開発を行う日数を算出してください。
計算の過程を簡易的に出してください。

# 前提
- 合計:100人月
- 案件開始日:2024/12/25
- 人数:30人
- 平均稼働率:90%
- 土日・祝日は稼働しない

ChatGPTの回答③

いい感じに出力してくれた気がします。

### 1. 計算の方針
システム開発期間を算出するため、以下の手順で計算を行います。
    1. 1人当たりの1日稼働量を計算する(90%の稼働率を考慮)。
    2. 30人で稼働する場合の1日の総稼働量を計算。
    3. 必要な稼働日数を算出する。
    4. 土日祝日を除いた実際の稼働可能日を基に開発期間を求める。
    5. 日本の祝日情報を2025年1月~完了予定月までリストアップ。

### 2. 条件の整理
    - 総作業量: 100人月
    - 1人の1か月の稼働日数: 20日(平日稼働が前提)
    - 総作業日数:100×20=2000人日
    - 1日の稼働率: 90%
    - チーム稼働人数: 30人
    - 案件開始日: 2024年12月25日(水)

### 3. 計算
    3.1 1人1日の稼働量
        1人の1日の稼働量=1×0.9=0.9人日
    3.2 30人の1日の稼働量
        30人の1日の稼働量=30×0.9=27人日
    3.3 必要な稼働日数
        必要な稼働日数=2000/27≈74.1日

    約74日が必要。

### 4. 土日祝日を考慮した日程計算
    4.1 対象期間のカレンダー確認
        2024年12月25日から始まり、土日・祝日を除いた日数を計算します。
    
    4.2 日本の祝日リストアップ
        2024年12月25日以降に該当する祝日(2025年分含む):
    
        2024年12月31日(年末年始)
        2025年1月1日(水)~1月3日(金)年始休暇
        2025年1月8日(月)成人の日
        2025年2月11日(火)建国記念の日
        2025年2月23日(日)天皇誕生日
        2025年3月20日(水)春分の日

計算の結果、土日・祝日を考慮した稼働期間を基にした開発終了予定日は2025年4月16日です。

最後に

実際に期間算出する際に明示的にプロンプトに指示を出すことで、工数計算をしてくれるのは非常に助かりました。もっと精密にするためには、「タスクの依存関係」や「クリティカルパスの導出」などを考慮するなどさまざまな方法があるかと思います。

今後もAIに任せれるタスクは任せて、人間がやるべきことにしっかり注力していきたいと思います。

Aidemy Tech Blog

Discussion