mcpField
F
frontend-ui-design

frontend-ui-design

github.com/pixel-process-ugデザイン・UI3119 回インストール33 週間前に更新
リポジトリ

frontend-ui-design について

frontend-ui-design は、フロントエンド UI の設計と実装を支援するスキルです。コンポーネント構成、レスポンシブ対応、アクセシビリティ、状態管理、パフォーマンスの判断を案内します。

主な機能

  1. 01コンポーネント構成の選択
  2. 02レスポンシブ設計の計画
  3. 03WCAG アクセシビリティの指針
  4. 04状態管理方法の選択
  5. 05パフォーマンス最適化チェックリスト
  6. 06デザインシステムとの統合

活用シーン

  1. 01新しいフロントエンドコンポーネントの設計
  2. 02端末ごとのレスポンシブ動作の確認
  3. 03キーボードとスクリーンリーダー対応の仕様化
  4. 04UI データの状態管理方法の選択

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/pixel-process-ug/superkit-agents --skill frontend-ui-design

インストール後、Claude Code で/frontend-ui-designを入力して読み込まれたか確認します。

詳細

フロントエンド UI デザイン

概要

一貫したアーキテクチャ、アクセシビリティ、レスポンシブな動作、パフォーマンスを備えたフロントエンドユーザーインターフェースの設計と実装をガイドします。このスキルでは、コンポーネントのパターン、デザインシステムとの統合、状態管理の選択、WCAG への準拠を扱い、テスト可能で、アクセシブルかつ高性能なコンポーネントを作成します。

開始時に伝えること:「UI を設計するため、frontend-ui-design スキルを使用します。」

フェーズ 1:要件の把握

UI の要件を理解するため、以下の質問をします。

#質問判断する内容
1どのコンポーネントまたはページを作成しますか?範囲と複雑さ
2使用するフレームワーク/ライブラリは何ですか?(React、Vue、Svelte など)コードパターン
3既存のデザインシステムまたはコンポーネントライブラリはありますか?制約
4どのデバイスに対応する必要がありますか?(モバイル、タブレット、デスクトップ)レスポンシブ戦略
5アクセシビリティ要件はありますか?(WCAG レベル)アクセシビリティ基準
6このコンポーネントにはどのようなデータが必要ですか?状態管理の方針

要件の把握後は必ず停止し、設計に進む前に制約と方針の概要を提示します。

フェーズ 2:コンポーネントアーキテクチャの選択

アーキテクチャパターンの判断表
パターン使用する場面使用しない場面
アトミックデザインコンポーネントライブラリをゼロから構築する場合既存のシステムにコンポーネントを 1 つ追加する場合
複合コンポーネントレイアウトの柔軟性が必要な複数パーツのコンポーネント単純で用途が 1 つのコンポーネント
フックパターン同じロジックを異なる UI 間で再利用する場合特定の 1 つのコンポーネントに結び付いたロジック
コンテナー/プレゼンターコンポーネントを分離してテストする必要がある場合、または複数のデータソースを扱う場合ロジックが最小限のシンプルなコンポーネント
アトミックデザインのレベル
レベル説明例
アトム最小の構成要素で、目的は 1 つButton、Input、Label、Icon
モレキュール連携して機能するアトムのグループSearchBar(Input + Button)、FormField(Label + Input + Error)
オーガニズムモレキュールで構成される複雑なセクションHeader(Logo + Nav + SearchBar)、ProductCard
テンプレートプレースホルダーコンテンツを含むページレイアウトDashboardLayout、AuthLayout
ページ実際のデータを反映したテンプレートHomePage、SettingsPage
複合コンポーネントの例
<Select value={selected} onChange={setSelected}>
  <Select.Trigger />
  <Select.Options>
    <Select.Option value="a">Option A</Select.Option>
    <Select.Option value="b">Option B</Select.Option>
  </Select.Options>
</Select>

使用する場面:コンポーネントに連携が必要なサブパーツが複数ある一方、利用者にはレイアウトの柔軟性が必要な場合。

フックパターンの例
function useDialog() {
  const [isOpen, setIsOpen] = useState(false);
  const open = () => setIsOpen(true);
  const close = () => setIsOpen(false);
  return { isOpen, open, close };
}

使用する場面:異なる UI を持つ複数のコンポーネントで同じロジックが必要な場合。

