コールドテスト

基盤UI・汎用のコールドテスト — 連載最初の30画面で群青の床を測る

設定・ダッシュボード・データテーブル・コマンドパレット・受信トレイ・カレンダー──業界を絞らない30枚の汎用画面に、文脈ゼロの AI が gunjo/ui だけで挑んだ記録。連載の出発点で、後のすべての業界画面が乗る「床」がどこまで安定しているかを測りました。

基盤UI・汎用 の cold test、30 画面のまとめ。

なぜ汎用UIの床を測ることが難しいのか

業界画面が組めるかどうかは、その下にある汎用部品(Form / Table / Tabs / Tooltip…)の床がどれだけ硬いかで決まります。連載の最初の30枚は、業界の専門知識ではなく、汎用UIだけで戦う回でした。一般的な部品が「だいたい動く」のと、「業界画面の重さに耐える」のは別物です。Tooltip Provider の SSR クラッシュ、HTML/CSSチャートが任意データで崩れないか、FormField context が aria を正しく注入できるか──床の硬さは、こうした重いシナリオに当てるまで見えてきません。

ここで結晶化した部品

汎用30枚の中で群青の床が育っていった代表的な動きです。新規部品の build というより、既存部品の境界を広げ、ギャップを起票し、複数のドメインで再利用できる形に固めていった回でもあります。

