UIXHERO

「作るべき理由」には強さの段階がある — なぜ『HTML構造上つくれない』が最強か

そのコンポーネントを作るべきかの判断根拠は、弱・中・強の3段に分かれます。最も強いのは「既存のコンポーネントではHTML構造上つくれない」です。書類ダウンロード行を例に、拡張で足りる場合と新設しかない場合の線を引きます。

2026年8月18日
更新: 2026年8月28日
8
by Dengen Yosho(DGYS)

自作の @gunjo/ui(群青/gunjo.jpgunjo.jp を新しいタブで開く を、群青を一度も見たことのない 予備知識ゼロのAI に170画面組ませてきた連載のまとめ第2弾。「そのコンポーネントを作るべきか?」の判断根拠は、実は3段階の強さに分かれます。

デザインシステム設計者の一番難しい判断

「そのコンポーネント、本当に作るべきか?」

デザインシステムを持つ人が毎週向き合う質問です。作りすぎると、種類が増えて使う人が迷子になり、作らなさすぎると、手組みが増えて一貫性が崩れます。ちょうど良いラインを探すのが仕事の半分です。

170画面のコールドテストを回してきて分かったのは、「作るべき理由には強さの段階がある」ということでした。

3段の階段

「そのコンポーネントを作るべきか?」の判断根拠は、弱・中・強の3段の強さに分かれます。弱から強に進むほど「拡張では済まない=作るしかない」が確実になります。

判断根拠何をするか
コンポーネントが無い(手組みされた)3回確認まで待つ
対応表が誤誘導する対応表の再整理で塞げることが多い
既存コンポーネントではHTML構造上つくれない新設一択(拡張では原理的に無理)

弱:コンポーネントが無い(手組みされた)

「あるべきコンポーネントが無い」。予備知識ゼロのAIが正直に「これは手組みしました」と報告します。1回だけだと、その画面固有かもしれません。だから弱い根拠です。

そのまま作りに走ると、次の5画面で誰も使わないコンポーネントが生まれます。群青のルールは「3回確認(3つの別々の画面で独立に手組みされる)まで待つ」。1回目は課題として記録、2回目は対応表の調整、3回目で初めて作ります。同じ「足りないコンポーネント」が3回顔を出すまで待つのは、形が安定するのを見届けるためです。

中:対応表が間違ったコンポーネントを勧める(誤誘導)

「あるはずと思って使ったら詰まった」。予備知識ゼロのAIが「対応表の誘導どおりXを使ったが、実際はYの形が必要でした」と書きます。これは弱よりずっと強い根拠です。

なぜか?「足りないコンポーネント」(弱い根拠)は「無いから手組みに向かう」で使う人を止めるだけですが、「誤誘導」(中)は「動くコンポーネントと思って配線 → 期待どおり動かない」で使う人を成功と勘違いさせるからです。発見が遅れる分、コストが重い。

例:Rating(星表示)は role="img" の表示専用なのに、対応表が「5段階評価」で誘導していました。予備知識ゼロのAIは onChange を配線し、テストで動かないことに気づくまで詰まりました。これは「無い」より「すり替わっている」方が危険な典型例です。

誤誘導の6パターンの詳細は「『ユースケース別の対応表』の落とし穴」で。

強:既存のコンポーネントではHTML構造上つくれない

階段の最上段。「既存のコンポーネントを拡張すれば良いのでは?」という反論が、物理的に成り立たないケースです。使う人がどう頑張っても組めない、作るしかない根拠です。

170画面で最も鮮やかにこの根拠が立ったのが、書類ダウンロード行(DocumentRow でした。

実演:DocumentRowListCard を拡張しても作れなかった理由

書類ダウンロードの行(給与明細・請求書・帳票・添付ファイルなど)は、次の3つの独立したタップ対象が必要です。

  1. 先頭の選択チェックボックス(複数選択で一括操作)
  2. ファイル名のタップ面(プレビューを開く)
  3. 末尾のダウンロードボタン(ダウンロードを直接叩く)

ListCard を使えばいいのでは?」と多くの人が思います。実際、ListCard は先頭コントロール+タイトル+メタ+末尾スロットを持っていて、見た目はほぼ合う

でも決定的に不可能な理由がひとつあります。

ListCard.onSelect は「カード全体を1つのボタン」にする

ListCard.onSelect は行全体を押せるようにする設計で、カード全体が <button> 要素(または role="button" のトグル)としてレンダリングされます。1つの押下対象を提供するコンポーネントとして、意味的に完結しています。

そこに独立したダウンロードボタンを入れ子にしようとすると、こうなります。

  • ボタンの中にボタン=不正なHTML(HTML5仕様は <button> の子孫に操作可能な要素を禁止している)
  • フォーカス順が壊れる(外側のボタンと内側のボタンで、Tabの期待動作が破綻する)
  • スクリーンリーダーの読み上げが二重になる(内側ボタンのラベルが外側のラベルに混じる)

これは「ListCard を拡張すれば良い」では済みません。「拡張」の余地が、HTML仕様のレベルで潰れているからです。

同じ書類の行を2通りで並べた図。左のListCardは行全体が1つのbutton要素で、その中に置いたダウンロードボタンがボタンの入れ子になるため置けない。右のDocumentRowは行がdiv要素で、選択のチェックボックス・プレビューのタップ面・ダウンロードボタンの3つが、それぞれ独立した押す対象として横に並んでいるタップして拡大表示

#168帳票ダウンロード・#169月次レポートダウンロード・#171 HR書類ダウンロード の3画面で、予備知識ゼロのAIが独立に「ListCard は使えなかった、<div> で組んだ」と書きました。3回確認に到達して DocumentRow を新設。行は <div> で、内側に3つの独立したタップ対象を並べる設計です。ListCard の「1ボタン」設計とは根本的に両立しません。

「拡張」と「新設」の判断基準

3段の階段が定まると、「拡張で足りるか、新設が必要か」の判断が機械的になります。

  • 弱(足りないコンポーネント) → 拡張で足りることが多い。既存コンポーネントのPropsを増やす、variantを追加する
  • 中(誤誘導) → 対応表の再整理で塞げることが多い。コンポーネントを作らずに済むことが多い
  • 強(HTML構造上つくれない)拡張では原理的に不可能なので、新設一択

例えば SegmentedControl は「弱(足りないコンポーネント)」で、既存の ToggleGroupw-full justify-stretch [&>*]:flex-1 で全幅に強制配置するvariantとして実装できました。DocumentRow は「強(つくれない)」で、別コンポーネントにせざるを得ませんでした。同じ3回確認でも、階段のどこにいるかで拡張か新設かが決まります。

なぜ予備知識ゼロのAIがこの判断を助けるのか

面白いのは、この段の判定を、予備知識ゼロのAI自身ができることです。

  • 「あるはずのコンポーネントが無い」→ 弱
  • 「対応表を信じたら使い方が違った」→ 中
  • 「既存コンポーネントではHTML構造上つくれない」→ 強

予備知識ゼロのAIは「動くコンポーネントと思って配線したら無反応だった」を具体的に言語化します(バグ報告として)。そこに、<button> の子孫に操作可能な要素は入れられない、というHTML仕様の知識が乗ると、「これは強の根拠だ」と自ら結論できるのです。

#171の振り返りで、予備知識ゼロのAIは次のように書きました。

ListCard.onSelect はカード全体を1つのボタンにするので、独立したダウンロードボタンを入れると、ボタンの中にボタンで不正なHTMLになる。だから ListCard構造的にこの行を持てない。ListCard を拡張すれば良い、では済まない。行は <div> で、内部に独立したボタン群を持つ DocumentRow が必要。

この判断が立った瞬間、作るかどうかは迷いなく決まりました。「HTML構造上つくれない」という言葉が、最も反論の余地ない「作る理由」です

まとめ

  • 「そのコンポーネントを作るべきか?」の判断根拠は 3段の強さに分かれる
  • :コンポーネントが無い(手組みされた)→ 3回確認まで待つ
  • :対応表が誤誘導する → 対応表の再整理で塞げることが多い
  • :既存コンポーネントではHTML構造上つくれない → 新設一択、拡張では原理的に無理
  • DocumentRow を作ったのは「強」の根拠が立った瞬間だった
  • 予備知識ゼロのAIは「強」の根拠を言語化できる(HTML仕様上つくれない、という具体で)

使う人に「何を作ったか」だけでなく「なぜ作ったか」を言えるデザインシステムは、次の判断でも迷わないと思います。170画面で見えた、群青の一番わかりやすい設計軸でした。

関連

この記事はZennにも掲載しています。Zenn版Zenn を新しいタブで開く

この記事のもとになった記録は、本にまとめました

あなたがAIにUIを作らせると、何が起きるか

予備知識ゼロのAIに、実在する業種の業務を175枚作らせ続けた記録です。何が組めて、何が組めなかったか。全175回の採点と、生まれた26コンポーネントの年表を載せています。

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

更新のお知らせ

サイトに載せていない実例や、新しい記事のお知らせはこちらで出しています。

読んだ内容を、自分の画面に当てるとき

UIXHEROは、記事を書くほかに、画面の検品・判定、デザインシステムの構築、実装と改善の伴走を受けています。何を頼めばいいか決まっていない段階の相談も、同じ窓口で受けます。

UIXHEROに頼めることを見る

※ 記事の内容についての質問や、書いてほしいテーマの要望も同じ窓口で受けています

記事をシェア

メールでお知らせを受け取る

最終更新: 2026年8月28日

この記事を書いた人

Dengen Yosho(DGYS)

Dengen Yosho(DGYS)

UI/UXデザイナー兼デザインエンジニア デザイン歴25年以上 情報設計〜UIデザイン〜React/TypeScriptによる実装までを一気通貫で担当 大手企業のDXプロジェクトや決済アプリ領域で、デザインリードとして改善と構築を経験 現在はフリーランスとして、プロダクトのUI/UX改善とデザインシステム構築を支援 長年の実務の中で感じてきたのは、 「良いUI」はセンスではなく、再現可能な判断の積み重ねであるということ UIXHEROは、 心理学や行動科学の知見を、現場で使える設計言語に翻訳するための場所 関心領域は「ユーザーの行動が変わるUI」 人の認知・注意・意思決定の構造を理解し、 “なぜそのUIが機能するのか”を言語化することを目指している

あわせて読みたい

この記事に関連する記事をご紹介します

予備知識ゼロのAIに170画面組ませたら、デザインシステムに26個のコンポーネントが加わった

群青を一度も見たことのない予備知識ゼロのAIに、公開ドキュメントとnpmだけを渡して実業種の画面を170枚組ませた記録の総集編です。3回手組みされたものだけを作るという運用で26のコンポーネントが加わるまでと、その過程で見えた5つの法則をまとめます。

2026年8月18日
10

「ユースケース別の対応表」の落とし穴 — 予備知識ゼロのAIが誤誘導された6パターン

やりたいことからコンポーネントを引く一覧は、間違った先へ誘導すると、載せないより危険です。予備知識ゼロのAIに170画面を組ませて見つかった誤誘導を6つのパターンに整理し、対応表の質を測る4つの軸(型・アクセシビリティ・形・扱う対象)を示します。

2026年8月18日
12

3回確認で生まれたコンポーネントたち — 26の新コンポーネントはどう群青に加わったか

3つの別々の画面で独立に手組みされたら初めて作る、という運用を170画面続けて群青に加わった26のコンポーネントを、8つのグループに束ねて紹介します。どの3画面が根拠になったかを、画面の番号つきで辿れます。

2026年8月18日
15

もっと深く知りたいですか?

ここに掲載されていないトピックについても、リクエストがあれば解説記事を追加します。 わかりにくい点や、具体的な事例について知りたいことがあれば教えてください。

リクエストを送る

その画面、AIに作らせたあと「出していいか」誰が判断していますか?

UIXHERO の知識を、実際の画面の判断に。AIが作ったUIの課題・改善優先度・判断根拠を、 6観点で整理する軽量 Design QA です。

Design QA を見る