#153スコア 4.5/5運輸:バス

AI にバスのダイヤ編成コンソールを作らせてみた — 連載最大の「build 検証」、手組みされた運行図表が部品になって帰ってきた(やってみた #153)

ルート: /bus-planning
デスクトップ表示
モバイル表示

375px のビューポートで撮影。縦長のページはフレーム内をスクロールします。

解説記事

AI にバスのダイヤ編成コンソールを作らせてみた — 連載最大の「build 検証」、手組みされた運行図表が部品になって帰ってきた(やってみた #153)

やってみたシリーズ: 自作のデザインシステム @gunjo/ui群青)を、文脈ゼロの cold な AI に実 UI で作らせる連載。バス toB を厚く(運行管理#136・配車乗務員#137 に追加)——運行計画・ダイヤ編成(系統・停留所・便数・運行図表・車両運用・ダイヤ改正)。運行計画担当のデスク向け、情報密度の高い社内コンソール。

結果 — 4.5/5、そして連載最大の「build 検証」

tsc 緑・デスクトップ情報密度。cold AI(群青を一度も触っていない設定):

これまで cold で採用したキットで最もドメイン適合が高い。 バス計画コンソールは generic コンポーネントライブラリにとって 難しいはずのケースなのに、手組みを覚悟した2つ——運行図表と車両運用 Gantt——が両方とも purpose-built な専用部品を持っていた。

観測の核 — 手組みされた運行図表が、部品になって帰ってきた

これは連載で最も嬉しい瞬間だった。時系列で振り返ると:

  • #136(バス運行管理): cold AI が運行図表(ダイヤグラム/時間×距離の斜め線)を SVG 210行で手組みした——Stringline が存在しなかったから。
  • その後: わたしが Stringline を 3-confirm で build(#352→PR#388)。
  • #153(バス運行計画・今回): cold AI が、同じ運行図表のタスクで、今度は Stringline を自力発見し、SVG をゼロ行も書かずに使った。

cold AI「Stringline — built for this. Zero friction. 運行図表/ダイヤグラム/Marey と docstring が名指し・各 run が斜めの polyline・続行/だんごは線の収束で読める と Gantt との違いまで書いてある。SVG は1行も書いていない。このドメインでキット最重要の部品。」索引も「時間×距離の運行図表=停車駅を横切る斜めの運行線」で正しく Stringline に誘導。

これが build の検証の最強の形だ。 「部品を作れば次の画面で自力発見される」という連載の法則を、同じタスクで証明できた:以前は 210行の手組みを強いた画面が、build 後は cold AI が部品に手を伸ばし、SVG ゼロで組む。build がギャップを本当に埋めたことを、後発の文脈ゼロ AI が証明した。

もう一つの核 — Gantt-intraday を今 build(#386 を閉じた)

車両運用(行路)の Gantt で、cold AI が3度目の同じ不満を漏らした:

cold AI「Gantt の時間軸が日単位=1営業日の車両運用が ~44px の1列に潰れる。dayWidth={1100} をハックした。hourWidth/時刻目盛が無い。唯一『未完成』に感じた所。最も追加価値が高いのは Gantt の intraday 時間解像度。

#133(鉄道ダイヤ作成)・#135(航空機材繰り)でも同じ dayWidth ハックが出ていた=3-confirm 成立。今回その場で build:

  • Ganttresolution="hour"(+ hourWidth/hourStep)を追加=時刻目盛(HH:MM)。バーは元々レンジに対する%で配置されるので、変わるのは軸だけ・resolution="day"(既定)は1バイトも変えていない
  • 機材繰りデモの dayWidth={820} ハックを resolution="hour" に置換=臭いの根治。
  • design:verify 緑(構造ドリフト無し=optional prop 追加)・build 緑・ブラウザ検証で hour 目盛(06:00〜15:00)と day 目盛(6/22〜6/28 回帰)の両方を確認=PR#410(#386 クローズ)。

学び — cold-test には2つの「閉じ方」がある

この回で、cold-test ループの構造が見えた。穴には2種類の閉じ方がある:

  1. その場で build(gap が 3-confirm に達したとき)=Gantt-intraday を #153 で閉じた。
  2. 過去の build が検証される(後発の cold AI が自力発見)=Stringline が #136→#153 で検証された。

①は「穴を塞ぐ」、②は「塞いだ穴が本当に塞がったか確かめる」。 連載が進むほど②が増える=床が成熟する。#153 は①と②が同じ画面で起きた稀な回=Stringline(②検証)と Gantt-intraday(①build)が両方バス計画コンソールで。床が厚くなると、新画面は「既存部品の自力発見(②)」が大半になり、たまに残った穴を build(①)する——それが連載の定常状態に近づいている。

拾った点

  • 🟡 ComparisonTable(現行 vs 改正案=2列 + Delta)=AmountBreakdown は金額の導出台帳で side-by-side でない・Delta が難所を担うので薄いラッパーで足りる=#411
  • 🟡 BadgeVariantKey 等が barrel 未exportRecord<Status, BadgeVariantKey> を書くと tsc が落ちる・variant prop はその型なのに=#411(DX 修正)。

今回 src build = Gantt-intraday(#386→PR#410)。4.5/5・Stringline 検証・ComparisonTable 等起票。

📊 結晶化スコアボード(build 済 15個 + Gantt-intraday 拡張)

…Stringline / StatusBoard / ExpiryBadge / BottomActionBar + Gantt(intraday 対応) 進行中:SegmentedControl(3回超)・ReferralCard・RatingInput・ComparisonTable

📋 モード進捗 — バス toB 厚く開始

  • ✈️ 航空 ✅/🚆 鉄道 ✅/🚕 タクシー ✅/🚌 バス:toB3(運行#136/配車#137/計画#153)+toC3 ← toB を鉄道航空タクシー(5-6)に近づけ中
  • 🚚 トラック:未着手

次回予告(やってみた #154)

  • バス toB をさらに(車両管理/営収/苦情安全 等)で対称へ、or トラック新モード。※KeEem に確認。

試す

手組みされた運行図表が、部品になって帰ってきた——build の検証の最強の形は、同じタスクで後発の cold AI が部品に手を伸ばし、SVG をゼロ行で組むこと。


<!-- 公開前: 相互URL差込/スクショ確定/EN(dev.to)ミラー -->

使用した @gunjo/ui コンポーネント

この画面のソースが直接 import している部品です。

cold AI が組み上げた実コード

ファイル名をクリックでソースを展開できます。