AI にバスのモバイル乗車券を作らせてみた — SegmentedControl が結晶化、2回連続でその場 build(やってみた #156)
/bus-ticket375px のビューポートで撮影。縦長のページはフレーム内をスクロールします。
解説記事
AI にバスのモバイル乗車券を作らせてみた — SegmentedControl が結晶化、2回連続でその場 build(やってみた #156)
やってみたシリーズ: 自作のデザインシステム
@gunjo/ui(群青)を、文脈ゼロの cold な AI に実 UI で作らせる連載。バス toC を厚く(接近案内#138・高速バス予約#139・経路検索#140 に追加=toB5 に対し弱い toC3 を掘る)——モバイル乗車券・一日乗車券・IC(券種・大人/小児・現金/IC/QR・運賃・有効時間・乗車時画面提示)。
結果 — 4.5/5、SegmentedControl が結晶化(#155 Leaderboard に続き2回連続 build)
tsc 緑・375px mobile-first。cold AI(群青を一度も触っていない設定):
このキットは このスクリーンのために用意されたかのよう。 文脈ゼロの adopter が日本の交通モバイル乗車券フローを作ると、速く正しい部品に着地し、難所(券面・有効期限・運賃台帳・下部ドック)が全て第一級。半点減らしたのは唯一の本当の穴——SegmentedControl が無いこと。
観測の核 — SegmentedControl が3回目で結晶化(その場 build)
大人/小児・現金/IC/QR の小さなトグル——ToggleGroup を当てたくなる。だが:
cold AI「SegmentedControl が無い。grep しても SegmentedGaugeCard しか出ない。代替は ToggleGroup だが items が w-fit ハードコード+group が justify-center=標準の等幅セグメント見た目にするには
w-full justify-stretch [&>*]:flex-1を後付けせねばならず、全 adopter が再発見する。しかも onValueChange が string|string[](単/複両用)で(v)=>v&&setPassenger(v as ...)とキャストが要る。専用の単一選択 SegmentedControl なら綺麗な(v:string)=>voidになる。追加価値が最も高い。」
SegmentedControl は出発/到着(#110/#140)・払戻し(#129)・個人/法人(#152 AccountChip)でも手組み済=3-confirm を大きく超過。その場で build した:
SegmentedControl=凹んだトラックに2-4等幅セグメント・active が浮く(iOS/Android 風)・role=radiogroup+role=radio+roving tabindex+矢印キー・色だけに依存しない選択状態・onValueChangeは常に単一 string。- ToggleGroup(汎用・content-fit・単/複両用・union 型)でも RadioCard(大きな価格付きカード)でも Tabs(コンテンツ切替)でもない、小さな等幅 mode/segment 切替。
- 索引も是正=by-use-case の「2-3等幅→ToggleGroup」を「2-4等幅→SegmentedControl」に直し、旅客区分/支払いトグルの専用項目を追加。
design:verify 緑・tsc・build 緑・ブラウザで radiogroup×3・aria-checked×3(大人/IC/週)・data-slot を確認=PR#414(#409 クローズ)。結晶化 17個目。
学び — 「3-confirm の在庫」は連続で放出される
#155 で Leaderboard、#156 で SegmentedControl——2回連続でその場 build した。偶然ではない。連載が150回を超え、cold-test が3-confirm に達した候補の在庫が溜まっていた(Leaderboard 2/3・SegmentedControl 3+・ComparisonTable・inverted-metric…)。バス toB/toC を厚く掘ると、その在庫が該当する画面で3回目の目撃に達し、次々 build される:
- 安全コンソール(#155)→ ランキングを3回目に踏む → Leaderboard。
- モバイル乗車券(#156)→ 旅客区分トグルを(明示的に)踏む → SegmentedControl。
これは #153-154 で書いた「床が成熟すると新画面は②検証が主」の続き:②検証の中で、たまたま在庫の3回目を踏むと①build に変わる。深掘りは「越境検証」と「在庫の結晶化」を同時に回す。弱い側(toC)ほど在庫が多いから、toC を掘ると build が出やすい——KeEem が「toC こそ掘れ」と言い続けた理由がここでも効く。
拾った点
- ✅ TicketStub(モバイル券面 QR)/ExpiryBadge(有効期限)/RadioCard(券種)/AmountBreakdown(運賃)/BottomActionBar(購入)が全て built-for-this=~95%。
- ✅ 索引は誤誘導なし(旅客/支払いトグルも正しく誘導・SegmentedControl 不在だけが穴だった)。
- 🟡 ValidityTimer(分秒の有効時間カウントダウン=ExpiryBadge は日粒度で「2時間有効」を表せない)=#415(ExpiryBadge の短窓の双子)。
今回 src build = SegmentedControl(#409→PR#414)。4.5/5・3-confirm 結晶化・索引是正。
📊 結晶化スコアボード(build 済 17個)
…ExpiryBadge / BottomActionBar / Gantt(intraday) / Leaderboard / SegmentedControl 進行中:ComparisonTable・inverted-metric(2/3)・ValidityTimer(1/3)・ReferralCard
📋 モード進捗 — バス toC 深掘り開始
- ✈️ 航空 ✅/🚆 鉄道 ✅/🚕 タクシー ✅
- 🚌 バス:toB5 + toC4(接近#138/高速予約#139/経路#140/乗車券#156) ← toC をあと2枚で toB5 と対称
- 🚚 トラック:未着手
次回予告(やってみた #157)
- バス toC をさらに(IC/定期・運行情報案内 等)で toB5 と対称へ、or トラック新モード。※KeEem に確認。
試す
- gunjo.jp / セグメント切替 SegmentedControl(新)/ チケット券面 TicketStub / 有効期限 ExpiryBadge / npm
@gunjo/ui/ GitHub / 前回まで #1〜#155 - GunjoUI by UIXHERO
SegmentedControl が3回目で結晶化した——深掘りは「越境検証」と「3-confirm 在庫の結晶化」を同時に回す。弱い側(toC)ほど在庫が多いから、toC を掘ると build が出やすい。
<!-- 公開前: 相互URL差込/スクショ確定/EN(dev.to)ミラー -->
使用した @gunjo/ui コンポーネント
この画面のソースが直接 import している部品です。
cold AI が組み上げた実コード
ファイル名をクリックでソースを展開できます。