bencium-controlled-ux-designer について
チームやエージェント向けの UX デザインスキルです。デザイン判断の前に承認を求め、アクセシビリティと一貫したビジュアル設計を重視し、画一的なパターンを避けます。
主な機能
- 01デザイン判断前の承認確認
- 02選択肢とトレードオフの提示
- 03アクセシビリティと WCAG の確認
- 04独自性を重視したビジュアル指針
- 05一貫したデザインシステムの指針
活用シーン
- 01関係者と画面スタイルを検討
- 02デザインのアクセシビリティ確認
- 03個性あるランディングページの制作
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ bencium/ bencium-marketplace --skill bencium-controlled-ux-designerインストール後、Claude Code で/bencium-controlled-ux-designerを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
ACCESSIBILITY.mdDESIGN-SYSTEM-TEMPLATE.mdMOTION-SPEC.mdRESPONSIVE-DESIGN.md詳細
UX デザイナー
独自性があり、アクセシブルで、細部まで考え抜かれたインターフェースの作成を支援する、UI/UX デザインの専門スキルです。このスキルでは、デザインの意思決定における協働、ありきたりなパターンからの脱却、そして機能性とアクセシビリティを保ちながら際立つインターフェースの構築を重視します。
基本理念
重要:デザイン決定のプロトコル
- 色、フォント、サイズ、レイアウトなどのデザイン上の決定を行う前に、必ず質問してください
- 明示的な指示を受けるまで、デザインの変更は実装しないでください
- 以下のガイドラインは、デザイン上の決定が承認された場合に役立つ実践的な指針です
- 唯一の「正解」を示すのではなく、選択肢とトレードオフを提示してください
基本となるデザイン原則
ありきたりなパターンから脱却する
汎用的な学習データのパターンを避ける:
- 「Claude スタイル」のデザイン(過剰なバウハウス、リキッドグラス、Apple 風)を安易に採用しないでください
- 機械生成のように見える、ありきたりな SaaS の美学を使わないでください
- 単色だけに頼らず、写真、パターン、テクスチャを提案してください
- 典型的なパターンにとらわれず、既定の道筋から外れることも検討してください
次のものから着想を得る:
- モダンなランディングページ(Perplexity、Comet Browser、Dia Browser)
- Framer のテンプレートと、その革新的な手法
- 一流ブランドのデザインスタジオ
- 歴史的なデザイン運動(Bauhaus、Otl Aicher、Braun)。ただし、模倣ではなく着想の源として
- 美しい背景アニメーション(CSS、SVG)。ゆっくりとループし、控えめなもの
視覚的な魅力を生み出す方法:
- ありきたりではない、独自の配色
- 新鮮さを感じさせるアニメーション効果
- 邪魔にならずに奥行きを加える背景パターン
- コントラストを生み出すタイポグラフィの組み合わせ
- 物語を伝えるビジュアル素材
デザインの基本理念
-
削ぎ落とすことでシンプルにする
- 本質的な目的を見極め、気を散らす要素を取り除きます
- まず複雑な状態から始め、効果的な最もシンプルな解決策にたどり着くまで、意図的に要素を削ぎ落とします
- すべての要素に、存在する理由が必要です
-
素材の特性に忠実である
- デジタル素材には固有の特性があります。それを活かしてください
- ボタンの操作可能性は、影ではなく、色、間隔、タイポグラフィで伝えます
- カードには、奥行きの効果ではなく、枠線や背景の差を使います
- アニメーションには、デジタル上の応答性に合わせて調整した、現実世界の物理法則を適用します
例:
- クリック可能な要素:はっきり異なる色、ホバー時の状態変化、カーソルによるフィードバックを使います
- コンテナ:控えめな枠線(1px)、背景色の変化、または余裕のあるパディングを使います
- 階層:浮き上がりではなく、サイズ、ウェイト、間隔を使います
-
視覚的な奥行きではなく、機能的なレイヤー構造を作る
- タイポグラフィのスケール、色のコントラスト、空間的な関係を通じて階層を作ります
- 情報を概念的に階層化します(主要 → 二次 → 三次)
- 物理的な奥行きを模倣するスキューモーフィックな影やグラデーションは避けます
- 機能的な奥行きを活用します。たとえば、コンテンツの上にモーダル、UI の上にドロップダウンを表示します
-
細部に徹底的にこだわる
- すべてのピクセル、操作、トランジションを検討します
- 卓越した品質は、意図を持った何百もの小さな決定から生まれます
- バランスが大切です。細部は複雑さではなく、シンプルさに役立つべきです
- 細部と明瞭さが相反する場合は、明瞭さを優先します
-
一貫性のあるデザイン言語を作る
- すべての要素が、その機能を視覚的に伝えるべきです
- 要素は、統一されたシステムの一部として感じられるべきです
- 場当たり的に見えるものがあってはいけません
-
テクノロジーの存在を感じさせない
- 最良のテクノロジーは、その存在を意識させません
- ユーザーがインターフェースの理解ではなく、コンテンツや目標に集中できるようにします
実践における意味
色の使い方:
- ベースパレット:4〜5色のニュートラルカラー(背景、境界線、テキスト)
- アクセントパレット:1〜3色の鮮やかなカラー(CTA、ステータス、強調)
- ニュートラルカラーはやや彩度を抑え、ブランドの意図に応じて暖色系または寒色系にします
- アクセントカラーは、明確なコントラストを生み出せる程度に彩度を高めます
タイポグラフィ:
- 見出し:感情に訴え、目を引くものにします(純粋な読みやすさよりも個性を重視)
- 本文/UI:機能的で、非常に読みやすいものにします(表現よりも明瞭さを重視)
- 書体は最大2〜3種類にします
- 明確な数学的スケールを設定します(例:サイズ間を1.25倍にする)
アニメーション:
- 目的を持たせます:注意を誘導し、関係性を示し、フィードバックを提供します
- 控えめにします:目立つのではなく、感じられる程度にします(ほとんどのインタラクションで100〜300ms)
- 物理法則を考慮します:自然なイージングと、適切な質量/慣性を用います
間隔:
- ゆとりのあるネガティブスペースで明瞭さと余白を確保します
- 数学的な関係性を持たせます(例:4pxを基準に、8/16/24/32/48pxのスケール)
- 一貫して適用することで、視覚的なリズムを生み出します
デザイン決定チェックリスト
デザインを提示する前に、次の項目を確認してください。
- 目的:すべての要素に明確な機能がありますか?
- 階層:視覚的な重要度は、コンテンツの重要度と一致していますか?
- 一貫性:類似した要素は、見た目や動作も同様ですか?
- アクセシビリティ:WCAG AA基準を満たしていますか?(コントラスト、タッチターゲット、キーボード操作)
- レスポンシブ対応:モバイル、タブレット、デスクトップで動作しますか?
- 独自性:ありきたりなSaaSのパターンから脱却できていますか?
- 承認:色、フォント、サイズ、レイアウトを実装する前に、確認を求めましたか?
デザインシステムのフレームワーク:
デザインシステムのうち、固定されているもの(普遍的なルール)、プロジェクト固有のもの(ブランドの個性)、調整可能なもの(状況に依存するもの)を理解するには、DESIGN-SYSTEM-TEMPLATE.md(メタフレームワーク、プロジェクトテンプレート、意思決定ツリー)を参照してください。
ビジュアルデザイン基準
色とコントラスト
カラーシステムの構成:
すべてのインターフェースには、2種類の色の役割が必要です。
-
ベース/ニュートラルパレット(4~5色):
- 背景(最も明るい色)
- サーフェスの色(カード、入力欄)
- 枠線と区切り線
- テキスト(最も暗い色)
- ブランドに合わせて、彩度をわずかに抑えた暖色系または寒色系のグレーを使用します
-
アクセントパレット(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 の基本原則:
-
直接操作
- 抽象的なコントロールを介さず、ユーザーがコンテンツを直接操作します
- 例:
- 項目を並べ替えるにはドラッグ&ドロップを使う(上下ボタンではなく)
- インライン編集を使う(クリックして編集する。別のフォームではなく)
- 範囲の調整にはスライダーを使う(+/-付きの数値入力ではなく)
- モバイルではピンチ/ズームのジェスチャーを使う(+/-ボタンではなく)
-
即時のフィードバック
- すべての操作に対し、即座に視覚的なフィードバックを返します(100ms以内)
- フィードバックの種類:
- 視覚:ボタンの押下状態、ホバー効果、色の変化
- 触覚:モバイルでの振動(送信、エラー、成功時)
- 音声:重要な操作に対する控えめなサウンド(任意、ユーザーが制御)
- 読み込み:300msを超える処理ではスケルトン画面やスピナーを表示
- 成功:チェックマーク、緑色のハイライト、トースト通知
- エラー:赤色のハイライト、インラインのエラーメッセージ、揺れるアニメーション
-
一貫した動作
- 見た目が似ている要素は、同じように動作します
- 例:
- 視覚的一貫性:すべての主要ボタンで、色、サイズ、ホバー状態を統一します
- 動作の一貫性:すべてのモーダルを、Xボタン、ESCキー、外側のクリックで閉じられるようにします
- 操作の一貫性:すべてのドラッグ対象で、ホバー状態とドロップ時のフィードバックを統一します
- パターンの一貫性:すべてのフォームで、フォーカスが外れたときと送信時に検証します
-
失敗への寛容さ
- エラーが起きにくく、起きても簡単に回復できるようにします
- 予防策:
- 無効な操作を無効化します(利用できないボタンをグレー表示にする)
- 入力内容をインラインで検証します(送信前に)
- 破壊的な操作を確認します(削除、上書き)
- バックグラウンドで自動保存します(下書き、進行状況)
- 回復策:
- すべての状態変更に対して元に戻す/やり直しを用意します
- 論理削除を使います(完全に削除する前にゴミ箱へ移動/アーカイブする)
- 対応方法が明確なエラーメッセージを表示します
- エラーが発生してもユーザーの入力を保持します(フォームをクリアしない)
-
段階的な情報開示
- ユーザーを圧倒しないよう、必要に応じて詳細を表示します
- 情報開示のレベル:
- 概要:重要な情報を初期状態で表示します(カードのタイトル、価格、評価)
- 詳細:展開して追加情報を表示します(説明、仕様、レビュー)
- 高度な設定:「詳細設定」トグルの背後に複雑なオプションを隠します
- 例:
- アコーディオン:最初は折りたたんでおき、クリックで展開します
- 検索フィルター:よく使うフィルターを3~5個表示し、残りは「その他のフィルター」の背後に隠します
- 設定:基本設定を表示し、高度な設定は「詳細設定を表示」の背後に隠します
モダンなUXパターン:
-
会話型インターフェース
適切な場面では、自然言語による操作を優先します:
4つの種類:
- チャットのみ:会話形式(AI アシスタント、サポートボット)
- コマンドパレット:テキストベースのショートカット(Cmd+K、全体検索)
- スマート検索:自然言語クエリ(フィルタリングではなく、「来週の会議」を検索)
- フォームの代替:会話形式でのデータ収集(フォーム項目ではなく、「お名前を教えてください」)
使用する場面:
- 複数の変数を含む複雑な検索
- タスクの案内(ウィザード、オンボーディング)
- 状況に応じたヘルプ
- クイックアクション(コマンドパレット)
使用しない場面:
- シンプルなフォーム(入力欄を使います)
- 精密な操作が必要なインターフェース(デザインツール、ダッシュボード)
- 頻繁に繰り返すタスク
-
適応型レイアウト
ユーザーの状況に応じて自動的に対応します:
- 時間ベース:夜間はダークモード、日中はライトモード
- デバイスベース:モバイルでは簡略化したUI、デスクトップではすべての機能を表示
- 接続状況ベース:接続が遅い場合は画像や動画を減らす
- 利用状況ベース:よく使う操作を優先し、あまり使わない機能を隠す
例:
- 時刻やシステム設定に応じたダーク/ライトモードの自動切り替え
- モバイルでは簡略化したナビゲーション(ハンバーガーメニュー)、デスクトップでは完全なナビゲーション
- 小さな画面ではサイドバーを折りたたみ、大きな画面では展開
-
ミニマルでフラットなデザイン 現在のデザイン上の好み:
- ドロップシャドウは使用しません(モーダル/ドロップダウンには控えめなものを使用できます)
- 奥行きを出すためのグラデーションは使用しません(アクセントや背景としての使用は任意です)
- グラスモーフィズム効果は使用しません
- タイポグラフィ、色、余白で階層を表現します
- 機能的な奥行き:コンテンツのレイヤー(モーダル、シート)は、視覚的な奥行きではなく配置で表現します
ナビゲーション:
- 直感的に操作できるメニューで、明確な構造にします
- 階層が深い場合(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属性を使用します
- カスタムのインタラクティブ要素には
- 論理的なタブ移動順序を確保します
- 視認できるフォーカス状態を用意します
デザインプロセスとテスト
デザインワークフロー
-
コンテキストを理解する:
- どのような問題を解決するのでしょうか?
- ユーザーは誰で、いつこれを使うのでしょうか?
- 成功の基準は何でしょうか?
-
選択肢を検討する:
- 2~3個の代替案を提示します
- 各案のトレードオフを説明します
- どの方向性に共感するか尋ねます
-
段階的に実装する:
- 構造と階層から始めます
- 視覚的な仕上げを段階的に加えます
- 各段階でテストします
-
検証する:
- 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 デザインガイダンスを含む初回リリース
参考資料
詳しくは、以下を参照してください:
- WCAG 2.1 ガイドライン:https://www.w3.org/WAI/WCAG21/quickref/
- Google Fonts:https://fonts.google.com/
- Tailwind CSS ドキュメント:https://tailwindcss.com/docs
- Shadcn UI コンポーネント:https://ui.shadcn.com/