構築例一覧へ戻る
構築例 10 / Build Example
Example 10 / 11

車両配車関連管理システム

大型トラックで青果品・冷蔵品を産地の集荷場から物流センターへ届ける運送事業者向けに、輸送依頼 → 自動配車 → 運行 → 労働時間 → 一括請求を「配車明細(1運行)」を軸に統一管理するシステム。品目別の標準重量から見込重量を算出し、重量・容積・パレット台数・温度帯・混載不可を守る自動配車で3案を提示。所要時間から労働時間の見込みを出し、請求先ごとの一括請求までつなぎます。乗務員向けには iOS ネイティブアプリを用意しています。

フロントエンド
React 18 + TypeScript + Vite + Tailwind(管理画面)/ SwiftUI(乗務員 iOS アプリ)
バックエンド
Express REST API + TypeScript(インメモリ)
設計トレース
業務要件 → 業務シナリオ → アクティビティ図 / ユースケース図 / クラス図 / ステートマシン図 / シーケンス図 → 実装 → テスト
自動配車 積載・重量管理 労働時間見込み 一括請求 温度帯管理 iOSアプリ
設計モデル / Design Models

現場の困りごとから、40ユースケース・37エンティティへ。

「大型トラックの自動配車」「所要時間に対する労働時間の見込み」「請求先への一括請求とそれらが連動した統一管理」「重量管理などが複雑な貨物への対応」という現場の課題でした。これを業務要件に展開し、単一の真実源(SSoT)vehicle-dispatching-etc.dslmodel.json から、アクティビティ図14・ユースケース40・クラス図(8パッケージ)・ステートマシン7・シーケンス図40を生成しました。モデル検証は エラー0・警告0(品質スコア97.6)です。

ユースケース図(40 UC) Use Case Diagram
車両配車関連管理システム ユースケース図
配車担当・運行管理者・乗務員・事務(請求)・経営者・システム管理者・荷主などのアクターと UC-001〜UC-040 の関係。枠内をスクロールして全体を確認できます。 原寸で開く ↗
クラス図 俯瞰(37クラス) Overview
クラス図 俯瞰(37クラス)
37クラスを依頼・積載・配車・運行・経営資源・労務・収支・統制の8パッケージにまとめて俯瞰。 原寸で開く ↗
パッケージ別クラス図 / By Package

各パッケージの詳細なクラス図です。クリックすると原寸で開きます(数字はエンティティ数)。

本ページは、業務要件からのモデル駆動開発の概要と、生成したアプリケーションの操作マニュアル(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)

輸送依頼の登録
輸送依頼の登録
  1. 荷主・納品先センター・積日を選びます。
  2. 積地ごとに品目・荷姿・規格・数量を入力します。品目別の標準重量×季節補正で見込重量(概算)が表示されます。
  3. 出荷数量が未確定なら「確定済」を外します。依頼は「数量確定待ち」になり、前日の仮配車には含まれますが確定はできません。
  4. 「登録」で、サーバ側の積載計算エンジンが見込重量・容積・パレット換算・見積運賃を確定します。
温度帯の異なる品目、混載不可の品目(りんご×レタス等)は1依頼にできません(BR-016)。当日の出荷数量の確定で配車済の運行が積載超過になる場合は、即時に表示されます(BR-015)。定期便は期間を指定して展開できます(UC-003)。
依頼の詳細(出荷数量の確定)
依頼の詳細(出荷数量の確定)

05自動配車・計画ボード(UC-005〜012)

自動配車・計画ボード
自動配車・計画ボード
  1. 運行日と方針(台数最小/距離最小/労務平準化)を選び、自動配車を実行します。
  2. 配車案の比較に3案(指定方針+他の2方針)が表示されます。評価値はすべて指定方針の重みで計算するため、小さいほど良い案です。「内訳」で運行ごとの車両・乗務員・積載率・拘束時間・警告を確認できます。
  3. 「この案を採用」で配車明細が仮確定になります。
  4. 計画ボード(車両×時間)で運行をクリックすると配車明細の詳細へ移動します。✕はエラー、!は警告がある運行です。
  5. 警告がある運行は承認を申請し、運行管理者の承認後に仮確定を一括確定・運行指示を押します。

自動配車は次を必ず守ります。守れない依頼は「制約を満たす配車が見つからなかった依頼」に理由付きで表示されます(BR-008)。

