現場の困りごとから、40ユースケース・37エンティティへ。
「大型トラックの自動配車」「所要時間に対する労働時間の見込み」「請求先への一括請求とそれらが連動した統一管理」「重量管理などが複雑な貨物への対応」という現場の課題でした。これを業務要件に展開し、単一の真実源(SSoT)vehicle-dispatching-etc.dslmodel.json から、アクティビティ図14・ユースケース40・クラス図(8パッケージ)・ステートマシン7・シーケンス図40を生成しました。モデル検証は エラー0・警告0(品質スコア97.6)です。
各パッケージの詳細なクラス図です。クリックすると原寸で開きます(数字はエンティティ数)。
本ページは、業務要件からのモデル駆動開発の概要と、生成したアプリケーションの操作マニュアル(Web 管理画面・乗務員 iOS アプリ)をまとめたものです。画面・ボタン名は実装に準拠しており、画面ショットはデモデータ(30日分)で撮影しています。
- 対象アプリ: 車両配車関連管理システム(vehicle-dispatching-etc)
- 構成: フロントエンド(React + TypeScript + Vite)+ バックエンド(Express REST API・インメモリ)+ 乗務員 iOS アプリ(SwiftUI)
- 設計トレース: 業務要件 → 業務シナリオ → アクティビティ図 / ユースケース図(40 UC)/ クラス図 / ステートマシン図 → 実装
01要件からの生成
入力は、大型トラックで青果品・冷蔵品を物流センターへ輸送する運送事業者からの短い要望です。
・大型トラックにおける自動配車機能
・所要時間に対する労働時間の見込みを算出する労務管理機能
・請求先への一括請求機能およびそれらが連動した統一管理機能
・重量管理などが複雑な貨物にも対応できる配車・業務管理機能
これを「依頼・積載・配車・運行・労務・収支・統制」の業務要件に展開し、SSoT に落としてから uml-workflow-v3 の10ステップで設計・実装・テスト・追跡までを生成しました。
| 成果物 | 数量 |
|---|---|
| ユースケース(API と業務画面を実装) | 40 |
| エンティティ(一覧・詳細・作成・更新・削除の API と汎用画面) | 37 |
| ステートマシン | 7 |
| ビジネスルール | 44 |
| アクティビティ図 / シーケンス図 | 14 / 40 |
| テスト(単体27・結合117・シナリオ1) | 145(全件合格) |
1.1 ドメインエンジン
| エンジン | 内容 |
|---|---|
| 積載計算 | 見込重量=数量×標準重量×季節補正。重量・容積・台数の三つの上限を積地の巡回順の累積で判定し、温度区画・混載不可も確認 |
| 自動配車 | 制約(必ず守る)と評価指標(方針別の重み)を分けたビンパッキング+車両・乗務員割当。3案を提示し、固定配車を保持したまま部分再計算 |
| 配車制約チェック | 自動配車・計画ボード・当日変更のすべてが通る単一の関所(BR-001)。重大度はマスタで変更可能 |
| 労働時間見込み | 出庫前作業・走行・積込・荷待ち・荷卸・休憩・帰庫後作業の構成要素から拘束時間・運転時間を見積もり、改善基準告示の上限(適用開始日付き)と比較 |
| 運賃計算・一括請求 | 車建て・個建て・重量制など+附帯料金、積み合わせ按分、請求先ごとの編成規則で締め、赤黒訂正 |
型・ストア・エンティティメタデータ・状態遷移表・API クライアントは、生成器がドメインモデルとステートマシンの JSON から機械生成します(手で編集しない)。
02起動と1日の流れ
2.1 起動手順
# バックエンド(http://localhost:4000、起動時に30日分のデモデータを投入)
cd backend && npm install && npm run dev
# フロントエンド(http://localhost:5173)
cd frontend && npm install && npm run dev
# テスト
cd backend && npm test
画面右上の操作者で利用者(配車担当・運行管理者・事務・経営者・システム管理者)を切り替えます。操作は操作者名で監査ログに記録され、申請者本人は警告を承認できません。
2.2 1日の流れ
| 時刻 | 担当 | 画面 | 内容 |
|---|---|---|---|
| 前日 午後 | 配車担当 | 輸送依頼の登録/定期便 | 出荷予定を登録(見込重量は自動算出) |
| 前日 夕方 | 配車担当 | 自動配車・計画ボード | 自動配車 → 3案を比較 → 採用(仮確定) |
| 前日 夕方 | 運行管理者 | 警告承認 | 警告付き配車の承認・却下 |
| 前日 夕方 | 配車担当 | 自動配車・計画ボード | 一括確定・運行指示(乗務員アプリへ) |
| 当日 未明 | 荷主/配車担当 | 依頼の詳細 | 出荷数量の確定(積載超過は即時に検出) |
| 当日 未明 | 運行管理者 | 当日運行・日報 | 乗務前点呼 → 乗務員が出庫 |
| 当日 早朝 | 乗務員 | iOS アプリ | 積込実績・センター到着・荷卸・帰庫を打刻 |
| 当日 午前 | 運行管理者 | 当日運行・日報 | 乗務後点呼・日報の承認(売上計上候補を作成) |
| 締日 | 事務 | 売上・一括請求 | 売上確定 → 請求先ごとに締め → 一括発行・送付 → 入金消込 |
03ダッシュボード
運行の状態、未配車の依頼、到着遅延の見込み、庫内温度の逸脱、労働時間の上限に近い乗務員、コンプライアンス逸脱を表示します。3秒ごとに自動更新し、各カードのリンクから担当画面へ移動できます。
- 車格別の平均積載率 — 車格ごとの稼働台数と平均積載率(重量)
- センター別の平均荷待ち時間 — 直近30日の実績。待機料請求・センターとの交渉の根拠になります
- コンプライアンス監視 — 指標にカーソルを合わせると定義を表示します
04輸送依頼の登録(UC-001)
- 荷主・納品先センター・積日を選びます。
- 積地ごとに品目・荷姿・規格・数量を入力します。品目別の標準重量×季節補正で見込重量(概算)が表示されます。
- 出荷数量が未確定なら「確定済」を外します。依頼は「数量確定待ち」になり、前日の仮配車には含まれますが確定はできません。
- 「登録」で、サーバ側の積載計算エンジンが見込重量・容積・パレット換算・見積運賃を確定します。
05自動配車・計画ボード(UC-005〜012)
- 運行日と方針(台数最小/距離最小/労務平準化)を選び、自動配車を実行します。
- 配車案の比較に3案(指定方針+他の2方針)が表示されます。評価値はすべて指定方針の重みで計算するため、小さいほど良い案です。「内訳」で運行ごとの車両・乗務員・積載率・拘束時間・警告を確認できます。
- 「この案を採用」で配車明細が仮確定になります。
- 計画ボード(車両×時間)で運行をクリックすると配車明細の詳細へ移動します。✕はエラー、!は警告がある運行です。
- 警告がある運行は承認を申請し、運行管理者の承認後に仮確定を一括確定・運行指示を押します。
自動配車は次を必ず守ります。守れない依頼は「制約を満たす配車が見つからなかった依頼」に理由付きで表示されます(BR-008)。
| 区分 | 制約 |
|---|---|
| 積載 | 重量・容積・パレット台数の上限(車検証上の最大積載量×安全マージン95%、積地の巡回順の累積で判定) |
| 温度・品目 | 温度帯(2室冷蔵車は区画ごと)・混載不可品目 |
| 入構 | 積地・センターの入構可能車格 |
| 乗務員 | 免許区分(車検証上の車両総重量で決まる必要免許)・勤務予定・労働時間の上限(1日13時間) |
| 巡回 | 1運行の積地は4か所まで |
未配車の依頼は車両・乗務員を選んで「手動で割付」できます(手で割り付けた配車は固定され、再計算で組み替えません)。当日変更では欠勤した乗務員・故障した車両を指定すると、その運行だけを再配車します(出庫済・固定の運行は保持)。
06配車明細(1運行)の詳細
| カード | 内容 |
|---|---|
| 制約判定 | 違反の重大度(エラー/警告/注意)と根拠値。エラーがあると確定できない |
| 警告承認 | 理由を入力して「承認を申請」→ 運行管理者が承認すると「確定」できる |
| 入替(再チェック) | 車両・乗務員を入れ替えると制約と労働時間見込みを再計算 |
| 労働時間の見込み | 出庫前作業・走行・積込・荷待ち・荷卸・休憩・帰庫後作業の内訳と、当日・当月の残余 |
| 積付計画と積込実績 | 積地の巡回順、累積重量(判定上限に対する割合)、積込実績(見込みとの差) |
運行中は、乗務員アプリの代わりに管理画面から打刻・積込実績・温度を代行入力できます(電話連絡を受けた場合など)。
07警告承認(UC-008)
操作者を運行管理者に切り替えて承認・却下します。承認者・日時・理由は記録されます。
08当日運行・点呼・日報(UC-013〜019, 024〜025)
- 点呼の記録 — 乗務員・点呼種別・アルコール検知結果・睡眠不足・日常点検を記録します。乗務前点呼がないと出庫できません(BR-027)。乗務不可の場合は理由を表示します。
- 運転日報 — 帰庫した乗務員の「下書き生成」→ 乗務員確認(アプリまたは代行)→ 運行管理者が承認(売上計上候補を作成)/差戻し(理由必須)。承認後の日報は変更できません。
09労務管理(UC-020〜023)
- 乗務員別に当日の拘束時間、当月の実績+見込み、上限(284時間)までの残余と比率を表示します。
- 所要時間標準値の見直し候補 — 見込みと実績の差が15%以上の積地・センターを提示します。「承認して更新」で本日以降の見込みに反映されます(旧値は保持)。
- 給与データ(CSV) — 時間外・深夜・休日の時間を出力します。
10売上・一括請求(UC-026〜030)
- 売上計上候補を確認して確定します(基本運賃+附帯料金、積み合わせの按分比率、見込と実績の重量)。運賃の調整には調整額と理由が必要です(BR-031)。
- 締日を選び締め前の確認(未請求運行・重複・請求先未設定)を確認します(BR-036)。
- この日が締日の請求先を締めるで、請求先ごとに配下の荷主・センター・便の確定売上を1通の請求にまとめます(編成規則に従い小計単位を付与 / BR-035)。
- 請求を選び一括発行 → 一括送付。電子請求で宛先が未登録の請求先は「送付エラー」になります。
- 明細から入金を消込(一部入金も可)/赤黒訂正(理由と、作成者とは別の承認者が必要 / BR-038)を行います。
11コンプライアンス・品目標準重量・テストラン
積載上限超過・温度逸脱・労働時間超過・点呼未実施での出庫・免許区分不適合・車検切れ・警告の無承認確定・自己承認の試行・未請求運行の件数を、定義付きで表示します。
積込実績の実重量÷見込重量が ±5% 以上ずれる品目を提示します。承認すると補正係数を本日付で追加し、以降の見込重量の精度が上がります。
運行を進めるシミュレーションと、監視機能の確認用の逸脱の発生を行います(本番環境では無効)。
12データ(全エンティティ)
サイドバー「データ:…」から全37種のデータの一覧・詳細・作成・編集ができます。
- 一覧・参照は ID ではなく識別名(所属する親を含む名称)で表示し、リンクで親へ移動できます。
- 詳細画面の子データ(ドリルダウン)から、そのデータに属する子データの一覧(件数付き)へ移動できます。
- 状態は業務操作でのみ変わり(BR-042)、取引記録は削除できません(BR-041)。承認済・締め済のデータは変更できません(BR-038)。
13乗務員 iOS アプリ
乗務員が運行指示の確認、運行の打刻、積込実績・庫内温度の入力、運転日報の確認、自分の労働時間の確認を行うネイティブ iOS アプリ(SwiftUI)です。起動して自分の氏名を選ぶと「今日の運行」タブが開きます。
13.1 今日の運行と打刻(UC-010, 014, 015)
- 当日の運行指示(車両・出庫予定・センター到着予定・積地数・見込重量・温度帯)を一覧表示します。
- 運行を開くと立寄順(積付計画)(積地ごとの品目・数量・見込重量・累積重量・区画)と荷主の注意事項を確認できます。
- 打刻は「停車中」をオンにしたときだけ押せます(運転中は操作させない / BR-028)。
| 状態 | ボタン |
|---|---|
| 指示済 | 出庫(乗務前点呼の記録が必要 / BR-027) |
| 出庫・集荷中 | 積込完了(積地名)→ 入力画面 |
| 輸送中 | センター到着 |
| センター待機 | 受付、荷卸開始 |
| 荷卸中 | 荷卸・検品完了、帰庫 |
積込完了は見込み通りなら「見込み通り」を押すだけで記録でき、計量票がある場合は実重量と庫内温度を入力します。累積の実重量が上限を超えると警告が表示されます(BR-014)。産地・冷蔵倉庫内などで通信できない場合は、打刻・積込実績を端末に保持し、通信が戻ったら古い順に送信します。
13.2 日報(UC-024)と労働時間(UC-020)
- 日報 — 出庫・帰庫時刻、走行距離、荷待ち時間を確認し、給油量・高速料金・事故や異常の有無を入力して「確認済にする」を押します。差し戻された場合は理由が赤字で表示されます。
- 労働時間 — 当月の拘束時間(実績・見込み)と上限(284時間)までの残余、運転時間・時間外・深夜・休日の時間を確認できます。
14主な業務ルール
| ID | 内容 | アプリでの挙動 |
|---|---|---|
| BR-001 | 配車の作成・変更は必ず制約チェックを通す | 自動配車・計画ボード・当日変更のすべてが単一の関所を経由 |
| BR-003 | 申請者は自分の警告を承認できない | 承認は別の運行管理者のみ |
| BR-008 | 制約を満たせない依頼は理由を示す | 「制約を満たす配車が見つからなかった依頼」に理由付きで表示 |
| BR-014 / 015 | 積載上限を超えない | 積込実績・数量確定で累積重量が上限を超えると即時に警告 |
| BR-016 | 温度帯の異なる品目・混載不可品目は同じ依頼にしない | 依頼の登録を拒否 |
| BR-027 | 乗務前点呼がない乗務員は出庫できない | 出庫の打刻を拒否 |
| BR-028 | 運転中は操作させない | 「停車中」がオンのときだけ打刻可能、オフライン時は端末に保持 |
| BR-031 / 032 | 運賃の調整には理由が必要、計算根拠を残す | 計算値は保持し、調整は別項目。運賃表・按分・附帯料金・重量を記録 |
| BR-035 / 036 | 請求先ごとにまとめて請求し、未請求を検出する | 編成規則で小計を付けた1通の請求、締め前の確認 |
| BR-038 | 承認済・締め済は変更しない | 赤黒訂正で対応(作成者と承認者は別人) |
| BR-041 / 042 | 取引記録は削除しない、状態は業務操作でのみ変える | 汎用 CRUD 層で強制 |
(全44ルール。上表は画面操作に関係する主なものを抜粋しています。)
15品質とトレーサビリティ
15.1 テスト
| 区分 | 対象 | 件数 |
|---|---|---|
| 単体 | 積載計算・労働時間・状態遷移のドメインロジック | 27 |
| 結合(API) | 依頼・配車・運行・労務・請求・マスタ・ダッシュボード、全37エンティティの CRUD | 117 |
| シナリオ | 依頼から一括請求までの業務シナリオ通し | 1 |
145件すべて合格。コードカバレッジは命令・行 88.2% / 関数 94.8% / 分岐 77.4%です。iOS アプリはシミュレータでビルド・起動・全画面の表示を確認しています。
15.2 トレーサビリティ行列
| 追跡レベル | カバレッジ |
|---|---|
| シナリオ(ロール)→ アクティビティ/UC | 100%(7/7) |
| アクティビティ → ユースケース(60アクション) | 100% |
| ユースケース → エンティティ / シーケンス図 / セキュリティ | 各 100%(40/40) |
| ユースケース → コード / テスト | 各 100%(40/40) |
| ビジネスルール → コード | 100%(44/44) |
| ビジネスルール → テスト | 97.7%(43/44) |
| End-to-End 完全追跡(要件〜コード・テスト) | 100%(40/40) |
16制約事項
- データは在メモリ(インメモリ)保持です。バックエンドを再起動すると、デモデータの状態に戻ります。
- 認証・認可(JWT・RBAC・金額マスキング)は設計済みですが、本アプリには組み込んでいません。操作者は画面右上で切り替え、監査ログと自己承認の判定に用います。乗務員アプリの運行一覧は本人の運行のみを返します。
- 外部システム連携は未実装です。取込 API・温度記録 API・給与 CSV を連携口として用意しています。
- 地図・経路探索は直線距離×道路係数の概算です。
- プッシュ通知は未実装です(ダッシュボードの警告・承認待ち一覧で代替)。ダッシュボードは WebSocket ではなく3秒ごとのポーリングです。
- iOS アプリのタップ操作の UI テストは用意していません(操作の結果は API の結合テストで検証)。
- 労働時間の上限などの法令値はルールデータの既定値です。運用前に最新の法令(改善基準告示等)で確認してください。







