台帳の主役を、金額から人・時間に替えた

前回、全国版では金額を出さないと決めました。ツールが出すのは人・時間までで、単価を掛けるのは使う人です。

そう決めると、すぐに困るところがあります。台帳です。前の版の台帳は、1件を登録すると、いちばん上の列に金額が並びました。その列が空きます。

空いた列に何を置くか。今回は、全国版の台帳の芯を決めた話です。

目次

前の版の台帳は、金額の帳簿だった

前の版にも、台帳をCSVで書き出す機能がありました。ただ、ほとんど使いませんでした。種別ごとに物差しが色々分かれていて、1枚の表にすると扱いにくかったからです。

書き出されるCSVの列は、13個で決まっています。登録番号や業務名称のほかに、物差しの列として「建築物の類型」「床面積」「工事費」の3つ。そして最後に「業務価格」「消費税」「委託料」の金額が3つです。

新築なら、類型と床面積が埋まります。ところが、ほかの種別は事情が違います。

  • 改修の物差しは図面の枚数ですが、図面の列はありません
  • 工事監理(改修)は工期で数えますが、工期の列もありません
  • 耐震は床面積が入りますが、診断か改修設計かの区分は落ちます
  • 解体は工事費が入りますが、そこから引いた人・日は落ちます
前の版の台帳CSV。物差しの列は空いた行が多く、金額の3列だけが全行で埋まっている

6つの種別を並べてみると、全部の行で埋まっているのは金額の3列だけでした。物差しは台帳の中に記録されているのに、種別ごとに形が違うので、決まった列に入りきらない。結果として、1枚の表で比べられるのは金額だけになります。

台帳は、案件の記録のつもりで作っていました。並べてみると、中身は金額の帳簿でした。

同じ四角の仕切りが並ぶ木のトレーに硬貨だけが収まり、定規・丸めた図面・暦・金槌は入る場所がない

人・時間を主役にすると、行の形がそろう

金額を外したあと、全部の行で必ず埋まるものは何か。人・時間です。

設計料の告示は、業務の量を金額ではなく人・時間で数えます(人・時間で数える理由)。新築は床面積から、改修は図面の枚数から、監理(改修)は工期から。入口の物差しは違っても、出てくるのはどれも人・時間です。だから、そこを台帳の主役に置けば、種別が違っても行の形がそろいます。

全国版の台帳そのものには、登録番号と業務種別と人・時間の3つだけを置きました。

登録番号業務種別人・時間
2026-001建築設計業務(新築)5,291.45
2026-002改修設計業務122.96
2026-003工事監理(新築)1,681.65
2026-004工事監理(改修)184.00
2026-005耐震診断347.52
2026-006解体設計業務576.00

解体の行は、前の版では人・日で出ていました。全国版では、ほかの種別と同じ人・時間にそろえ、1日を8時間で換算しています。国が公表している技術者の単価は1日あたりの額ですが、どの単価を8時間で割っても、小数第一位くらいまででうまく割り切れる数字になっています。単位がそろっていないと、同じ列に並べても足したり比べたりできません。

人が入れた値は、1つずつ根拠と一緒に持つ

物差しは、台帳とは別の表に移しました。前の版のように「床面積」「工事費」と物差しの名前を列にすると、種別が増えるたびに列が増え、ほとんどの行で空欄になります。全国版では、1つの値を1行にして、「項目」と「値」で持ちます。種別が増えても、増えるのは行で、列は増えません。

そして、その1行ごとに根拠を付けました。前回、ツールに決めさせない数字は人が入れると決めました。人が入れた数字は、誰が何を見て入れたのかが残っていないと、前の版の金額と同じように独り歩きします。

根拠を1件に1つだけ持つ形も考えました。ただ、それだと「この係数はなぜこの値なのか」までは残りません。面積も係数も、入れたのは人です。だから値ごとに、何を見て入れたかを書きます。

登録番号項目値根拠
2026-004工期6か月工事の契約工期
2026-004係数1.00標準。割り増す理由なし
2026-006工事費4,800万円解体の概算工事費
2026-006類第2類構造と規模から判断
2026-006依頼度0.35委託する業務の範囲
2026-006標準業務人・日72人・日参考表から引いた値を確認し、8時間で換算
同じ形の索引カードが並び、どのカードにも砂時計の印と、それぞれ違う小さな道具が留められている