区分制約
積載重量・容積・パレット台数の上限(車検証上の最大積載量×安全マージン95%、積地の巡回順の累積で判定)
温度・品目温度帯(2室冷蔵車は区画ごと)・混載不可品目
入構積地・センターの入構可能車格
乗務員免許区分(車検証上の車両総重量で決まる必要免許)・勤務予定・労働時間の上限(1日13時間)
巡回1運行の積地は4か所まで

未配車の依頼は車両・乗務員を選んで「手動で割付」できます(手で割り付けた配車は固定され、再計算で組み替えません)。当日変更では欠勤した乗務員・故障した車両を指定すると、その運行だけを再配車します(出庫済・固定の運行は保持)。

06配車明細(1運行)の詳細

配車明細(仮確定・警告あり)
配車明細(仮確定・警告あり)
カード内容
制約判定違反の重大度(エラー/警告/注意)と根拠値。エラーがあると確定できない
警告承認理由を入力して「承認を申請」→ 運行管理者が承認すると「確定」できる
入替(再チェック)車両・乗務員を入れ替えると制約と労働時間見込みを再計算
労働時間の見込み出庫前作業・走行・積込・荷待ち・荷卸・休憩・帰庫後作業の内訳と、当日・当月の残余
積付計画と積込実績積地の巡回順、累積重量(判定上限に対する割合)、積込実績(見込みとの差)
配車明細(運行中)
配車明細(運行中)

運行中は、乗務員アプリの代わりに管理画面から打刻・積込実績・温度を代行入力できます(電話連絡を受けた場合など)。

07警告承認(UC-008)

操作者を運行管理者に切り替えて承認・却下します。承認者・日時・理由は記録されます。

警告承認
警告承認
申請者本人は承認できません(BR-003)。自己承認の試行はコンプライアンス画面で件数として監視されます。

08当日運行・点呼・日報(UC-013〜019, 024〜025)

当日運行・点呼・日報
当日運行・点呼・日報
  • 点呼の記録 — 乗務員・点呼種別・アルコール検知結果・睡眠不足・日常点検を記録します。乗務前点呼がないと出庫できません(BR-027)。乗務不可の場合は理由を表示します。
  • 運転日報 — 帰庫した乗務員の「下書き生成」→ 乗務員確認(アプリまたは代行)→ 運行管理者が承認(売上計上候補を作成)/差戻し(理由必須)。承認後の日報は変更できません。

09労務管理(UC-020〜023)

労務管理
労務管理
  • 乗務員別に当日の拘束時間、当月の実績+見込み、上限(284時間)までの残余と比率を表示します。
  • 所要時間標準値の見直し候補 — 見込みと実績の差が15%以上の積地・センターを提示します。「承認して更新」で本日以降の見込みに反映されます(旧値は保持)。
  • 給与データ(CSV) — 時間外・深夜・休日の時間を出力します。

10売上・一括請求(UC-026〜030)

売上・一括請求
売上・一括請求
  1. 売上計上候補を確認して確定します(基本運賃+附帯料金、積み合わせの按分比率、見込と実績の重量)。運賃の調整には調整額と理由が必要です(BR-031)。
  2. 締日を選び締め前の確認(未請求運行・重複・請求先未設定)を確認します(BR-036)。
  3. この日が締日の請求先を締めるで、請求先ごとに配下の荷主・センター・便の確定売上を1通の請求にまとめます(編成規則に従い小計単位を付与 / BR-035)。
  4. 請求を選び一括発行 → 一括送付。電子請求で宛先が未登録の請求先は「送付エラー」になります。
  5. 明細から入金を消込(一部入金も可)/赤黒訂正(理由と、作成者とは別の承認者が必要 / BR-038)を行います。

11コンプライアンス・品目標準重量・テストラン

コンプライアンス
コンプライアンス

積載上限超過・温度逸脱・労働時間超過・点呼未実施での出庫・免許区分不適合・車検切れ・警告の無承認確定・自己承認の試行・未請求運行の件数を、定義付きで表示します。

品目標準重量の見直し
品目標準重量の見直し

積込実績の実重量÷見込重量が ±5% 以上ずれる品目を提示します。承認すると補正係数を本日付で追加し、以降の見込重量の精度が上がります。

テストラン
テストラン

運行を進めるシミュレーションと、監視機能の確認用の逸脱の発生を行います(本番環境では無効)。

12データ(全エンティティ)

サイドバー「データ:…」から全37種のデータの一覧・詳細・作成・編集ができます。

