はじめに
ExcelのWBSを進捗管理ツールに置き換えた話の5本目で、最後の記事です。
- ExcelのWBSを捨てずに、AWSサーバーレスの進捗管理ツールへ置き換えた
- Excelとの往復を壊さない取込の作り方(下見・全件主義・列の持ち方)
- 同じAWSアカウントに似た名前のスタックが同居しているときのデプロイの守り方
- テストが通っても安心できないので、実装をわざと壊して確かめる仕組みを作った
- 作った進捗管理ツールに入力が集まらなかったので、入れてもらうための機能を足した(この記事)
ツールを作って1か月ほどたった8月下旬に、DB に何が入っているかを数えました。思っていたより、ずっと少なかったです。この記事では、数えて分かったことと、そこから足した機能を書きます。
数えたら、入っていなかった
貯まっているデータを画面から読めるようにしたあと、中身を数えました。
タスク 169件
実績開始日 14件(日付を持つ157件のうち)
備考 0件
変更履歴 491件
Excel の取込由来 422件
画面から直接 69件(うち管理者以外は3件)
画面から直接入れた変更は69件で、そのうち管理者(私)以外が入れたのは3件でした。ほとんどの更新は、私が Excel でまとめて取り込んだものです。
さらに調べると、担当者4人のうち2人は、そもそもツールに入れていませんでした。
| 担当 | 何が起きていたか |
|---|---|
| 42件 | 招待から23日たっても、初回のパスワード変更をしていない状態のまま。仮パスワードは7日で切れていた |
| 28件 | 名前だけ登録した「担当者候補」のまま。ログインの手段が無かった |
合わせて70件、全体の4割が、ツールに入れない人の担当でした。
画面にグラフや集計を足しても、入力が無ければ何も映りません。そこで、見せる機能ではなく、入れてもらうための機能を足すことにしました。
入れない人が分かるようにする
ログインの状態を出す
メンバー一覧に、ログインの状態を出すようにしました。Cognito のユーザーの状態から決めています。
| 状態 | 意味 | 画面 |
|---|---|---|
| 利用中 | ログインできる状態 | 緑 |
| 招待済み | 招待したが、まだ一度も入っていない | 橙。仮パスワードの期限も出す |
| 期限切れ | 仮パスワードが切れて、もう入れない | 赤。「招待し直す」ボタンを出す |
| 候補のみ | 名前だけの登録。ログインできない | 灰 |
| 不明 | Cognito に居ないか、引けなかった | 灰 |
「利用中」は「入れる」という意味で、「入っている」ではありません。最終ログイン日時は Cognito が持っていないので、そこまでは出していません。
決めたことがいくつかあります。
| 決めたこと | 理由 |
|---|---|
| 仮パスワードの有効日数はユーザープールの設定から読む | 画面に 7 と書くと、設定を変えたときに画面だけが違うことを言う |
| Cognito が引けなくても、一覧は返す | 状態が出ないより、名前が出ないほうが困る |
1人ずつではなく ListUsers でまとめて引く |
人数ぶん往復しない |
一覧に状態を出すだけでは足りなかったので、「ログインできない人が担当しているタスクが◯件あります」という帯も出しています。5人の中の1人が赤いことは見れば分かりますが、その人の担当が42件あることは、一覧からは読めないためです。
招待をやり直せるようにする
期限が切れた人には、画面から招待を送り直せるようにしました。Cognito の admin_create_user を MessageAction="RESEND" で呼んでいます。
招待は「送った」で終わりにしがちです。仮パスワードが切れても、本人にも招待した側にも何も出ません。送りっぱなしにできる機能には、届いたかを見る口も付けることにしています。
名前だけの登録と、招待した人を1人にまとめる
運用では「先に名前だけ登録して担当を割り振り、あとで招待する」という順番が普通でした。そのままだと、同じ人が「候補」と「招待した人」の2行で並びます。
そこで、招待したときに、同じ表示名の候補を1つにまとめるようにしました。タスクの担当者は表示名で持っているので、まとめても担当のつながりは切れません。
表示名が1文字でも違うとまとめません。別の人を消してしまうよりは、同じ人が2行並ぶほうがましだからです。
入れる手間を減らす
実績を1件入れるのに、「探す → 編集を開く → 10項目のモーダル → 日付を選ぶ → 保存」と5手かかっていました。
そこで、タスク一覧の行に「今日完了」ボタンと、進捗のプルダウンを置きました。
| 操作 | 送るもの |
|---|---|
| 今日完了 | 実績開始日(空なら今日)と実績終了日 |
| 1〜99% | 進捗率と実績開始日。実績終了日は空にして送る |
| 0% | 進捗0、未着手、実績日はどちらも空 |
進捗率とステータスの決め方は、画面に写していません。「実績終了日があれば100%・完了」というルールはサーバーだけが持っていて、画面は実績日を送るだけです。写すと、モーダルから入れたときと一覧から入れたときで結果が変わりえます。
進捗を下げるときに実績終了日を空にして送るのも、このためです。終了日が残っていると、サーバーが100%に戻します。
プルダウンの刻みは 0, 10, 20 … 100 の11段にしました。報告する側は、37% と 40% を区別していないからです。取込などで入った 37% のような刻みに無い値は、丸めずにそのまま選択肢に足して見せています。40 と表示すると、触っていないのに数字が変わったように見えるためです。
アプリを開かない人にも届ける
週次サマリを Teams に送る
ツールは、開いた人にしか見えません。そこで、毎週月曜の朝に、進捗のまとめを Teams に送るようにしました。
今週のWBS: 〇〇案件
全体進捗 8.3%(前週比 +8.3%)
遅延 0件(±0件)
タスク数 169件(-6件)
比較 2026-08-17 → 2026-08-24
――― 担当者ごと(未完了)
担当A 遅延2件 / 今週まで3件
担当B 今週まで1件
全体の数字だけでは、読んでも自分が何をすればいいのか分かりません。169件を4人で分けているので、「全体8.3%」は誰の話でもないのです。そのため、担当者ごとの行を付けています。
出すのは、遅延と今週期限の件数だけです。担当件数や進捗率も出せますが、数字が増えるほど自分の行を探しにくくなります。動かすものが無い人の行は出しません。
カードの色で、見たほうがいい週かどうかを分けています。
| 状況 | 色 |
|---|---|
| 遅延が増えた | 赤 |
| 進捗が動いていない | 橙 |
| それ以外 | 緑 |
初回は前週比を出しません。比べる相手がいないのに「±0%」と出すと、動いていないように見えるためです。
Teams の Webhook は1つのチャネル宛てなので、個人あてには送れません。各自が自分の行を探す形です。個人に送るには Graph API とアプリの登録が要るので、いまは見送っています。
消した案件には送らない
週次サマリを入れてしばらくして、生きている案件は1つなのに、毎週3通届いていることに気づきました。アーカイブ(論理削除)した2案件のぶんも送っていました。
アーカイブは案件を消さず、状態を変えるだけです。案件を順に見ていく処理は、状態を見ていなければ、消した案件も何も変わらずに拾い続けます。消えていたのは画面からだけでした。
いまは、アーカイブした案件には通知を送りません。ただし、記録は止めていません。復元したときに週ごとの並びが途切れないようにするためです。
| 決めたこと | 理由 |
|---|---|
| 記録は続け、通知だけ止める | 復元したときに記録が途切れない |
| 状態を持たない古い案件は、生きているとみなす | 黙って通知が止まるほうが困る |
| 案件の情報を読めなかったら、送る側に倒す | 通知が余分に出るのは煩わしいだけだが、来ないのは「何も起きていない」と見分けがつかない |
案件ごとに通知を絞る
タスクの変更通知は、1件変わるたびに1通送ります。仕事の WBS ならそれでよいのですが、同じツールで管理し始めた個人の学習計画では、通知が多すぎました。かといって Webhook の設定を消すと、ほかの案件の通知まで止まります。
そこで、案件ごとに通知の範囲を決められるようにしました。案件管理の画面から、管理者だけが変えられます。
| 設定 | 何が起きるか |
|---|---|
| 全部通知 | いままでどおり |
| 通知しない | 変更通知も週次サマリも止まる |
| 指定した番号だけ | その WBS 番号と配下だけ通知する(2 なら 2.1 も) |
「全部通知」は属性なし、「通知しない」は空のリストで持っています。この2つを同じ扱いにすると、「既定のまま」と「わざと止めた」の区別がつかなくなります。
ここでも、絞るのは通知だけです。変更履歴は全件残します。
重さと順序を持たせる
入力が集まり始めると、次は「全体8.3%」が何を意味するのかが問題になりました。
このツールは、日付と進捗率しか持っていませんでした。重さの違う作業も同じ重みで平均されるので、全体の数字が実際の作業量を表していません。1つ遅れたときに、何が引きずられるのかも読めませんでした。
そこで、工数と先行タスクを足しました。
| 項目 | 親への集め方 |
|---|---|
| 進捗率 | 子の平均 |
| 工数 | 子の合計 |
8時間と2時間の子を持つ親は10時間で、5時間ではありません。誰も工数を入れていなければ、0ではなく空にします。0と出すと「見積もった結果0時間」に見えるためです。
先行タスクを入れると、遅れているタスクの横に、後ろで引きずられるタスクの件数を出します。
あわせて、当初計画(ベースライン)を控えて、いまの予定と比べられるようにしました。「遅れている」のか「計画を動かし続けている」のかは、当初の計画と比べないと区別できません。
ガントに「今日あるべき位置」を重ねる
最後にもう1つ。ガントのバーに、今日の時点で進んでいるべき位置の目盛りを重ねました。
画面の「遅延」は、予定終了日を過ぎたかどうかで決まります。期限の前に遅れ始めていることは、遅延の表示では分かりません。塗り(実績)が目盛りより手前なら、期限前でも遅れ始めています。
画面はダミーのデータで撮っています。
足したあと、入力は増えたか
この記事を書くにあたって、10月はじめにもう一度数えました。
| 項目 | 8月下旬 | 10月はじめ |
|---|---|---|
| 実績開始日が入ったタスク | 14件 / 157件 | 14件 / 157件 |
| 機能を足したあと2週間の、画面からの入力 | − | 0件 |
| 初回のパスワード変更をしていない人(担当42件) | 1人 | 1人 |
| 名前だけの登録の人(担当28件) | 1人 | 1人 |
| 工数・先行タスク・コメント・当初計画 | − | どれも0件 |
増えていませんでした。
理由の1つは、3本目の記事に書いた巻き戻りです。入れてもらうための機能は、9月10日から10月3日まで本番から消えていました。足してから使える状態だったのは、2週間ほどです。
ただ、その2週間も画面からの入力は0件でした。「招待し直す」も押されていません。機能を用意しただけでは、入れない人は入れないままでした。
次は、期限切れの人に招待を送り直し、名前だけの人を招待するところから始めます。どちらも画面のボタン1つでできますが、押すのは管理者の私です。
おわりに
数えてみるまで、入力が集まっていないことに気づいていませんでした。画面を見ているのは主に自分で、自分が取り込んだデータが並んでいたからです。
| 分かったこと | 足したもの |
|---|---|
| 入れない人がいた | ログインの状態、招待のやり直し、担当の帯 |
| 入れる手間が大きかった | 一覧からの「今日完了」と進捗のプルダウン |
| 開かない人には届かない | 月曜の週次サマリ(担当者ごとの行つき) |
| 消した案件の通知が混ざっていた | アーカイブした案件は通知しない |
| 全体の数字の意味が曖昧だった | 工数、先行タスク、当初計画との比較 |
作って終わりにせず、貯まったものを数えてみることをおすすめします。数えると、思っていたのと違う結果が出ることがあります。
シリーズはここまでです。読んでいただき、ありがとうございました。