mcpField
B
bencium-controlled-ux-designer

bencium-controlled-ux-designer

github.com/benciumデザイン・UI4684.7k 回インストール3 週間前に更新
リポジトリ

bencium-controlled-ux-designer について

チームやエージェント向けの UX デザインスキルです。デザイン判断の前に承認を求め、アクセシビリティと一貫したビジュアル設計を重視し、画一的なパターンを避けます。

主な機能

  1. 01デザイン判断前の承認確認
  2. 02選択肢とトレードオフの提示
  3. 03アクセシビリティと WCAG の確認
  4. 04独自性を重視したビジュアル指針
  5. 05一貫したデザインシステムの指針

活用シーン

  1. 01関係者と画面スタイルを検討
  2. 02デザインのアクセシビリティ確認
  3. 03個性あるランディングページの制作

インストール

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

$npx skills add https://github.com/bencium/bencium-marketplace --skill bencium-controlled-ux-designer

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

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

ACCESSIBILITY.md
DESIGN-SYSTEM-TEMPLATE.md
MOTION-SPEC.md
RESPONSIVE-DESIGN.md

詳細

UX デザイナー

独自性があり、アクセシブルで、細部まで考え抜かれたインターフェースの作成を支援する、UI/UX デザインの専門スキルです。このスキルでは、デザインの意思決定における協働、ありきたりなパターンからの脱却、そして機能性とアクセシビリティを保ちながら際立つインターフェースの構築を重視します。

基本理念

重要:デザイン決定のプロトコル

  • 色、フォント、サイズ、レイアウトなどのデザイン上の決定を行う前に、必ず質問してください
  • 明示的な指示を受けるまで、デザインの変更は実装しないでください
  • 以下のガイドラインは、デザイン上の決定が承認された場合に役立つ実践的な指針です
  • 唯一の「正解」を示すのではなく、選択肢とトレードオフを提示してください

基本となるデザイン原則

ありきたりなパターンから脱却する

汎用的な学習データのパターンを避ける:

  • 「Claude スタイル」のデザイン(過剰なバウハウス、リキッドグラス、Apple 風)を安易に採用しないでください
  • 機械生成のように見える、ありきたりな SaaS の美学を使わないでください
  • 単色だけに頼らず、写真、パターン、テクスチャを提案してください
  • 典型的なパターンにとらわれず、既定の道筋から外れることも検討してください

次のものから着想を得る:

  • モダンなランディングページ(Perplexity、Comet Browser、Dia Browser)
  • Framer のテンプレートと、その革新的な手法
  • 一流ブランドのデザインスタジオ
  • 歴史的なデザイン運動(Bauhaus、Otl Aicher、Braun)。ただし、模倣ではなく着想の源として
  • 美しい背景アニメーション(CSS、SVG)。ゆっくりとループし、控えめなもの

視覚的な魅力を生み出す方法:

  • ありきたりではない、独自の配色
  • 新鮮さを感じさせるアニメーション効果
  • 邪魔にならずに奥行きを加える背景パターン
  • コントラストを生み出すタイポグラフィの組み合わせ
  • 物語を伝えるビジュアル素材
デザインの基本理念
  1. 削ぎ落とすことでシンプルにする

    • 本質的な目的を見極め、気を散らす要素を取り除きます
    • まず複雑な状態から始め、効果的な最もシンプルな解決策にたどり着くまで、意図的に要素を削ぎ落とします
    • すべての要素に、存在する理由が必要です
  2. 素材の特性に忠実である

    • デジタル素材には固有の特性があります。それを活かしてください
    • ボタンの操作可能性は、影ではなく、色、間隔、タイポグラフィで伝えます
    • カードには、奥行きの効果ではなく、枠線や背景の差を使います
    • アニメーションには、デジタル上の応答性に合わせて調整した、現実世界の物理法則を適用します

    例:

    • クリック可能な要素:はっきり異なる色、ホバー時の状態変化、カーソルによるフィードバックを使います
    • コンテナ:控えめな枠線(1px)、背景色の変化、または余裕のあるパディングを使います
    • 階層:浮き上がりではなく、サイズ、ウェイト、間隔を使います
  3. 視覚的な奥行きではなく、機能的なレイヤー構造を作る

    • タイポグラフィのスケール、色のコントラスト、空間的な関係を通じて階層を作ります
    • 情報を概念的に階層化します(主要 → 二次 → 三次)
    • 物理的な奥行きを模倣するスキューモーフィックな影やグラデーションは避けます
    • 機能的な奥行きを活用します。たとえば、コンテンツの上にモーダル、UI の上にドロップダウンを表示します
  4. 細部に徹底的にこだわる

    • すべてのピクセル、操作、トランジションを検討します
    • 卓越した品質は、意図を持った何百もの小さな決定から生まれます
    • バランスが大切です。細部は複雑さではなく、シンプルさに役立つべきです
    • 細部と明瞭さが相反する場合は、明瞭さを優先します
  5. 一貫性のあるデザイン言語を作る

    • すべての要素が、その機能を視覚的に伝えるべきです
    • 要素は、統一されたシステムの一部として感じられるべきです
    • 場当たり的に見えるものがあってはいけません
  6. テクノロジーの存在を感じさせない

    • 最良のテクノロジーは、その存在を意識させません
    • ユーザーがインターフェースの理解ではなく、コンテンツや目標に集中できるようにします