データ一覧
データ一覧
データ詳細
データ詳細
  • 一覧・参照は ID ではなく識別名(所属する親を含む名称)で表示し、リンクで親へ移動できます。
  • 詳細画面の子データ(ドリルダウン)から、そのデータに属する子データの一覧(件数付き)へ移動できます。
  • 状態は業務操作でのみ変わり(BR-042)、取引記録は削除できません(BR-041)。承認済・締め済のデータは変更できません(BR-038)。

13乗務員 iOS アプリ

乗務員が運行指示の確認、運行の打刻、積込実績・庫内温度の入力、運転日報の確認、自分の労働時間の確認を行うネイティブ iOS アプリ(SwiftUI)です。起動して自分の氏名を選ぶと「今日の運行」タブが開きます。

13.1 今日の運行と打刻(UC-010, 014, 015)

iOS 今日の運行
今日の運行
iOS 運行の詳細と打刻
運行の詳細と打刻
  • 当日の運行指示(車両・出庫予定・センター到着予定・積地数・見込重量・温度帯)を一覧表示します。
  • 運行を開くと立寄順(積付計画)(積地ごとの品目・数量・見込重量・累積重量・区画)と荷主の注意事項を確認できます。
  • 打刻は「停車中」をオンにしたときだけ押せます(運転中は操作させない / BR-028)。
状態ボタン
指示済出庫(乗務前点呼の記録が必要 / BR-027)
出庫・集荷中積込完了(積地名)→ 入力画面
輸送中センター到着
センター待機受付、荷卸開始
荷卸中荷卸・検品完了、帰庫

積込完了は見込み通りなら「見込み通り」を押すだけで記録でき、計量票がある場合は実重量と庫内温度を入力します。累積の実重量が上限を超えると警告が表示されます(BR-014)。産地・冷蔵倉庫内などで通信できない場合は、打刻・積込実績を端末に保持し、通信が戻ったら古い順に送信します。

13.2 日報(UC-024)と労働時間(UC-020)

iOS 日報
日報
iOS 労働時間
労働時間
  • 日報 — 出庫・帰庫時刻、走行距離、荷待ち時間を確認し、給油量・高速料金・事故や異常の有無を入力して「確認済にする」を押します。差し戻された場合は理由が赤字で表示されます。
  • 労働時間 — 当月の拘束時間(実績・見込み)と上限(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エンティティの CRUD117
シナリオ依頼から一括請求までの業務シナリオ通し1

145件すべて合格。コードカバレッジは命令・行 88.2% / 関数 94.8% / 分岐 77.4%です。iOS アプリはシミュレータでビルド・起動・全画面の表示を確認しています。

15.2 トレーサビリティ行列

追跡レベルカバレッジ
シナリオ(ロール)→ アクティビティ/UC100%(7/7)
アクティビティ → ユースケース(60アクション)100%
ユースケース → エンティティ / シーケンス図 / セキュリティ各 100%(40/40)
ユースケース → コード / テスト各 100%(40/40)
ビジネスルール → コード100%(44/44)
ビジネスルール → テスト97.7%(43/44)
End-to-End 完全追跡(要件〜コード・テスト)100%(40/40)
外部システム連携(デジタコ・センター入荷予約・会計・銀行・電子請求・点呼機器・AI-OCR)は未実装のため、行列上は「要件 → モデル要素/コード」を 84.9%、「機能要件 → ユースケース」を 74.1% と、ギャップをそのまま表示しています。

16制約事項

  • データは在メモリ(インメモリ)保持です。バックエンドを再起動すると、デモデータの状態に戻ります。
  • 認証・認可(JWT・RBAC・金額マスキング)は設計済みですが、本アプリには組み込んでいません。操作者は画面右上で切り替え、監査ログと自己承認の判定に用います。乗務員アプリの運行一覧は本人の運行のみを返します。
  • 外部システム連携は未実装です。取込 API・温度記録 API・給与 CSV を連携口として用意しています。
  • 地図・経路探索は直線距離×道路係数の概算です。
  • プッシュ通知は未実装です(ダッシュボードの警告・承認待ち一覧で代替)。ダッシュボードは WebSocket ではなく3秒ごとのポーリングです。
  • iOS アプリのタップ操作の UI テストは用意していません(操作の結果は API の結合テストで検証)。
  • 労働時間の上限などの法令値はルールデータの既定値です。運用前に最新の法令(改善基準告示等)で確認してください。

本マニュアルは uml-workflow-v3 で生成したアプリケーションの実装に基づいています。