計画・割り当て・実績という別々の場所で管理されている3つの数字を1画面に並べ、 «今月あと何時間・いくら使えるか» «割り当て漏れ» «過負荷» «実績とのズレ» を毎朝ひと目で拾うためのダッシュボードです。 職務経歴書に書いた実績と同じ課題ジャンルを、公開できる形でゼロから設計し直したものです。
ボードが「今月どうか」を見る画面なのに対し、こちらは案件の開始日から終了日までを ひと続きの期間として合計した一覧です。対象月に1日でも稼働している案件だけを並べます (終わった案件・これから本格化する案件も、その月に期間が重なっていれば出ます)。
予定は期間の最後まで、実績は本日(2026/07/21)までしかありません。そのため消化率だけを見ると 進行中の案件はすべて未消化に見えます。そこで「予定工数消化率」=本日までに消化しているはずの割合 (期間の予定を日割りして積み上げたもの)を並べ、実績の消化率と比べます。 差が20ポイント以上開くか、実績が予定を使い切った(100%超)ときに、 工数超過/工数余剰/原価超過/原価余剰として出します。工数と原価は別々に判定するので、 「工数は予定どおりだが原価だけ超過」のような状態がそのまま表示されます。 行をクリックすると、その案件の工数実績(案件詳細)へ移動します。
開始日時点の残高=期間全体の予定工数(月ごとの割り当ての合計)。 そこから日々の実績を引いていきます。灰色の点線は予定のペースで、 月ごとに割り当てが違うぶん傾きが変わります(均等割りではなく、その月の予定を日割りして積み上げた線)。
同じ期間を原価(等級別の時間単価 × 割り当て)で見たものです。 工数の線と形が違えば、予定と違う等級の人が動いているということになります。
月ごとのセルは上段=その月の割り当て(%)/下段=実績工数(h)。 右の4列は期間全体の合計です。割り当てが無いのに実績がある月(差し込み対応)は色を変えています。
月初の残高=予定工数(割り当ての合計)。そこから日々の実績を引いていき、 本日時点の残りを見ます。灰色の点線は、予定を営業日数で均等に割った理想のペースです。
同じ見方を金額に置き換えたもの。メンバーの等級ごとに1時間あたりの単価が違うため、 工数の残りと原価の残りは一致しません。単価の高いメンバーが多く動いた月は、時間に余裕があっても予算が先に尽きます。
同じ「消化率65%」でも中身は違います。工数の消化率と原価の消化率を並べると、 工数どおりに進んでいるのに原価だけ先に減っている案件(=単価の高いメンバーに作業が寄っている)が見つかります。 行をクリックすると、その案件だけに絞り込みます。
「理想」は経過した営業日の割合(全社では–)です。これを大きく超えていれば使いすぎ、 下回っていれば消化が遅れています。月の途中で始まった案件は、その案件が動いている営業日ぶんで判定します (各行に理想の値を出しています)。案件の通算で見たいときは「工数実績(案件一覧)」タブへ。
濃いほど割り当てが厚い。合計が100%を超えている人は右端に印が出ます。 黄色い枠のセルは「割り当てが無いのに実績だけ入っている」=計画外の差し込み対応の疑いです。
バーは実績時間、縦線は計画時間の位置。線を大きく超えていれば使いすぎ、 遠く手前で止まっていれば進んでいないか実績が入っていません。
割り当て%から計算した想定時間と、実際の実績時間の差。 右(赤)が想定超過、左(青)が想定未満です。差の大きい順に上下へ振り分けています。
上の3つの見方を突き合わせて、機械的に拾えるものを一覧にしています。 ここが「毎朝の確認作業」を置き換える部分です。
ある程度の規模のチームでは、リソースの情報が3段階に分かれて別々の場所に溜まります。 ①案件側が立てる計画(何人・何時間必要か)②管理側が決める割り当て(誰をどこに何%) ③本人が入力する実績(実際に何時間)。3つとも「人 × 案件」の話なのに、 置き場所も更新のタイミングも粒度も違うため、突き合わせは手作業の表計算になりがちです。 この画面は、その突合を毎朝の自動処理側に寄せることを狙っています。
消化の状況は「今月これだけ使った」(積み上げ)でも表せますが、この画面では 予定を月初残高に置き、そこから引いていく形にしています。 現場が知りたいのは使った量ではなく「あとどれだけ残っているか」で、 引き算の形にすると残高がそのまま縦軸に出るためです。灰色の点線=理想のペースと比べれば、 線が下に離れていれば使いすぎ、上に離れていれば消化が遅れている、と一目で判断できます。
工数と原価を別の画面に分けているのも意図的です。 メンバーの等級によって1時間あたりの単価が違うため、この2つは一致しません。 単価の高いメンバーが多く動いた月は、時間には余裕があるのに予算が先に尽きます。 同じ軸に重ねると(単位の違う2本の縦軸になり)関係のない相関を読ませてしまうため、 形を揃えた2枚のチャートを並べて、差そのものを読み取れるようにしました。
案件の良し悪しを消化率だけで判断することはできません。予定は期間の最後まであるのに、 実績は今日までしか無いからです(半分しか経っていない案件の消化率50%は正常)。 そこで本日までに消化しているはずの割合=予定消化率を工数・原価それぞれで出し、 実績の消化率と比べています。判定は2つで、①予定消化率との差が20ポイント以上開く ②実績が予定を使い切っている(100%超)。工数と原価を別々に判定しているのは、 片方だけがずれる状態こそ拾いたいものだからです (工数は予定どおりでも、単価の高いメンバーが動いていれば原価だけ先に超過する)。
予定消化率は「期間の経過率」ではなく予定そのものを日割りした累計にしています。 月によって割り当て人数が違う案件では、この2つは一致しません (後半に人を厚くする案件は、期間が半分過ぎても予定の消化は半分に届かない)。
見たいものの期間の単位が違うためです。ボードは「今月あと何時間使えるか」= 月の中の残高を見る画面で、締めの単位が月に固定されています。一方で案件は月をまたぎ、 月初から始まるとも月末で終わるとも限りません。案件の良し悪しは着手から完了までの通算で見るもので、 これを月次の画面に同居させると「今月の消化」と「案件通算の消化」という別物の数字が並び、必ず取り違えが起きます。 そこでタブで画面ごと分け、工数実績(案件一覧)のほうは対象月を「どの案件を並べるか」の絞り込みにだけ使い、 表に出る数字は期間トータルとしました。さらに工数実績(案件詳細)を分けて、 1案件を期間全体で掘る場所(消化の推移・誰がどの月に入っていたか)を用意しています。 一覧で気になった案件をクリックすればそのまま詳細に入る、という順路です =一覧で見つける → 1件を掘るの2段階に画面を対応させています。
月をまたぐ以上、月の途中で始まる・終わる案件が出ます。その月の予定工数は その案件が動いている営業日ぶんに按分して数え、消化の理想線もその案件の稼働日から下がり始めるようにしています (月まるごとの予定と比べると、途中から始まった案件が一律で「消化が遅れている」と誤検知されるため)。
表示しているデータは全て自動生成した架空のものですが、ランダムに散らしているわけではありません。 案件ごとに「消化のクセ」を設計して埋め込んでいます — 工数も原価も超過している案件、 工数は想定どおりなのに上位等級に作業が偏って原価だけ先に減っている案件、 工数は超過ぎみでも下位等級中心なので原価は予定内に収まっている案件、 立ち上がりが遅れて後半に巻き返している案件、ほとんど動いていない案件。 全部が予定どおりに進むデータでは、このダッシュボードを見る意味が無いためです。 案件の期間もばらしてあります — すでに完了した案件、今月立ち上がったばかりの案件、 1ヶ月だけのスポット案件などを混ぜ、対象月を切り替えると工数実績(案件一覧)の顔ぶれが変わるようにしました。 生成スクリプトには「案件の進み具合が3種類以上あるか」「工数は想定どおりだが原価だけ減る案件が存在するか」 「対象月ごとにその月にしか出ない案件があるか」を確認する自己チェックを入れてあり、 条件を満たさないと生成が失敗します。
この種のツールの効果は「作った画面の数」ではなく、消えた作業で測ります。 置き換え対象は「毎朝/毎週、複数システムから抽出して表計算で突き合わせていた時間」。 役割ごとに削減時間を見積もり、人数を掛けて月あたりの人日に換算するのが実務的です。 厳密な計測をしていない場合は、その旨も含めて概算だと明示するのが誠実だと考えています。
合成データの生成から集計・HTML生成までを1本のPythonスクリプトにまとめ、 画面側は表示と絞り込みだけを担当します(重い処理をブラウザに持ち込まない)。 絞り込みの組み合わせ(月 × チーム × 案件)はあらかじめ全通り集計してページに埋め込んであるため、 操作しても再計算も通信も発生しません。代わりにページ自体は大きくなりますが、 同じ構造の繰り返しなので圧縮が効き、実際に転送されるのは1割程度です。生成スクリプトはリポジトリに同梱しています。