アーキテクチャの選択後は必ず停止し、先に進む前にパターンの選択を確認します。

フェーズ 3:レスポンシブデザイン

モバイルファーストのブレークポイント
ブレークポイント対象最小幅
smモバイル(横向き)640px
mdタブレット768px
lgデスクトップ1024px
xl大型デスクトップ1280px
2xlワイドデスクトップ1536px
レスポンシブ戦略の判断表
要件使用するもの使用しないもの
ビューポートサイズに応じてレイアウトを変更するメディアクエリコンテナクエリ
親コンテナーのサイズに応じてコンポーネントを適応させるコンテナクエリメディアクエリ
ブレークポイント間でテキストを滑らかに拡大縮小するclamp() による流動的なタイポグラフィ固定フォントサイズ
画像をビューポートに適応させるsrcset + sizes固定画像 1 枚
流動的なタイポグラフィ
font-size: clamp(1rem, 0.5rem + 1.5vw, 1.5rem);

フェーズ 4:アクセシビリティ(WCAG 2.1 AA)

セマンティック HTML の判断表
要件使用するもの使用しないもの
ナビゲーション<nav><div class="nav">
ボタン操作<button><div onClick>
ページセクション<main>、<section>、<aside><div>
見出し<h1>~<h6>を順番に使用<div class="heading">
項目のリスト<ul>、<ol>入れ子の<div>
フォームのラベル<label for="...">プレースホルダーテキストのみ
ARIA の使用ルール
ルール適用する場合
まずセマンティック HTML を使用する常に。ARIA は代替手段です
aria-label表示テキストのない要素のラベル
aria-describedby説明テキストを要素に関連付けます
aria-live動的なコンテンツの変更を通知します
aria-expanded切り替え可能なセクション(アコーディオン、メニュー)
roleセマンティック要素が存在しない場合に限ります
キーボードナビゲーションの要件
  • すべてのインタラクティブ要素をフォーカス可能にします(標準の動作、または tabindex="0")
  • キーボードで操作できるようにします(Enter、Space、Escape、矢印キー)
  • フォーカスインジケーターを表示します(代替手段なしに outline: none を指定しないでください)
  • 視覚的な順序に合った論理的なタブ順序にします
  • モーダルとダイアログではフォーカストラップを設けます
色のコントラスト要件
要素最小比率
通常のテキスト4.5:1
大きなテキスト(18px 以上、または太字の 14px 以上)3:1
UI コンポーネント隣接する色に対して 3:1
色で伝える情報アイコン、パターン、またはテキストも併用する必要があります
スクリーンリーダーでのテスト

少なくとも 1 つのスクリーンリーダーでテストします:

  • macOS:VoiceOver(標準搭載)
  • Windows:NVDA(無料)または JAWS
  • 確認事項:コンテンツが論理的な順序で読み上げられること、フォームのエラーが入力欄に関連付けられていること、動的な更新が通知されること

フェーズ 5:状態管理とパフォーマンス

状態管理の選択表
状態の種類解決策適用する場合
ローカルuseState、useReducer1 つのコンポーネントまたは直接の子コンポーネントで使用する状態
共有Context、Zustand、Jotai複数の関連しないコンポーネント間で共有する状態
サーバーTanStack Query、SWRAPI から取得し、キャッシュや再検証が必要なデータ
フォームReact Hook Form、Formikバリデーションと送信を伴う複雑なフォーム
URL検索パラメーター、ルーターの状態ブックマークや共有が可能であるべき状態
選択のヒューリスティック
  1. useState から始め、実際の制約に直面した場合にのみ段階的に移行します
  2. props のバケツリレーが 2 階層を超えたら、Context または状態管理ライブラリを検討します
  3. API レスポンスをキャッシュする場合は、サーバー状態管理ライブラリを使用します(サーバー状態に Redux は使用しないでください)
  4. バリデーションを伴うフィールド数が 3 を超えるフォームでは、フォームライブラリを使用します
パフォーマンス最適化チェックリスト
手法適用する場合
React.lazy() + Suspenseルート単位のコード分割
画像の loading="lazy"ファーストビューより下にある画像
仮想化項目数が 50 を超えるリスト
useMemo計算コストの高い処理
useCallbackメモ化された子コンポーネントに渡すコールバック
動的な import()条件付きで読み込む重いライブラリ
WebP/AVIF 画像すべての画像アセット
画像の明示的な width/heightレイアウトシフトの防止
デザインシステムの統合