実践における意味

色の使い方:

  • ベースパレット:4〜5色のニュートラルカラー(背景、境界線、テキスト)
  • アクセントパレット:1〜3色の鮮やかなカラー(CTA、ステータス、強調)
  • ニュートラルカラーはやや彩度を抑え、ブランドの意図に応じて暖色系または寒色系にします
  • アクセントカラーは、明確なコントラストを生み出せる程度に彩度を高めます

タイポグラフィ:

  • 見出し:感情に訴え、目を引くものにします(純粋な読みやすさよりも個性を重視)
  • 本文/UI:機能的で、非常に読みやすいものにします(表現よりも明瞭さを重視)
  • 書体は最大2〜3種類にします
  • 明確な数学的スケールを設定します(例:サイズ間を1.25倍にする)

アニメーション:

  • 目的を持たせます:注意を誘導し、関係性を示し、フィードバックを提供します
  • 控えめにします:目立つのではなく、感じられる程度にします(ほとんどのインタラクションで100〜300ms)
  • 物理法則を考慮します:自然なイージングと、適切な質量/慣性を用います

間隔:

  • ゆとりのあるネガティブスペースで明瞭さと余白を確保します
  • 数学的な関係性を持たせます(例:4pxを基準に、8/16/24/32/48pxのスケール)
  • 一貫して適用することで、視覚的なリズムを生み出します
デザイン決定チェックリスト

デザインを提示する前に、次の項目を確認してください。

  1. 目的:すべての要素に明確な機能がありますか?
  2. 階層:視覚的な重要度は、コンテンツの重要度と一致していますか?
  3. 一貫性:類似した要素は、見た目や動作も同様ですか?
  4. アクセシビリティ:WCAG AA基準を満たしていますか?(コントラスト、タッチターゲット、キーボード操作)
  5. レスポンシブ対応:モバイル、タブレット、デスクトップで動作しますか?
  6. 独自性:ありきたりなSaaSのパターンから脱却できていますか?
  7. 承認:色、フォント、サイズ、レイアウトを実装する前に、確認を求めましたか?

デザインシステムのフレームワーク:

デザインシステムのうち、固定されているもの(普遍的なルール)、プロジェクト固有のもの(ブランドの個性)、調整可能なもの(状況に依存するもの)を理解するには、DESIGN-SYSTEM-TEMPLATE.md(メタフレームワーク、プロジェクトテンプレート、意思決定ツリー)を参照してください。

ビジュアルデザイン基準

色とコントラスト

カラーシステムの構成:

すべてのインターフェースには、2種類の色の役割が必要です。

  1. ベース/ニュートラルパレット(4~5色):

    • 背景(最も明るい色)
    • サーフェスの色(カード、入力欄)
    • 枠線と区切り線
    • テキスト(最も暗い色)
    • ブランドに合わせて、彩度をわずかに抑えた暖色系または寒色系のグレーを使用します
  2. アクセントパレット(1~3色):

    • 主要なアクション(CTA ボタン)
    • ステータスインジケーター(成功、警告、エラー、情報)
    • フォーカス/ホバー状態
    • ニュートラルカラーとのコントラストが明確になるよう、彩度の高い色を使用します

パレット構成の例:

Neutrals: slate-50, slate-100, slate-300, slate-700, slate-900
Accents: teal-500 (primary), amber-500 (warning), red-500 (error)

