#19スコア 4.5/5基盤UI・汎用

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

ルート: /settings/notifications
デスクトップ表示
モバイル表示

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

解説記事

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

⁠やってみたシリーズ⁠: 自作のデザインシステム @gunjo/ui群青)を、群青のことを一度も見たことのない AI に、実際の画面で組ませていく連載。今回は ⁠通知設定(プリファレンス)画面⁠

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

今回は⁠最近直したコンポーネントを、実地で再検証⁠しにいきました——RadioGroup のアクセシビリティ(#71)、Accordion の幅(#78)が、本当に効いているか。

結果 — 4.5/5(2回連続で新しい種類の問題ゼロ)

tsc/build 緑・ビルド時に静的生成・コンソール 0・サーバーとブラウザの表示ずれ(hydration)なし・375px でのはみ出し0。そして予備知識ゼロの AI の結論:

⁠コードに新しい種類の問題はゼロ。ほぼクリーン。コンポーネントの観点では "完成" と読める。5/5 を阻んでいるのは、唯一 docs だけ。⁠

⁠#18 に続き、2回連続で新しい種類の問題ゼロ。⁠ 致命傷の連鎖は、止まりました。

実地で確認できたこと — 直したアクセシビリティが、効いていた

  • ⁠RadioGroup⁠: role=radiogroup⁠Tab で止まるのは1回⁠・ArrowDown で選択+フォーカス移動。#71 のフォーカスの持ち回り(roving tabindex)が実機で正しく動作。
  • ⁠Accordion⁠: 360px で幅に追従・はみ出し0。#78 の固定幅撤去が効いています。
  • ⁠Switch⁠: Space で切り替え・親→子5個へ「無効」が連鎖・二重発火なし。
  • ⁠TimePicker⁠: 状態を外から制御して往復・Quiet hours がオフだと全部の select が無効に。

「直した不備が、次の回で本当に消えている」——「出尽くすまで回す」の "閉じる" が、ここでも見えました。

残った粗さ — 全部 軽微、そして 5/5 の壁は docs

⁠① Slider が固定幅 w-[200px](全幅のフォームで寸詰まり)→ #100・固定幅の一族の再発(.pen を起点に修正へ)。 ⁠② TimePicker が未設定を 00:00 と表示⁠(真夜中と区別がつかない)→ #101・プレースホルダ表示にして修正。 ⁠③ RadioGroupItem の重複したクラス⁠(checked/unchecked の両方に bg-transparent)→ #102・共通側に集約。

①②③のうち⁠②③は今回ソースで反映(PR #103)⁠、①は .pen 案件です。

⁠そして 5/5 を阻んだ唯一の要因——Select の docs です。⁠ 予備知識ゼロの AI が「Select は Radix の組み合わせコンポーネント(onValueChange/SelectItem)」だと⁠誤って推測⁠しました。実際は OS 標準の <select>+子の <option> です。⁠リポジトリの doc 自体は正しい⁠のに、コード例がクライアント側描画で "Loading…" のまま(#50)→ AI が実例を読めず、prop 名から誤って推測してしまった。⁠=docs をデプロイすれば、これは消えます。⁠

学び — "完成" の手前にいる

#3  致命傷 → #13-16 構造 → #17 組み立てが未完 → #18 仕上げ → #19 docs のみ

⁠残っているのは、もうコンポーネントではありません。⁠ 予備知識ゼロの AI が「⁠コンポーネントそのものと戦ったことは一度もなく、戦った相手はいつも docs だった⁠」と2回連続で言いました。これは——⁠コンポーネントの側は出尽くした⁠ということです。5/5 が出ないのは、コードのせいではなく、まだデプロイしていない docs のせい。

正直に言います。⁠「完全に出尽くした」と宣言するには、あと数回、新しい種類の問題ゼロが続くことが要ります。⁠ でも⁠カーブの行き先は、もう見えています。⁠

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

  • ⁠エラー画面 / 空のダッシュボード⁠ ほか。新しい種類の問題ゼロが続けば、コンポーネント側の "出尽くし" を確定させます。

試す

  • gunjo.jp / npm @gunjo/uiGitHub
  • 前回まで: #1#18
  • まとめ記事: 群青(@gunjo/ui) / なぜ要るのか: AI 時代のデザインシステム論
  • ⁠GunjoUI by UIXHERO

まだ alpha。でも"出尽くし"の手前まで来ました——盛らず、あと数枚で確定させます。

この連載は、作者が AI(Claude と Codex)と協働で制作しています。実験・検証の設計、判断、公開前の事実確認は人間が行い、実作業と下書き執筆は AI が担っています。

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

この画面のソースが直接 import しているコンポーネントです。

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

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

業界別「AI指示書パック」、先行登録を受付中です。