デザイントークン — ハードコードせず、基礎となる値を定義します:

const tokens = {
  color: { primary: '#2563eb', secondary: '#64748b', error: '#dc2626' },
  spacing: { xs: '0.25rem', sm: '0.5rem', md: '1rem', lg: '1.5rem', xl: '2rem' },
  typography: { fontFamily: { sans: 'Inter, system-ui, sans-serif' } },
};

コンポーネントのバリアント — 一貫性のあるバリアント API:

<Button variant="primary" size="md">Save</Button>
<Button variant="outline" size="sm">Cancel</Button>

テーマのサポート:

  • 実行時のテーマ切り替えには CSS カスタムプロパティを使用します
  • 最低限、ライトテーマとダークテーマをサポートします
  • デフォルトでは prefers-color-scheme に従います
  • localStorage に保存されたユーザー設定による上書きを許可します

デザインの後で停止し、レビュー用にコンポーネントの仕様全体を提示してください。

アンチパターン/よくある間違い

間違い問題である理由代わりにすべきこと
<button> ではなく <div onClick> を使うキーボードで操作できず、スクリーンリーダー向けのセマンティクスもありませんセマンティックな HTML 要素を使います
代替手段なしで outline: none を使うキーボードユーザーがフォーカス位置を確認できません視認できるフォーカススタイルに置き換えます
フォントサイズを px で固定するユーザー設定に合わせて拡大できませんrem と clamp() を使います
4 階層以上にわたってプロパティを受け渡す保守が非常に困難になりますContext または状態管理ライブラリを使います
useEffect と useState でデータを取得するキャッシュも重複排除もなく、競合状態が発生しますTanStack Query または SWR を使います
時期尚早なメモ化効果を測定せずに複雑さだけが増しますまずプロファイリングを行い、測定で確認されたボトルネックを最適化します
デスクトップファーストのレスポンシブデザインモバイルでの使いやすさが後回しになりますモバイルファーストで始め、段階的に複雑さを加えます
情報を色だけで伝える色覚異常のあるユーザーにはアクセスできませんアイコン、パターン、またはテキストラベルを追加します
ローディング/エラー状態がないユーザーには空白の画面やわかりにくいエラーが表示されますローディング、エラー、空の状態を設計します

不合理な正当化を防ぐためのガード

  • アクセシビリティを省略しないでください。WCAG 2.1 AA は最低基準であり、任意ではありません
  • セマンティックな要素ではなく、onClick を指定した <div> を使わないでください
  • キーボード操作のテストを省略しないでください
  • 実際のニーズを理解する前に、状態管理の方法を選ばないでください
  • 発見フェーズを省略しないでください。まず制約を理解してください
  • 事前に測定せずにパフォーマンスを最適化しないでください

統合ポイント

スキル関係
api-design上流:API のレスポンス形状がコンポーネントに必要なデータを決定します
spec-writing上流:仕様がコンポーネントの動作要件を定義します
planning下流:コンポーネントの設計が実装タスクになります
test-driven-development下流:コンポーネント仕様をもとに、テストファーストで実装します
senior-frontend並行:React/Next.js の詳細に関する専門知識を提供します
ui-ux-pro-max上流:UX 設計がコンポーネントの要件を示します
ui-design-system並行:デザインシステムのトークンをコンポーネントのスタイリングに活用します
performance-optimization下流:実装後にプロファイリングと最適化を行います

検証ゲート

UI 設計が完了したとする前に、次の項目を確認してください。

  1. コンポーネントアーキテクチャのパターンが、根拠とともに明確に選択されていることを確認します
  2. 対象となるすべてのブレークポイントで、レスポンシブな動作が定義されていることを確認します
  3. アクセシビリティ要件(WCAG レベル、キーボード操作、色のコントラスト)が指定されていることを確認します
  4. 実際のニーズに基づいて、状態管理の方法が選択されていることを確認します
  5. ローディング、エラー、空の状態が設計されていることを確認します
  6. ユーザーがコンポーネント仕様を承認していることを確認します

スキルの種類

柔軟型 — アクセシビリティ要件と発見を優先するアプローチを維持しながら、プロジェクトのフレームワークと制約に合わせて、コンポーネントのパターン、レスポンシブ戦略、状態管理を調整します。

コメント