AI にバスの安全・事故管理コンソールを作らせてみた — Leaderboard が3回目で結晶化、その場で build した(やってみた #155)
/bus-safety375px のビューポートで撮影。縦長のページはフレーム内をスクロールします。
解説記事
AI にバスの安全・事故管理コンソールを作らせてみた — Leaderboard が3回目で結晶化、その場で build した(やってみた #155)
やってみたシリーズ: 自作のデザインシステム
@gunjo/ui(群青)を、文脈ゼロの cold な AI に実 UI で作らせる連載。バス toB を toB5 へ(運行#136・配車#137・計画#153・営収#154 に追加=鉄道航空と対称に)——運輸安全マネジメント・事故/苦情管理(事故・インシデント・ヒヤリハット・苦情・有責無責・営業所別安全指標・事故報告承認・再発防止)。安全管理者向けの情報密度コンソール。
結果 — 4.5/5、そして Leaderboard が3回目で結晶化
tsc 緑・デスクトップ情報密度。cold AI(群青を一度も触っていない設定):
このキットは明らかにこの種の日本の back-office/ops コンソール向けに作られている。 画面のほとんどが実部品で、手組みのマークアップではない。半点減らしたのは唯一の本当の穴——ranking/leaderboard 部品が無い——と細かな ergonomics。
観測の核 — Leaderboard が3回目(3-confirm 到達)→ その場で build
営業所別/系統別の安全指標ランキング(worst-first=要対応の並び)——Leaderboard を当てたい。だが:
cold AI「これが本当の穴。ranking/leaderboard 部品が無い。barrel を grep しても rank/leaderboard は無い。
{rank,label,value,delta,tone}[]を worst-first で並べランクチップ付きのLeaderboard/RankingListがあれば ~40行の手組みを置換できた。追加価値が最も高いのは ranking/leaderboard 部品。しかも/docs/by-use-caseは『Ranking/Worst Performers』を StatGroup に誘導する=誤りだ。」
これで Leaderboard は3回目=3-confirm 成立(taxi #143 売上ランキング → bus #154 系統別収支 → bus #155 営業所別安全指標)。その場で build した:
Leaderboard=事前順序付けの行+ランクチップ+値バー(max 正規化)+Delta。並びは呼び出し側が決める(best-first の top-N/worst-first の要対応)=ランクは配列位置=「誰が1位か」は明示的な呼び出し側の判断・コンポーネントは再ソートしない。deltaTones={{positive:"destructive"}}で「上昇=悪い」ランキング(事故率/コスト/苦情)の Delta を赤反転。- BarChart(順位なしチャート)でも StatGroup(無順序KPI)でもない明確な ranked-list primitive。
- 索引の誤誘導も是正=by-use-case に Leaderboard 項目を追加し、StatGroup には「順位ではない=番付は Leaderboard」と明記。
design:verify 緑(構造ドリフト無し)・tsc・build 緑・ブラウザでランクチップ・バー正規化(100%/89.4%/65.97%=4820/4310/3180÷4820)・データ slot を確認=PR#413(#395 クローズ)。結晶化 16個目。
学び — 「能動的な誤誘導」は build のトリガーを早める
#150 で「索引が動かない部品に誘導するのが最悪」と書いた。Leaderboard も似た構造だった:索引が『Ranking/Worst Performers → StatGroup』と誘導=StatGroup は無順序の KPI 群で番付ではない=文脈ゼロ adopter は StatGroup を当てて「順位が出ない」と詰まる。これは「穴(部品が無い)」に「能動的な誤誘導(索引が間違った答えを出す)」が重なった形:
- 単なる穴なら、adopter は手組みに向かう(実際 3回手組みされた)。
- だが索引が誤誘導すると、adopter は間違った部品を当てて時間を溶かす。
だから Leaderboard は3回目で部品 build と索引是正をセットにした。「部品が無い」と「索引が間違った答えを出す」は別の害=前者は手組みコスト、後者は誤当てコスト。両方を同じ PR で塞いだ。
拾った点(全て陽性の越境検証)
- ✅ ApprovalSteps が事故報告→承認→是正フローに完璧適合=cold AI「state enum が pending/current/approved/rejected/skipped・JP 既定ラベル・aria-current・差戻し理由の comment スロットまで・本物の承認ルートを見た人が作ったと信じさせる部品」。
- ✅ SafetyBanner という専用部品が存在(role=alert・aria-live・actions スロット)=安全コンソールにドンピシャ。
- ✅ ActionQueue/StatGroup/DataTable/Delta/Meter(higher-is-worse) 全て zero-friction。
- 🟡 good-when-low 指標(#412)2回目=事故率/ヒヤリハット(多いほど良い報告文化)の tone を手で反転=Statistic の trend/tone 分離は正しいが「ゼロが目標」の第一級概念が無い。
今回 src build = Leaderboard(#395→PR#413)。4.5/5・3-confirm 結晶化・索引是正。
📊 結晶化スコアボード(build 済 16個)
…Stringline / StatusBoard / ExpiryBadge / BottomActionBar / Gantt(intraday) / Leaderboard 進行中:SegmentedControl(3回超)・ReferralCard・ComparisonTable・inverted-metric(2/3)
📋 モード進捗 — バス toB5 で鉄道航空と対称
- ✈️ 航空:toB5+toC6 ✅/🚆 鉄道:toB5+toC6 ✅/🚕 タクシー:toB6+toC6 ✅
- 🚌 バス:toB5(運行#136/配車#137/計画#153/営収#154/安全#155)+toC3 ← toB が対称に・toC が薄い(3)
- 🚚 トラック:未着手
次回予告(やってみた #156)
- バス toC を厚く(toB5 に対し toC3=弱い側)=乗車券/IC/定期/運行情報 等、or トラック新モード。※KeEem に確認。
試す
- gunjo.jp / ランキング Leaderboard(新)/ 承認ステップ ApprovalSteps / 差分 Delta / npm
@gunjo/ui/ GitHub / 前回まで #1〜#154 - GunjoUI by UIXHERO
Leaderboard が3回目で結晶化した——「部品が無い」と「索引が間違った答えを出す」は別の害。手組みコストと誤当てコスト。両方を同じ PR で塞いだ。
<!-- 公開前: 相互URL差込/スクショ確定/EN(dev.to)ミラー -->
使用した @gunjo/ui コンポーネント
この画面のソースが直接 import している部品です。
cold AI が組み上げた実コード
ファイル名をクリックでソースを展開できます。