AIに頼んだのは、決めたことを並べるところまで

テーブルは、ここまで決めたことをそのままAIに渡して作ってもらいました。

全国版の台帳をSQLiteで作りたい。台帳の主役は人・時間で、金額の列は持たない。新築・改修・監理・監理(改修)・耐震・解体で物差しが違っても、同じ形の行で持ちたい。人が入れた値(面積・図面枚数・工期・係数など)は、1つずつ「何を見て入れたか」の根拠と一緒に残し、根拠が空なら登録できないようにしてほしい。テーブルの定義と、架空の6件を入れて確かめるスクリプトを作ってほしい。

出てきたテーブルは、2つです。

CREATE TABLE ledger (
  id         TEXT PRIMARY KEY,   -- 登録番号
  work_type  TEXT NOT NULL,      -- 業務種別
  man_hours  REAL NOT NULL       -- 人・時間
);

CREATE TABLE ledger_input (
  ledger_id  TEXT NOT NULL REFERENCES ledger(id),
  item       TEXT NOT NULL,      -- 項目(床面積・図面一覧・工期・係数…)
  value_num  REAL,               -- 数で持つ値
  value_text TEXT,               -- 数にならない値(類型・区分など)
  unit       TEXT,               -- 単位(㎡・行・か月・円)
  basis      TEXT NOT NULL,      -- 根拠(何を見て入れたか)
  PRIMARY KEY (ledger_id, item),
  CHECK ((value_num IS NULL) <> (value_text IS NULL))
);

作る途中で、2か所引っかかりました。

1つ目は、値の型です。床面積や工期は数ですが、類型や区分は数になりません。値の列を1つにして文字で持つと、床面積の合計が計算できなくなります。そこで、数の列と文字の列を分け、どちらか片方だけが入るように制約を付けました。

2つ目は、置き場です。台帳のファイルを共有フォルダの上に作ろうとしたら、書き込みの途中で止まりました。SQLiteは、ネットワーク越しのフォルダでは書き込みがうまくいかないことがあります。いまは手元で組んでから共有フォルダに写していますが、これは台帳の正本をどこに置くかの話とつながるので、あらためて考えます。

確かめに、根拠を空にして値を1つ入れてみました。登録は止まり、NOT NULL constraint failed: ledger_input.basis と返ってきます。根拠のない数字は、台帳に入りません。

金額は消したのではなく、台帳の外で掛ける

台帳から金額の列はなくなりましたが、金額が要らなくなったわけではありません。委託料を決めるときには、やはり金額にします。違うのは、それを台帳の中に書き込まないことです。

金額は、人・時間に単価を掛けたものです。単価は国が毎年改定します。前の版の台帳では、登録した時点の単価で掛けた金額だけが残っていました。年度をまたいで2件を並べると、手間の差なのか単価の差なのか、金額からは分かりません。

人・時間で残しておけば、手間そのものを年度をまたいで比べられます。金額が必要になったら、そのとき使う単価を、年度と出典と一緒に別の表から持ってきて掛ける。単価の表を台帳と分けておけば、単価が改定されても、台帳の行は1行も書き換えずに済みます。

次回は、その単価の表の話です。単価をコードの中から出して、年度と出典と一緒に1行で持たせます。

開いた台帳と、離れて置かれた小さなカード箱。その間の白い紙の上に鉛筆が差し出されている

手元の台帳の、全部の行で埋まっている列はどれですか

仕事で使っている一覧表を、1つ思い浮かべてください。案件の台帳でも、工事の一覧でも構いません。

全部の行で埋まっている列はどれでしょうか。それが金額だけなら、その表で比べられるのは金額だけです。種別が違う行を同じ表に並べたいなら、種別ごとに名前の違う列を足すより先に、どの種別にも必ずある1つの量を探すことです。

その量が決まれば、残りの違いは「項目」と「値」の行に収まります。そこに根拠を1つずつ添えておけば、数字は前提ごと残ります。


参照:令和8年3月から適用する設計業務委託等技術者単価(国土交通省、令和8年2月17日)

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次