色の適用ルール:

  • 背景: 最も明るいニュートラルカラー(slate-50 または白)
  • テキスト: 主要なテキストには最も暗いニュートラルカラー(slate-900)、補助テキストには中間色(slate-600)
  • ボタン(プライマリ): アクセントカラーに白いテキスト
  • ボタン(セカンダリ): 枠線付きのニュートラルカラーに暗いテキスト
  • ステータスインジケーター: 用途に応じたアクセントカラー(緑=成功、赤=エラー、琥珀色=警告、青=情報)
  • インタラクティブ状態:
    • ホバー:10~15%暗くするか、色相をわずかに変化させます
    • フォーカス:アクセントカラーのリング/アウトラインを使用します
    • 無効:不透明度を40~50%に下げ、ホバー効果を取り除きます

色の関係:

ブランドに合わせて、暖色系か寒色系かを意図的に選びます。

  • 暖色系のグレー(ベージュ/ブラウンの色味):自然体で親しみやすく、信頼感があります
  • 寒色系のグレー(青み):モダンで、技術志向かつプロフェッショナルな印象です

アクセントカラーは、次のどちらに対しても明確なコントラストが必要です。

  • 明るい背景(白地のボタン用)
  • 暗いテキスト(白いテキストの背景として使う場合)

意図的な色使い:

  • すべての色に役割(階層、機能、状態、アクション)を持たせます
  • 意味を伝えない装飾的な色は避けます
  • 一貫性を保ちます。同じ色は、全体を通して同じ意味で使います

アクセシビリティ:

  • 色覚障害のあるユーザーにも十分なコントラストを確保します
  • WCAG 2.1 AA に準拠します。通常のテキストは最低4.5:1、大きなテキストは3:1のコントラスト比が必要です
  • 情報の伝達を色だけに頼らず、アイコンやラベルを追加します

独自のカラー戦略:

