#171スコア 4/5会計・給与

AI に給与明細ダウンロード画面を作らせてみた — DocumentRow が結晶化、ListCard が「構造的に」できない理由(やってみた #171)

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

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

解説記事

AI に給与明細ダウンロード画面を作らせてみた — DocumentRow が結晶化、ListCard が「構造的に」できない理由(やってみた #171)

やってみたシリーズ: 自作のデザインシステム @gunjo/ui群青)を、文脈ゼロの cold な AI に実 UI で作らせる連載。在庫深掘り(document-download 狙い)——従業員セルフサービス 書類ダウンロード(給与明細・賞与・源泉徴収票・在職証明書・各種申請書)。HR/給与のマイページ。

結果 — 4/5、ダウンロード書類行が3回目で結晶化

tsc 緑・モバイル/デスクトップ両対応。cold AI(群青を一度も触っていない設定):

日本の consumer/portal UI に本物の強いキット。 必要な部品はほぼ存在し、モバイルファースト・既定でアクセシブル・docstring がこの画面のために書かれたよう。1星減点は1つの構造的な穴=ダウンロード書類行が無いこと。

観測の核 — DocumentRow が3回目で結晶化(ListCard が「構造的に」できない)

ダウンロードできる書類の行(ファイルアイコン+名前+PDF・サイズ・発行日+DLボタン+一括選択チェック)——ListCard を当てたくなる。だが cold AI は構造的な理由で却下した:

cold AI「DocumentRow/FileDownloadRow primitive が無い。なぜ ListCard を使わないか? ListCard.onSelect はカード全体を1つの button にする**。だが書類行は独立した3つの操作対象が要る——選択チェックボックス・(プレビューの)タップ面・ダウンロードボタン。DL ボタンを ListCard の button に入れ子にすると不正な HTML+フォーカス順の崩壊。だから ListCard は構造的にこの行を持てない。追加すべき最重要は DocumentRow=先頭コントロール+ファイル種別アイコン+名前+meta+独立した末尾アクションボタンで、3つのヒット対象の a11y を処理したもの。すべての帳票/明細/書類/添付 画面が再手組みする。**」

ダウンロード書類行は #168 帳票DL・#169 月次レポートDL・#171 HR書類DL で3回目=3-confirm。その場で build した

  • DocumentRow=先頭コントロール(一括選択 Checkbox)+ファイル種別アイコン+名前+meta(PDF・124KB・発行日)+独立した末尾 DL ボタン
  • 行は <div>(1つの button ではない)=選択・プレビュー(onOpen)・ダウンロードの3つの独立したヒット対象を保つ=ListCard が構造的にできないこと。
  • SectionList で年/種別グループ(NavRow↔SettingGroup と同じ relation)。
  • 索引も是正=索引は正直に『書類行の専用部品は無い』と認めていた所を DocumentRow に向け直した。
  • ブラウザで4行・各行に独立したチェックボックス+独立した DL ボタン(4+4 の aria-label)を確認=PR#429結晶化 24個目。

学び — 「コンポーネントが構造的に不可能」は最も強い build 根拠

これまでの 3-confirm 根拠は「部品が無い(穴)」「索引が誤誘導(型/a11y/形)」だった。#171 は最も強い根拠=既存部品が構造的に不可能

  • ListCard は近い(leading/title/meta/trailing がある)。
  • だが onSelectカード全体を1 button にするので、独立した DL ボタンを入れられない=HTML の入れ子規則(button in button は不正)が物理的に禁じる

これは「ListCard を拡張すれば良い」では済まない——ListCard の設計(行全体=1つの選択 button)が、複数ヒット対象という要件と根本的に両立しない。だから別部品(DocumentRow=行は div、内部に独立した button 群)が必要だった。「既存部品では型/a11y が違う」より一段強い『HTML 構造上できない』が、最も反論の余地ない build 根拠だ。cold AI がこれを言語化したから、build は迷いなく「ListCard 拡張」でなく「DocumentRow 新設」になった。

拾った点(陽性)

  • 索引が正直=『ダウンロード書類行の専用部品は無い』と自認(でっち上げず)=#162 で見た『自認する穴』。
  • ✅ SectionList(年グループ)/NavRow(発行申請=#168 build の再検証)/FilterChips/BottomActionBar 全て native。
  • 🟡 Dialog が Radix 合成(convenience wrapper でない)で API を読まないと取り違える=SimpleDialog 提案。

今回 src build = DocumentRow(document-download-row gap クローズ)。4/5・DocumentRow 結晶化・索引向け直し。

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

…NavRow / Statistic(goodWhen) / OriginDestination / DocumentRow(このセッションで11部品 build/拡張) 進行中:MatchCard(1/3)・SimpleDialog(1/3)

📋 進捗

  • 運輸5モード完走 ✅/在庫深掘り:goodWhen・OriginDestination・DocumentRow を結晶化
  • 残在庫:MatchCard 1/3(二者間ペアリング)

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

  • 在庫がほぼ枯れた(残 MatchCard 1/3 のみ)。新業種へ(運輸/会計以外=エネルギー/通信/建設/官公庁/医療 等)or MatchCard 狙いの深掘り。※KeEem に確認。

試す

DocumentRow が結晶化した——「既存部品が構造的に不可能(button in button は不正 HTML)」は、型/a11y の違いより一段強い、最も反論の余地ない build 根拠。


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

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

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

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

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