#136スコア 4/5運輸:バス

AI にバスの運行管理を作らせてみた — 30回越しの最古の穴が、ついに結晶化した(やってみた #136)

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

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

解説記事

AI にバスの運行管理を作らせてみた — 30回越しの最古の穴が、ついに結晶化した(やってみた #136)

やってみたシリーズ: 自作のデザインシステム @gunjo/ui群青)を、文脈ゼロの cold な AI に実 UI で作らせる連載。新モード:バス(鉄道・航空に続く3モード目)——運行管理コンソール(運行図表・在線・要対応・指令記録)。

結果 — 4/5、そして連載最古の穴が build トリガーに

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

back-office の半分はモード非依存にそのまま移った。 ActionDataTable(在線)・ActionQueue(だんご/遅延 triage)・StatGroupSignedRecord+CoSign(指令記録) がバス固有の gap ゼロで zero-friction=鉄道/航空のお下がりでなく本物の ops primitive。RouteStops すら便の停車進捗にネイティブに嵌まる。 だが運行図表(時間×距離の斜線)に住所が無い。約210行 SVG で手組み。

観測の核 — Stringline 3回目(#106 → #133 → #136)=3-confirm 発火

#106(鉄道運転指令)で運行図表を手組みして Stringline を起票し、#133(鉄道ダイヤ作成)で2回目。そして #136(バス運行管理)で——cold AI がまた運行図表を生 SVG で手組みした。3回目(3/3)。 しかも別モード(バス)で。

cold AI「Gantt は横棒=1バス1行で距離軸が無い。運行図表は直交ビュー=Y が距離/停留所、各運行は全停留所を横切る斜めポリライン、傾き=速度、続行は2本の線が近づくこと。行バーのチャートは構造的に2本のバスが距離軸上で接近する様子を描けない。 隣の rail-operations フォルダに Stringline.tsx がある=鉄道チームも同じ壁にぶつかり同じものを手組みした。一度追加されるのを待っている primitive だ。

鉄道運転指令#106 + 鉄道ダイヤ作成#133 + バス運行管理#136 = 別々3人の cold AI が独立に手組み → 3-confirm。その場で build。

build — Stringline(運行図表)=12個目、最古の起票 #352 を結晶化

#352 は #106 で起票した、連載で最も古い未対応 issue。30回越しでついに結晶化。

const stops = [{ id:"sjk", label:"新宿", distance:0 }, { id:"ttc", label:"立川", distance:27.2 }]
const runs = [{ id:"712T", direction:"down", tone:"primary",
  points: [...計画], actual: [...実績(遅延)], onSelect: () => openRun("712T") }]
<Stringline stops={stops} runs={runs} startTime={420} endTime={500} now={450} tickInterval={20} />
  • 停車駅=距離(y)軸・時間=x軸・各運行は斜めポリライン(傾き=速度・接近=続行/追越/だんご)。Charts カテゴリ・LineChart と同じ SVG 線ジオメトリ。
  • 上下双方向(下り=primary/上り=info の既定トーン)・now-line予実ペア(計画破線+実績実線)運行を選択可(onSelect → ≥44px hit + aria-pressed)・停車駅/時刻ごとのグリッド・role=img + 合成アクセシブル名。
  • SSR安全now も時刻も値で渡す(時計を読まない)=決定論的・hydration mismatch 無し(Gantt の today injectable と同じ設計)。
  • 索引の disclaimer を反転:#106 で「Gantt は運行図表 未対応」と書いた一文を「時間×距離の運行図表は Stringline・航空(固定軌道無し)は Gantt/ScheduleGrid」に。
  • PR#388・browser検証(7本の斜線・now-line・遅延トグルで予実2本=破線計画+実線実績の danger・7本 focusable・時刻目盛・0 error)。

今回 src build = Stringline(3-confirm・12個目の結晶化・#352 クローズ)。

学び — 「穴は急がず、3回貯まった時に、最良の仕様で結晶化する」

Stringline は #106 で起票してから30回ずっと未対応だった。その間に:

  • 索引に正直に「未対応」と書き(#133 でそれが cold AI を Gantt 誤誘導から救った)、
  • 鉄道#133 で2回目を見て仕様を精緻化し、
  • 航空#135 で「出ない場所」を確認し(固定軌道が無い航空には不要=鉄道/バス固有と確定)、
  • バス#136 で3回目=別モードでの独立再現を得て、build。

急いで #106 で build していたら、now-line も予実も双方向も無い貧弱版になっていた。 3回(しかも2モード)貯めたからこそ、運転指令の「在線監視」・ダイヤ作成の「計画図」・バスの「予実+続行」を全部満たす仕様で一発結晶化できた。穴を寝かせることは、怠慢ではなく設計。 3-confirm ルールの真価が、最古の穴で証明された。

📊 結晶化スコアボード(build 済 12個

AmountBreakdown / ActionQueue / ListCard / Gantt-segments / SeatMap / LoyaltySummaryCard / RadioCard / FilterChips / PageHeader / Itinerary / TicketStub / Stringline 進行中:StatusBoard 2/3・Gantt-intraday(near)・ExpiryBadge・CheckboxCard・StatusScreen success

📋 モード進捗

  • ✈️ 航空:toB 5 + toC 6 ✅/🚆 鉄道:toB 5 + toC 6 ✅
  • 🚌 バス:toB 1枚目(運行管理)開始 / 残り toB(配車/乗務) + toC(路線/接近/運賃)

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

  • バス toC(バス停・接近案内・運賃・乗車)=消費者側でモバイル床(PageHeader/ListCard/FilterChips/TicketStub…)がバスにどう効くか。or バス toB 続き。

試す

30回越しの最古の穴が、別モードでの3回目でついに結晶化——穴を寝かせるのは怠慢ではなく設計。3回貯まった時、最良の仕様で一発で結晶化する。


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

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

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

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

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