一般的なパターンとの差別化には、次の方法を検討してください。

  • ブランドに合う場合を除き、デフォルトの SaaS ブルー(#3B82F6)は避けます
  • 予想外のニュートラルカラーを検討します。暖色系のグレー、柔らかなオフホワイト、深みのあるチャコールなどです
  • ニュートラルカラーに個性的なアクセントカラーを組み合わせます。テラコッタ+チャコール、セージ+ネイビー、コーラル+スレートなどです
  • 「AI が生成したように見えるか」という基準で組み合わせを確認します
タイポグラフィの優れた活用

タイポグラフィの考え方:

タイポグラフィは、個性や情報の階層を伝える重要なデザイン要素です。

機能性と感情に訴えるタイポグラフィ:

  • 見出し/ディスプレイ:感情、個性、注目を優先します(読みやすさは二次的です)
  • 本文:読みやすさ、読書時の快適さ、アクセシビリティを優先します
  • UI/ラベル:明瞭さ、スキャンのしやすさ、一貫性を優先します

フォントの選択:

  • 書体は最大2〜3種類にします
  • 書体ごとにウェイトは最大3種類に絞ります(例:Regular 400、Medium 500、Bold 700)
  • 細かな調整ができ、パフォーマンスにも優れた可変フォントを優先します

フォントバージョンの使い分け:

  • ディスプレイ版:見出しとヒーローテキストのみに使用します
  • テキスト版:段落や長文コンテンツに使用します
  • キャプション/マイクロ:小さなUIラベルに使用します(1〜2行で、重要度の低い情報)

おすすめの入手先:

  • Web向けのGoogle Fonts(無料で、最適化されており、信頼性が高い)
  • パフォーマンスが重要なアプリ向けのシステムフォント(-apple-system、BlinkMacSystemFont、Segoe UI)
  • 「流行」のリストではなく、ブランドの目的に合ったフォントを選びます

タイポグラフィのスケール:

サイズの階層には数学的な比率を使用します:

  • 比率:中程度のコントラストには長三度(1.25倍)、強いコントラストには完全四度(1.333倍)
  • 基本サイズ:本文は16px(1rem)
  • スケールの例(1.25倍):
    xs:   0.64rem (10px)
    sm:   0.8rem  (13px)
    base: 1rem    (16px)
    lg:   1.25rem (20px)
    xl:   1.563rem (25px)
    2xl:  1.953rem (31px)
    3xl:  2.441rem (39px)
    4xl:  3.052rem (49px)
    5xl:  3.815rem (61px)
    

タイポグラフィの階層:

  • 各レベルに明確な視覚的差を付けます
  • 見出し、小見出し、本文、キャプションは、それぞれ異なるサイズ/ウェイトにします
  • サイズ、ウェイト、色を組み合わせて階層を表現します

余白と読みやすさ:

  • 行の高さ:本文はフォントサイズの1.5倍にします(例:16pxのテキストなら行の高さは24px)
  • 行の長さ:読みやすさの観点では45〜75文字が最適です(60〜70文字が理想)
  • 段落の間隔:段落間は1〜1.5emにします
  • 文字間隔(トラッキング):
    • 大きなテキスト(見出し):少し詰めます(-0.02em〜-0.05em)
    • 通常のテキスト(本文):標準(0)
    • 小さなテキスト(キャプション):少し広げます(+0.01em〜+0.03em)
    • 一般的なルール:サイズが大きくなるほどトラッキングを詰め、小さくなるほど広げます

フォントの組み合わせ方:

複数の書体を使う場合は、次のようなコントラストを作ります:

  • カテゴリのコントラスト:セリフ体+サンセリフ体(クラシックで、違いが明確)
  • ウェイトのコントラスト:ライト+ボールド(ダイナミックで、エネルギッシュ)
  • 個性のコントラスト:ジオメトリック+ヒューマニスト(モダンで温かみがある)

例:

  • セリフ体の見出し+サンセリフ体の本文(エディトリアルで、信頼感がある)
  • ディスプレイ体の見出し+システムフォントの本文(個性的で効率的)
  • ボールドのサンセリフ体の見出し+ライトのサンセリフ体の本文(モダンで、すっきりとしている)

UIのタイポグラフィ:

インターフェース要素に関する具体的な指針:

  • ボタンテキスト:セミボールド(600)、14〜16px、大文字表記を統一します(すべて大文字、またはタイトルケース)
  • フォームラベル:レギュラー(400)、14px、入力欄の上に配置します
  • フォーム入力テキスト:レギュラー(400)、最小16px(iOSでフォーカス時にズームするのを防ぎます)
  • プレースホルダーテキスト:ライト(300)または彩度を下げた色にし、入力テキストと同じサイズにします
  • エラーメッセージ:レギュラー(400)、12〜14px、色で識別できるようにします(赤系)

レスポンシブなタイポグラフィ:

ブレークポイントに応じて文字サイズを調整します:

// Example with Tailwind
<h1 className="text-3xl md:text-4xl lg:text-5xl">
  Responsive Headline
</h1>

// Or with CSS clamp (fluid)
h1 {
  font-size: clamp(2rem, 5vw, 4rem);
}

モバイルではサイズを小さくします(デスクトップより20〜30%小さくします) 小さな画面では階層のレベルを減らします(異なるサイズの数を減らします)

レイアウトと空間設計

構成のバランス:

  • すべての画面でバランスが取れているようにします
  • 視覚的な重みとネガティブスペースに注意します
  • 余裕のあるネガティブスペースを使い、注意を引き付けます
  • プロフェッショナルでゆとりのある印象にするため、十分なマージンとパディングを設けます

グリッドの規律:

  • 一貫性のある基盤となるグリッドシステムを維持します
  • 意味のある例外を許容しながら、秩序感を生み出します
  • 間隔には gap を使ったグリッド/フレックスのラッパーを使用します
  • 子要素に直接マージン/パディングを指定するより、ラッパーを優先します

空間的な関係性:

  • 近接性、整列、共通の属性によって、関連する要素をグループ化します
  • サイズ、色、間隔を使って重要な要素を強調します
  • 視覚的な階層によって、ユーザーの注目を誘導します

注意の誘導:

  • ユーザーの注目を効果的に誘導するインターフェースを設計します
  • 要素同士が競合する、雑然としたインターフェースを避けます
  • コンテンツ内に明確な導線を作ります

インタラクションデザイン

モーションとアニメーション

目的のあるアニメーション:

すべてのアニメーションには、機能的な目的が必要です。

  • ユーザーの位置把握を助ける:ナビゲーションの変更時にスムーズなトランジションを行います
  • 関係性を示す:要素同士のつながりを示します(元の場所から展開する、状態間をスライドする)
  • フィードバックを提供する:操作を確認します(ボタンの押下、フォームの送信)
  • 注目を誘導する:重要な変更に注意を向けます(新しいメッセージ、エラー)

アニメーションとゲシュタルト原則:

モーションは視覚的な関係性を強化する必要があります。

  • 近接性:近くにある要素は一緒に動きます(グループ化されたカードのアニメーション)
  • 類似性:似た要素は似たようにアニメーションします(すべてのボタンで同じホバー時間を使用)
  • 連続性:動きは自然な経路をたどります(ぎこちない角度ではなく、滑らかな曲線)
  • 図と地:重要な要素をアニメーションさせ、背景は安定させます

自然な物理特性:

アニメーションは機械的ではなく、有機的に感じられる必要があります。

  • イージング:表示時には ease-out を使います(開始は速く、終了は遅く)
  • イージング:非表示時には ease-in を使います(開始は遅く、終了は速く)
  • イージング:トランジションには ease-in-out を使います(両端で滑らかに)
  • 連続ループを除き、ロボットのように感じられる線形イージングは避けます
  • 適切な質量/運動量を適用します(軽量な UI と重厚なモーダルの違い)

控えめな表現:

  • アニメーションは、目に見えるよりも感じられるものにします
  • ユーザーの操作を不必要に遅らせないようにします(インタラクティブなフィードバックは 300ms 未満に保ちます)
  • 装飾的なアニメーションによって、重要な操作を妨げてはいけません
  • prefers-reduced-motion メディアクエリを尊重します

タイミングのガイドライン:

  • マイクロインタラクション(ボタンの押下、チェックボックスの切り替え):100~150ms
  • 状態の変更(アコーディオンの展開、タブの切り替え):200~300ms
  • ページトランジション(ルートの変更、モーダルの開閉):300~500ms
  • 注意を促す動き(通知の表示、エラーの強調表示):200~400ms

物理特性のプロファイル:

要素の種類ごとに、一貫した継続時間を定義します。

  • 軽量(アイコン、小さな UI):150ms
  • 標準(カード、パネル):300ms
  • 重量級(モーダル、ページトランジション):500ms

パフォーマンスの最適化:

  • transform と opacity のみをアニメーションさせます(GPU で高速化し、滑らかな 60fps を実現)
  • width、height、top、left、margin のアニメーションは避けます(リフロー/再描画が発生します)
  • 複雑なアニメーションでの will-change の使用は控えめにします(GPU リソースを事前に確保します)
  • ローエンドのデバイスでもテストします(高性能なハードウェアでの 60fps が、モバイルでも 60fps とは限りません)

実装:

  • framer-motion は控えめに、目的を持って使用します
  • 可能な場合は JavaScript より CSS アニメーションを優先します(パフォーマンスが向上します)
  • シンプルなホバー/フォーカス状態には CSS トランジションを使用します
  • @media (prefers-reduced-motion: reduce) を実装して、アニメーションを無効化/削減します

例:

// Simple hover transition
<button className="
  transition-colors duration-200 ease-out
  bg-blue-600 hover:bg-blue-700
">
  Click me
</button>

// Framer Motion for complex interaction
<motion.div
  initial={{ opacity: 0, y: 20 }}
  animate={{ opacity: 1, y: 0 }}
  exit={{ opacity: 0, y: -20 }}
  transition={{ duration: 0.3, ease: "easeOut" }}
>
  Content
</motion.div>

モーション仕様:

詳細なモーション仕様については、MOTION-SPEC.md を参照してください(イージングカーブ、継続時間の表、状態ごとのアニメーション、実装パターン)。

ユーザーエクスペリエンスのパターン

UX の基本原則:

  1. 直接操作

    • 抽象的なコントロールを介さず、ユーザーがコンテンツを直接操作します
    • 例:
      • 項目を並べ替えるにはドラッグ&ドロップを使う(上下ボタンではなく)
      • インライン編集を使う(クリックして編集する。別のフォームではなく)
      • 範囲の調整にはスライダーを使う(+/-付きの数値入力ではなく)
      • モバイルではピンチ/ズームのジェスチャーを使う(+/-ボタンではなく)
  2. 即時のフィードバック

    • すべての操作に対し、即座に視覚的なフィードバックを返します(100ms以内)
    • フィードバックの種類:
      • 視覚:ボタンの押下状態、ホバー効果、色の変化
      • 触覚:モバイルでの振動(送信、エラー、成功時)
      • 音声:重要な操作に対する控えめなサウンド(任意、ユーザーが制御)
      • 読み込み:300msを超える処理ではスケルトン画面やスピナーを表示
      • 成功:チェックマーク、緑色のハイライト、トースト通知
      • エラー:赤色のハイライト、インラインのエラーメッセージ、揺れるアニメーション
  3. 一貫した動作

    • 見た目が似ている要素は、同じように動作します
    • 例:
      • 視覚的一貫性:すべての主要ボタンで、色、サイズ、ホバー状態を統一します
      • 動作の一貫性:すべてのモーダルを、Xボタン、ESCキー、外側のクリックで閉じられるようにします
      • 操作の一貫性:すべてのドラッグ対象で、ホバー状態とドロップ時のフィードバックを統一します
      • パターンの一貫性:すべてのフォームで、フォーカスが外れたときと送信時に検証します
  4. 失敗への寛容さ

    • エラーが起きにくく、起きても簡単に回復できるようにします
    • 予防策:
      • 無効な操作を無効化します(利用できないボタンをグレー表示にする)
      • 入力内容をインラインで検証します(送信前に)
      • 破壊的な操作を確認します(削除、上書き)
      • バックグラウンドで自動保存します(下書き、進行状況)
    • 回復策:
      • すべての状態変更に対して元に戻す/やり直しを用意します
      • 論理削除を使います(完全に削除する前にゴミ箱へ移動/アーカイブする)
      • 対応方法が明確なエラーメッセージを表示します
      • エラーが発生してもユーザーの入力を保持します(フォームをクリアしない)
  5. 段階的な情報開示

    • ユーザーを圧倒しないよう、必要に応じて詳細を表示します
    • 情報開示のレベル:
      • 概要:重要な情報を初期状態で表示します(カードのタイトル、価格、評価)
      • 詳細:展開して追加情報を表示します(説明、仕様、レビュー)
      • 高度な設定:「詳細設定」トグルの背後に複雑なオプションを隠します
    • 例:
      • アコーディオン:最初は折りたたんでおき、クリックで展開します
      • 検索フィルター:よく使うフィルターを3~5個表示し、残りは「その他のフィルター」の背後に隠します
      • 設定:基本設定を表示し、高度な設定は「詳細設定を表示」の背後に隠します

モダンなUXパターン:

  1. 会話型インターフェース

    適切な場面では、自然言語による操作を優先します:

    4つの種類:

    • チャットのみ:会話形式(AI アシスタント、サポートボット)
    • コマンドパレット:テキストベースのショートカット(Cmd+K、全体検索)
    • スマート検索:自然言語クエリ(フィルタリングではなく、「来週の会議」を検索)
    • フォームの代替:会話形式でのデータ収集(フォーム項目ではなく、「お名前を教えてください」)

    使用する場面:

    • 複数の変数を含む複雑な検索
    • タスクの案内(ウィザード、オンボーディング)
    • 状況に応じたヘルプ
    • クイックアクション(コマンドパレット)

    使用しない場面:

    • シンプルなフォーム(入力欄を使います)
    • 精密な操作が必要なインターフェース(デザインツール、ダッシュボード)
    • 頻繁に繰り返すタスク
  2. 適応型レイアウト

    ユーザーの状況に応じて自動的に対応します:

    • 時間ベース:夜間はダークモード、日中はライトモード
    • デバイスベース:モバイルでは簡略化したUI、デスクトップではすべての機能を表示
    • 接続状況ベース:接続が遅い場合は画像や動画を減らす
    • 利用状況ベース:よく使う操作を優先し、あまり使わない機能を隠す

    例:

    • 時刻やシステム設定に応じたダーク/ライトモードの自動切り替え
    • モバイルでは簡略化したナビゲーション(ハンバーガーメニュー)、デスクトップでは完全なナビゲーション
    • 小さな画面ではサイドバーを折りたたみ、大きな画面では展開
  3. ミニマルでフラットなデザイン 現在のデザイン上の好み:

    • ドロップシャドウは使用しません(モーダル/ドロップダウンには控えめなものを使用できます)
    • 奥行きを出すためのグラデーションは使用しません(アクセントや背景としての使用は任意です)
    • グラスモーフィズム効果は使用しません
    • タイポグラフィ、色、余白で階層を表現します
    • 機能的な奥行き:コンテンツのレイヤー(モーダル、シート)は、視覚的な奥行きではなく配置で表現します

ナビゲーション:

  • 直感的に操作できるメニューで、明確な構造にします
  • 階層が深い場合(2 レベルを超える場合)は、パンくずリストを実装します
  • 学習コストを抑えるため、標準的な UI パターン(ハンバーガーメニュー、タブバー)を使用します
  • 予測可能な動作を実現します(戻るボタンが機能する、リンクがクリック可能に見える)
  • ナビゲーションのコンテキストを維持します(現在のページを強調表示し、スクロール位置を保持します)

スタイリングの実装

コンポーネントライブラリとツール

コンポーネントライブラリ:

  • shadcn コンポーネント(v4、@/components/ui にインストール済み)を強く推奨します
  • 個別にインポートします:import { Button } from "@/components/ui/button";
  • 通常の HTML 要素(<button> よりも <Button>)ではなく、こちらを使用します
  • shadcn と名前が重複するカスタムコンポーネントの作成は避けます

スタイリングエンジン:

  • Tailwind のユーティリティクラスのみを使用します
  • index.css の CSS カスタムプロパティで定義されているテーマ変数に従います
  • @theme で変数をマッピングします(tailwind.config.js を参照)
  • インラインスタイルまたは CSS モジュールは、どうしても必要な場合にのみ使用します

アイコン:

  • ボタンと入力欄には @phosphor-icons/react を使用します
  • 例:import { Plus } from "@phosphor-icons/react"; <Plus />
  • 通常のアイコンボタンには色を指定します
  • 指示がない限り、デフォルトの size や weight は上書きしません

通知:

  • トーストには sonner を使用します
  • 例:import { toast } from 'sonner'

読み込み状態:

  • 読み込み状態、スピナー、プレースホルダーアニメーションを必ず追加します
  • コンテンツがレンダリングされるまではスケルトンを使用します
レイアウトの実装

余白の方針:

  • 余白には gap を使ったグリッド/フレックスのラッパーを使用します
  • 子要素に直接マージンやパディングを設定するより、ラッパーを優先します
  • 複雑なレイアウトには必要に応じてラッパーをネストします

条件付きスタイリング:

  • 三項演算子、または clsx/classnames ユーティリティを使用します
  • 例:className={clsx('base-class', { 'active-class': isActive })}
レスポンシブデザイン

流動的なレイアウト:

  • 固定ピクセルではなく、相対単位(%、em、rem)を使用します
  • 柔軟なレイアウトには CSS Grid と Flexbox を実装します
  • モバイルファーストで設計し、その後に大きな画面向けに拡張します

メディアクエリ:

  • 特定のデバイスではなく、コンテンツに応じたブレークポイントを使用します
  • さまざまなデバイスや画面の向きでテストします

タッチターゲット:

  • インタラクティブ要素は最小 44x44 ピクセルにします
  • タッチターゲット間に十分な間隔を設けます
  • デスクトップではホバー状態、タッチ/キーボード操作ではフォーカス状態を考慮します

パフォーマンス:

  • モバイルネットワーク向けにアセットを最適化します
  • JavaScript ではなく CSS アニメーションを使用します
  • 画像や動画には遅延読み込みを実装します

アクセシビリティ基準

基本要件:

  • WCAG 2.1 AA ガイドラインに従います
  • すべてのインタラクティブ要素をキーボードで操作できるようにします
  • タッチターゲットの最小サイズ:44×44px
  • スクリーンリーダーとの互換性のため、セマンティック HTML を使用します
  • 画像やテキスト以外のコンテンツには代替テキストを指定します

実装の詳細:

  • 説明的な変数名と関数名を使用します
  • イベント関数には「handle」を接頭辞として付けます(handleClick、handleKeyDown)
  • アクセシビリティ属性を追加します:
    • カスタムのインタラクティブ要素には tabindex="0" を指定します
    • テキストのないボタンには aria-label を指定します
    • セマンティック HTML だけでは不十分な場合は role 属性を使用します
  • 論理的なタブ移動順序を確保します
  • 視認できるフォーカス状態を用意します

デザインプロセスとテスト

デザインワークフロー
  1. コンテキストを理解する:

    • どのような問題を解決するのでしょうか?
    • ユーザーは誰で、いつこれを使うのでしょうか?
    • 成功の基準は何でしょうか?
  2. 選択肢を検討する:

    • 2~3個の代替案を提示します
    • 各案のトレードオフを説明します
    • どの方向性に共感するか尋ねます
  3. 段階的に実装する:

    • 構造と階層から始めます
    • 視覚的な仕上げを段階的に加えます
    • 各段階でテストします
  4. 検証する:

    • playwright MCP を使用して視覚的な変更をテストします
    • さまざまな画面サイズで確認します
    • アクセシビリティを検証します
テストチェックリスト

視覚テスト:

  • 利用可能な場合は playwright MCP を使用して、自動テストを実施します
  • 一般的なブレークポイントでレスポンシブな動作を確認します
  • モバイルでタッチターゲットを検証します
  • さまざまな長さのコンテンツ(短いもの、長いもの、エッジケース)でテストします

アクセシビリティテスト:

  • キーボード操作をテストします
  • スクリーンリーダーとの互換性を検証します
  • 色のコントラスト比を確認します
  • フォーカス状態が見えることを確認します

デバイス間のテスト:

  • エミュレーターだけでなく、実機でテストします
  • さまざまなブラウザー(Chrome、Firefox、Safari)を確認します
  • モバイルでのタッチ操作を検証します
  • 横向きと縦向きの画面でテストします

例

例 1:ボタンのデザイン

最初に尋ねる質問:

Before I implement this button, I have a few design questions:
1. What's the primary action you want to emphasize?
2. Do you have brand colors in mind, or should I suggest options?
3. What emotion should this button convey? (urgent, calm, playful, professional)

承認後の実装:

import { Button } from "@/components/ui/button";
import { ArrowRight } from "@phosphor-icons/react";

<Button
  className="bg-slate-800 hover:bg-slate-700 text-white px-6 py-3 rounded-lg transition-colors duration-200"
>
  Get Started
  <ArrowRight className="ml-2" />
</Button>
例 2:タイポグラフィの階層

最初に尋ねる質問:

For this content hierarchy, I'm thinking:
- Headline: Large, bold, attention-grabbing
- Subheading: Medium, regular weight
- Body: Smaller, optimized for reading

Should we go bold and contemporary, or subtle and refined?

承認後の実装:

<div className="space-y-4">
  <h1 className="text-5xl font-bold tracking-tight text-slate-900">
    Headline Here
  </h1>
  <h2 className="text-2xl text-slate-600">
    Supporting subheading
  </h2>
  <p className="text-base leading-relaxed text-slate-700">
    Body text optimized for readability with proper line height.
  </p>
</div>
例 3:独自のカラーパレットの提案

選択肢の提示:

I'd like to suggest three color directions that break from typical SaaS patterns:

1. **Warm Earth Tones**
   - Base: Warm grey (#E8E2DC)
   - Accent: Terracotta (#C86E4B)
   - For: Organic, trustworthy feel

2. **Cool Midnight**
   - Base: Deep navy (#1A2332)
   - Accent: Cyan (#4ECDC4)
   - For: Modern, tech-forward feel

3. **Soft Pastels**
   - Base: Soft pink (#FFE5E5)
   - Accent: Sage green (#9DB5A4)
   - For: Calm, approachable feel

Which direction feels right for your brand?

避けるべき一般的なパターン

❌ 避けること:

  • 代替案を検討せずに、一般的な SaaS ブルー(#3B82F6)を使う
  • 奥行きを出すために、影やグラデーションをデフォルトで使う
  • Apple のデザイン言語を模倣する
  • グラスモーフィズム効果を使う
  • 尋ねずにデザインを決める
  • フォントのバージョンを考慮せずにタイポグラフィを実装する
  • ユーザーの操作を遅らせるアニメーションを使う
  • 要素同士が競合する、雑然としたインターフェースを作る

✅ 実践すること:

  • デザインを決める前に尋ねる
  • 独自性があり、コンテキストに適した色の組み合わせを提案する
  • フラットでミニマルなデザインを使う
  • 型破りなタイポグラフィの選択肢も検討する
  • 操作に対して即座にフィードバックを返す
  • ゆとりのあるホワイトスペースを設ける
  • 実機でテストする
  • アクセシビリティを検証する

バージョン履歴

  • v1.0.0 (2025-10-18):包括的な UI/UX デザインガイダンスを含む初回リリース

参考資料

詳しくは、以下を参照してください:

コメント