見出し画像

Spec Kitを使う前に、テストケースで要求を固めた【通算131|要求AI 48】

前回、freee人事労務には36協定違反を予防する機能がなく、そこがアドオンになると書いた。

今回は、そのアドオンの要求を固めた。4時間ほど。Spec Kit はまだ使っていない。使ったのは Claude Code と freee MCP と、確認用のHTMLの画面だけ。それでどこまで固まったかを書く。

要求は、4つの視点で書いた。

(1)|目標——所属長が、36協定違反を予防できるようにする

36協定違反とは、残業時間が協定で決めた上限を超えることになる。それが起きる前に——部下の残業が月45時間の上限に達する前に——所属長が気づいて、仕事を減らせるようにする。

範囲は月45時間だけにした。複数月平均の80時間も、年間の360時間・720時間も、特別条項の年6回も、今回は扱わない。

やることは2つになる。

  • 上限値を決める。月45時間と、その手前の注意の値(80%=36時間)

  • 上限値に達しそうな社員を、毎朝リストアップする。所属長が翌朝には知っている状態にする

「残業時間の合計」は目標にしない。減らすこと自体が目的ではない。超えないことが目的になる。

(2)|人間——所属長が、自分の部下だけを、毎朝1分で見る

見る人=所属長。所属長は入力をしない。打刻は部下が freee人事労務機能 で行う。

  • 部下は数名〜十数名。全社36人を見る画面は要らない

  • 所属長は労務の専門家ではない。「45時間」は知っているが、「複数月平均」は知らなくてよい

  • 部下は毎日必ず打刻する。遅くとも翌朝一番までに。打刻が無い日は残業の数字にならない。数字の信用は、部下の打刻にかかっている

  • 打刻を忘れた本人には、所属長が注意する。システムは「打刻なし」を見せるだけ

利用者は所属長だが、バックアップとして、人事部の労務担当が全社の状況を見られるようにする。所属長が見ていない部署があっても、労務担当が拾える。画面には「所属長として見る」と「全社を見る」の2つ。

ここで3つの要求が出た。

  • 兼務している人は、誰が見るか → 主務の所属長が見る

  • 課長と部長の残業は、誰が見るか → 課長は部長が見る。部長は自分で見る

  • 通知はするか → 今回は画面だけ。所属長が毎朝開く

(3)|システム——画面とテストケースで、要求を確かめた

freee人事労務からデータ取得。freeeへのデータ書き込みは無し。要求をアドオンで作る。

全体は、この図になる。

① 従業員が毎日打刻する。② freee人事労務がそれを日次・月次に集計して、勤怠管理をする。ここまでは freee をそのまま使う。打刻も、修正の申請と承認も、月末の締めも、全部 freee にある。

③ 月の途中で所属長が部下の残業時間を見る機能がない。そこをアドオンで作る。freee から日次勤怠を毎朝読んで、残業時間のチェックを行う。

前提がある。打刻が無い日も、freee は所定どおり働いたとみなして8時間を立てる。だから①の「毎日打刻する」が崩れると、③の数字も崩れる。

(3-1)|読むもの、作るもの

読むのは、日次勤怠と、誰がどの部署にいるか。こちらで作るのは、部下ごとの4つの数字になる。

残り              45時間 − 今月の実績
1日あたり         実績 ÷ 経過した営業日
上限に達する予定日  いまのペースで、月の何日に45時間に達するか
月末の見込み       いまのペースで月末まで行くと、何時間か

それと、打刻なし日数。打刻が無い日は freee が所定どおり働いたとみなして480分を立てるが、それは残業の集計から除いて、日数だけを別に出す。

(3-2)|画面——Spec Kit は使わず、HTMLで機能を確かめた

要求を文章で書いただけでは、機能を確認できない。画面を作って、実際の勤怠データで確認した。

作ったのは Claude Code になる。MCPで読んだ勤怠をJSONに落とし、HTMLで表示する。確認はブラウザで見るだけ。認証なし、ローカル、架空データ。

(3-3)|テストケース——目標に照らして、要求を確かめる

テストケースを作った。画面が正しく動くかを確かめるためではない。目標に照らして、要求に漏れがないかを確かめるため。目標に関係しないケースは「範囲外」と書いて作らない。ケースは29個になった。そのうち、要求そのものを変えたものが3つある。

いまは安全だが、いまのペースでは月内に上限に達する人。実績24時間45分で、まだ安全の範囲にいる。だが1日あたり2時間45分のペースなので、9月28日に45時間に達する見込みと出る。freee人事労務の勤怠モニターでは、わからない。実績が45時間を超えていないからになる。上限を超える前に警告する——このアドオンの存在理由が、このケースで初めて画面に出た。

退勤の打刻を忘れた日。出勤だけ打刻して、退勤を忘れた。freeeの日次勤怠を読むと、この日は「打刻なし」とまったく同じに見えた。打刻したのに「打刻していない」と注意されることになる。見分けるには、日次勤怠ではなく打刻そのものを読む必要があった。読むデータが1つ増えた。

所定休日に出勤した日。土曜に5時間働いた。freeeはこの5時間を、全部「時間外」として返してきた。合計には入れるべきだが、「1日あたり」のペースに入れると休日の分が平日に按分されて、予定日が前に出る。入れるかどうかは、まだ決めていない。

4つの視点の項目ごとに、それを確かめたテストケースと、そこで分かったことを一覧表にした。テストケースが無い要求が、確認していない要求になる。

懸案事項が、11個。決めたのが5、決まっていないのが2、まだ手を付けていないのが4。

(3-4)|テストデータ——claude code で用意して、MCPで登録した

テストケースに合わせて、9月の日次勤怠を数人分入れた。上限に達した人、達しそうな人、退勤を忘れた人、休日に出た人、欠勤した人。

freee人事労務 に入れれば、時間外も深夜も freee が計算して返してくる。こちらで計算し直す必要はなかった。

(3-5)|セキュリティなど——書き出したが、作っていない

  • どこから見るか(外出先からスマホでも)

  • 誰が見られるか(所属長本人だと分かった上で、その人の部下だけを出す)

  • データをどこに置くか(人事データを個人のPCに落とさない)

  • 誰がいつ誰の残業を見たかを、記録に残すか

  • 毎朝の数字が出ていないとき、出ていないことが分かるか

認証も、権限も、配信も、いまの画面には無い。扱うのが人事データである以上、ここが決まらないと作る場所が決まらない。要求として書き出すところまでにした。

(4)|データ——すべて freee人事労務 のデータで足りた

読むデータは、全て freee人事労務 にあった。新しいデータは作っていない。

従業員・所属・役職・兼務            freee から読む
日次勤怠(時間外・深夜・休日の内訳)  freee から読む
打刻そのもの(退勤忘れを見分ける)   freee から読む  ← テストで増えた
営業日カレンダー(所定休日・祝日)   freee から読む
上限値(45時間・36時間)            こちらで設定値として持つ

上限値だけは、freee の36協定設定がAPIに対応していないので、二重に持つことにした。

freeeさんのパッケージが用意しているデータだけで、要求の確認は完了した。

ここまで、Spec Kit は使っていない。Claude Code と freee MCP と、HTMLの画面と、テストケースの表。それで要求は固まった。


要件定義のご相談を、ココナラでお請けしています。
ta_kawano|ココナラ

#要求定義 #要件定義 #テストケース #freee #人事労務 #36協定 #SDD #SpecKit

いいなと思ったら応援しよう!