FormField context(#152 で追加)が #30 で別の cold AI に「real form/validation/a11y system」と評価されたように、上位の協調部品ほど次の回での複利が大きいことが見え始めた30枚でした。

基盤UI・汎用 の全ラウンド

基盤UI・汎用 カテゴリの 30 画面を、ラウンド順に並べています。各カードから cold AI が組んだソース、解説記事、デスクトップ/モバイルのプレビューに飛べます。

本当に AI に使わせてみた — 文脈ゼロのエージェントに @gunjo/ui で設定画面を作らせる(やってみた #1) preview
#1スコア 4/5
本当に AI に使わせてみた — 文脈ゼロのエージェントに @gunjo/ui で設定画面を作らせる(やってみた #1)
/settings

`@gunjo/ui` を作るとき、僕は「**AI から使えるように設計した**」と書きました。typed entry point、機械可読メタデータ、AI-handoff ドキュメント——エージェントが「眺める」のではなく「読んで、使う」ための面を最初から組み込んだ、と。

またしても本当に AI に使わせてみた — モーダル告知バナーを @gunjo/ui で(やってみた #2) preview
#2スコア 4/5
またしても本当に AI に使わせてみた — モーダル告知バナーを @gunjo/ui で(やってみた #2)
/announce

[前回](#)と同じ条件です。この文脈をまったく知らない AI エージェント1体に、**公開済みの npm `@gunjo/ui`(alpha.2)と [gunjo.jp](https://gunjo.jp) の docs だけ**を渡す。ソースリポジトリは見せない。まっさらな Next.js(React 19 / Tailwind v4)で、`npm run build` が通るところまで自力で。

またしても AI に使わせてみた — カルーセル、そして "氷山の一角" の話(やってみた #3) preview
#3スコア 4/5
またしても AI に使わせてみた — カルーセル、そして "氷山の一角" の話(やってみた #3)
/carousel

条件は毎回同じ。文脈ゼロの AI に、**公開済みの npm `@gunjo/ui`(alpha.2)と [gunjo.jp](https://gunjo.jp) の docs だけ**を渡す。ソースは見せない。まっさらな Next.js(React 19 / Tailwind v4)で `npm run build` が通るまで自力で。

AI にダッシュボードを作らせてみた — チャートは"任意データで壊れない"のか(やってみた #4) preview
#4スコア 4/5
AI にダッシュボードを作らせてみた — チャートは"任意データで壊れない"のか(やってみた #4)
/dashboard

gunjo のチャートは SVG じゃなく **HTML/CSS のレイアウトプリミティブ**で作ってある。狙いは「**任意のデータで崩れないこと**」。固定された綺麗なサンプルじゃなく、現実の汚いデータ——桁違いのスケール、外れ値、ゼロ、極小値——を入れても破綻しない、を担保したい。

AI にログイン画面を作らせたら、直したバグが消えていた(やってみた #5) preview
#5スコア 4.5/5
AI にログイン画面を作らせたら、直したバグが消えていた(やってみた #5)
/login

今回は条件を1つだけ変えた。**渡すパッケージを、出荷物そのもの(直前まで直していた最新版)にした。** #3 で見つけた systemic な穴——`Tooltip` を使う ~28 コンポーネントが provider 無しで SSR クラッシュする問題([#52](https://github.com/uixhero/gunjo/issues/52))——を直した版です。条件は相変わらず「**パッケージ+docs だけ・ソースは見せない**」。そして今回は **「TooltipProvider で包め」というヒントを、あえて渡さなかった。**

AI に管理画面のデータテーブルを作らせてみた(やってみた #6) preview
#6スコア 4/5
AI に管理画面のデータテーブルを作らせてみた(やってみた #6)
/users

条件は同じ。**出荷物そのもの(#52/#53 修正入り)+docs だけ、ソースは見せない、provider のヒントも渡さない。** お題は、名前・ロール・ステータス・参加日・MRR を持つ ~16 行の**ユーザー一覧**に、テキスト検索+ステータスの Select フィルタ+列ソート+ページネーション+ステータス Badge。

AI に ⌘K コマンドパレットを作らせてみた(やってみた #7) preview
#7スコア 4.5/5
AI に ⌘K コマンドパレットを作らせてみた(やってみた #7)
/command

条件は同じ(出荷物そのもの+docs だけ、ソース非公開、provider ヒントなし)。お題は、⌘K(と Ctrl+K)で開くパレット、検索フィルタ、グループ分けされたコマンド(Navigation / Actions / Settings)、アイコン、ショートカットヒント、矢印キー+Enter のキーボード操作、選択で閉じてトースト。

AI に "誰も作りたがらない states" を作らせてみた — 一周の締め(やってみた #8) preview
#8スコア 4/5
AI に "誰も作りたがらない states" を作らせてみた — 一周の締め(やってみた #8)
/inbox

条件は同じ(出荷物そのもの+docs だけ、ソース非公開)。お題は `/inbox` に、ローディング(Skeleton)/空(EmptyState)/一覧(Card)の3状態を切り替えられる UI +アクションでトースト。

AI に Kanban ボード(ドラッグ&ドロップ)を作らせてみた — "枯れて" なかった(やってみた #9) preview
#9スコア 4/5
AI に Kanban ボード(ドラッグ&ドロップ)を作らせてみた — "枯れて" なかった(やってみた #9)
/board

#8 のあと「穴が枯れ始めた」と書きかけた。でも——**それは早とちりだった**。バグの "種類" は収束してきたけど、**画面のカバレッジが全然足りてない**。特に**インタラクションが重い画面**は一度も通してない。そこに新しい穴が潜む。だから複雑系から再開する。

AI にファイルアップロードを作らせたら、自分のコンポーネントが半完成だった(やってみた #10) preview
#10スコア 3/5
AI にファイルアップロードを作らせたら、自分のコンポーネントが半完成だった(やってみた #10)
/upload

条件は同じ(出荷物そのもの+docs だけ、ソース非公開)。お題は `/upload` に、ドロップゾーン、選択ファイル一覧(名前・サイズ・型・削除)、**ファイルごとの進捗バー**、全体の Upload all/空状態。

AI にカレンダー予約を作らせてみた — 日付は複雑系の本丸(やってみた #11) preview
#11スコア 4/5
AI にカレンダー予約を作らせてみた — 日付は複雑系の本丸(やってみた #11)
/booking

条件は同じ(出荷物そのもの+docs だけ、ソース非公開)。お題は `/booking` に、日付選択(過去日・満席日を無効)、時間スロット、サービス選択、氏名/メール、確定するとサマリーに反映。日付・時刻まわりは hydration やロケールの罠が多い複雑系。

AI に Chat インターフェースを作らせてみた — 3度目の固定枠で "systemic" が見えた(やってみた #12) preview
#12スコア 4.5/5
AI に Chat インターフェースを作らせてみた — 3度目の固定枠で "systemic" が見えた(やってみた #12)
/chat

条件は同じ(出荷物そのもの+docs だけ、ソース非公開)。お題は `/chat` に、メッセージ列(送信者・アバター・時刻・自分/相手の見分け)、入力 composer(Enter 送信)、送信後の「typing…」→返信シミュレート、空状態。

AI にオンボーディング・ウィザードを作らせてみた — 専用部品が "本職" を外していた(やってみた #13) preview
#13スコア 3.5/5
AI にオンボーディング・ウィザードを作らせてみた — 専用部品が "本職" を外していた(やってみた #13)
/onboarding

条件は同じ(出荷物そのもの+docs だけ、ソース非公開)。お題は `/onboarding` に、5ステップ(Welcome → プロフィール入力 → 設定 → チーム招待 → 完了)、ステップインジケータ、Back/Next、**各ステップが妥当になるまで Next を止める**、完了サマリ。

AI に料金ページを作らせてみた — また "名前負け"、そして依存の混入(やってみた #14) preview
#14スコア 3.5/5
AI に料金ページを作らせてみた — また "名前負け"、そして依存の混入(やってみた #14)
/pricing

条件は同じ(出荷物そのもの+docs だけ、ソース非公開)。お題は `/pricing` に、3〜4 プランのカード("Most popular" 強調)、月額/年額トグル(年額は割引・価格がライブ更新)、feature リスト(✓/✗)、比較表、FAQ。

AI に通知センターを作らせてみた — primitives は枯れた。loop は"上"へ移った(やってみた #15) preview
#15スコア 3/5
AI に通知センターを作らせてみた — primitives は枯れた。loop は"上"へ移った(やってみた #15)
/notifications

条件は同じ(出荷物そのもの+docs だけ、ソース非公開)。お題は `/notifications` に、種別つき通知列(mention/comment/reaction/system)、アバター、相対時刻、既読/未読+未読バッジ、mark-all-read、時間グルーピング、空状態、skeleton。

AI に IDE 風エディタを作らせてみた — "枯れ" の境界線がはっきりした(やってみた #16) preview
#16スコア 3/5
AI に IDE 風エディタを作らせてみた — "枯れ" の境界線がはっきりした(やってみた #16)
/editor

条件は同じ(出荷物そのもの+docs だけ、ソース非公開)。お題は `/editor` に、メニューバー+ツールバー、パンくず、左のファイルツリー、中央のタブ+エディタ、右パネル、下のステータスバー。

AI に検索結果ページを作らせてみた — "widget のフリした markup"(やってみた #17) preview
#17スコア 4/5
AI に検索結果ページを作らせてみた — "widget のフリした markup"(やってみた #17)
/search

条件は同じ(出荷物そのもの+docs だけ、ソース非公開)。お題は `/search` に、検索バー+結果件数、フィルタ(カテゴリ checkbox・種別 Combobox・タグ)、アクティブフィルタチップ、ソート、結果カード、ページネーション、loading→結果→空状態。

AI にプロフィールページを作らせてみた — 粗さが尽きてきた(やってみた #18) preview
#18スコア 4.5/5
AI にプロフィールページを作らせてみた — 粗さが尽きてきた(やってみた #18)
/profile

条件は同じ(出荷物そのもの+docs だけ、ソース非公開)。お題は `/profile` に、ヘッダー(アバター・名前・bio・統計)、フォロー/編集、Tabs(Posts/About/Activity)、About(メタデータ)、Activity(タイムライン)、編集フォーム(モーダル+バリデーション)。

AI に通知設定画面を作らせてみた — 5/5 を阻むのは、もう docs だけ(やってみた #19) preview
#19スコア 4.5/5
AI に通知設定画面を作らせてみた — 5/5 を阻むのは、もう docs だけ(やってみた #19)
/settings/notifications

条件は同じ(出荷物そのもの+docs だけ、ソース非公開)。お題は `/settings/notifications` に、チャンネル別(Email/Push/SMS/In-app)のマスター+個別トグル、通知レベルの RadioGroup、ダイジェスト頻度の Select、Quiet hours の TimePicker、保存/破棄+未保存インジケータ。

AI に空ダッシュボードを作らせてみた — 連続クリーンが、途切れた(やってみた #20) preview
#20スコア 4.5/5
AI に空ダッシュボードを作らせてみた — 連続クリーンが、途切れた(やってみた #20)
/dashboard-empty

条件は同じ(出荷物そのもの+docs だけ、ソース非公開)。お題は `/dashboard-empty` に、ようこそ Banner、ゼロ値の Statistic、空データのチャート、オンボーディング・チェックリスト(Progress)、空のアクティビティ(EmptyState)、フルページ StatusScreen。

AI にブログ記事ページを作らせてみた — a11y の"根"が見えた(やってみた #21) preview
#21スコア 4.5/5
AI にブログ記事ページを作らせてみた — a11y の"根"が見えた(やってみた #21)
/blog/post

条件は同じ(出荷物そのもの+docs だけ、ソース非公開)。お題は `/blog/post` に、パンくず・タイトル・著者・タグ、目次、h2/h3 の本文、リスト、引用、複数の CodeBlock、callout、関連記事。

AI にランディングページを作らせてみた — 「枯れた」を破る2つの実バグ(やってみた #22) preview
#22スコア 3.5/5
AI にランディングページを作らせてみた — 「枯れた」を破る2つの実バグ(やってみた #22)
/landing

条件はいつも通り(出荷物の npm パッケージ+docs サイトだけ。ソース非公開)。お題は、ナビ・ヒーロー(h1+CTA)・ロゴクラウド・特徴グリッド・指標バンド・お客様の声・価格3プラン・FAQ・最終CTA・フッターの全部入りランディング。

AI にドキュメントサイトのトップを作らせてみた — 骨格は通る、でも"中身"が無い(やってみた #23) preview
#23スコア 3.5/5
AI にドキュメントサイトのトップを作らせてみた — 骨格は通る、でも"中身"が無い(やってみた #23)
/docs-home

条件はいつも通り(出荷物の npm パッケージ+docs サイトだけ。ソース非公開)。お題は、上部ナビ+検索(⌘K)、左サイドバー(グループ化されたナビ・モバイルでドロワー)、パンくず、本文(h1+クイックスタートの CodeBlock+callout+特徴リスト)、右の「On this page」TOC、prev/next、フッター。

AI に管理ダッシュボードを作らせてみた — DataTable は強い、でも"管理画面の作法"が足りない(やってみた #24) preview
#24スコア 〜3.5/5
AI に管理ダッシュボードを作らせてみた — DataTable は強い、でも"管理画面の作法"が足りない(やってみた #24)
/admin

条件はいつも通り(出荷物の npm パッケージ+docs サイトだけ。ソース非公開)。お題は、サイドバー+トップバーのシェルに、**KPI 行・データテーブル(ステータス badge・行選択・一括アクション・行メニュー・ソート・ページネーション)・複合フィルタ・編集 Sheet・空状態・loading・toast**。#4(チャート)/#6(素の table)とは別の、**重い「データ操作」合成**を突いた。

AI に価格比較ページを作らせてみた — primitive は強い、でも"看板"テンプレが job を外す(やってみた #25) preview
#25スコア 4/5
AI に価格比較ページを作らせてみた — primitive は強い、でも"看板"テンプレが job を外す(やってみた #25)
/pricing

条件はいつも通り(出荷物の npm パッケージ+docs サイトだけ。ソース非公開)。お題は、月/年トグル(価格が実際に変わる)・3〜4プランカード(1つを「おすすめ」強調)・**機能比較マトリクス(行=機能・列=プラン・✓/✗/値)**・FAQ・最終 CTA。

AI に受信トレイ(メール一覧+詳細)を作らせてみた — フレームは強い、でも"選べるリスト"が無い(やってみた #26) preview
#26スコア 4/5
AI に受信トレイ(メール一覧+詳細)を作らせてみた — フレームは強い、でも"選べるリスト"が無い(やってみた #26)
/inbox

条件はいつも通り(出荷物の npm パッケージ+docs サイトだけ。ソース非公開)。お題は、フォルダのサイドバー(未読数つき)・メッセージ一覧(送信者・件名・抜粋・未読・スター・選択・一括操作)・詳細ペイン(本文+返信ツールバー)・**desktop は分割/mobile は一覧↔詳細を戻るボタンで切替**・空状態・skeleton。#15 通知センターや #16 エディタとは別の「マスター詳細」合成。

AI に週表示カレンダー(予定表)を作らせてみた — 汎用部品は綺麗、でも"ドメインの view 層"がゼロ(やってみた #27) preview
#27スコア 4.5/5
AI に週表示カレンダー(予定表)を作らせてみた — 汎用部品は綺麗、でも"ドメインの view 層"がゼロ(やってみた #27)
/schedule

条件はいつも通り(出荷物の npm パッケージ+docs サイトだけ。ソース非公開)。お題は Google カレンダー風の週ビュー: ツールバー(週移動・Day/Week/Month 切替・新規)・7日×時間軸グリッド・終日レーン・**イベントブロック(開始/終了から配置・重なりは side-by-side・カテゴリ色)**・現在時刻ライン・イベント詳細 Popover・空きスロットで作成 Dialog・375px は単日/アジェンダに collapse。

AI にファイルブラウザを作らせてみた — 直した穴が全部「武器」になって返ってきた回(やってみた #28) preview
#28スコア 4.5/5
AI にファイルブラウザを作らせてみた — 直した穴が全部「武器」になって返ってきた回(やってみた #28)
/files

条件はいつも通り(出荷物の npm パッケージ+docs サイトだけ。ソース非公開)。お題は、フォルダツリー+パンくず+検索/ツールバー+**グリッド/リスト切替**のファイル一覧+**右クリックメニュー**+インライン rename+プレビューペイン+空状態。

AI に設定ウィザード(検証つき多段フォーム)を作らせてみた — "見た目" はあるが "form system" が無い(やってみた #29) preview
#29スコア 3.5/5
AI に設定ウィザード(検証つき多段フォーム)を作らせてみた — "見た目" はあるが "form system" が無い(やってみた #29)
/setup

条件はいつも通り(出荷物の npm パッケージ+docs サイトだけ。ソース非公開)。お題は「ワークスペース作成」4ステップ: アカウント→組織→設定→確認。**Next 押下で必須/形式を検証→ブロック→インラインエラー表示→最初の不正フィールドへフォーカス移動**、確認ステップで Edit ジャンプ+規約同意で submit。**フォームのバリデーション軸**を初めて深く突いた。

プレビューを表示できません
#30スコア 4.5/5
AI に設定ハブを作らせてみた — 前の回で作った form system が、次の AI に"本物"と認定された(やってみた #30)
/account

条件はいつも通り(出荷物の npm パッケージ+docs サイトだけ。ソース非公開)。お題は GitHub/Stripe 風の複数セクション設定: 各セクションのフォーム+検証+保存、チーム表、招待ダイアログ、そして「ワークスペース名を入力して確定」する danger zone。

この業界が gunjo に残したもの

汎用30枚は、新しい部品を量産する場ではなく、「この床に乗せて以後の業界画面を組めるか」を判定する目盛りでした。HTML/CSSチャートが任意データで崩れないこと、FormField の自動 aria 注入が cold AI に発見されること、CommandPalette や受信トレイの list-detail が一発で組めること──ここで証明された床の上に、医療・物流・運輸・金融まで全業界の画面が積み重なっています。