design-frontend について
Web UIの実装者向けに、レスポンシブレイアウト、デザイントークン、ダークモードのパターンを案内するガイドです。Tailwind CSS v4とCSS変数を中心に、実装ルールやトラブルシューティングも扱います。
主な機能
- 01デザイントークンとCSS変数
- 02モバイルファーストのレイアウト
- 03コンテナクエリのパターン
- 04ダークモードとコントラスト
- 05アクセシブルなコンポーネント指針
活用シーン
- 01コンポーネントライブラリのテーマトークン設定
- 02モバイル対応レイアウトの実装
- 03ダークモードの可読性確認
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ ravnhq/ ai-toolkit --skill design-frontendインストール後、Claude Code で/design-frontendを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
rules/_sections.mdlayout-avoid-important.mdlayout-max-width-containers.mdlayout-use-spacing-scale.mdresponsive-container-queries.mdresponsive-mobile-first.mdresponsive-touch-targets.mdtoken-dark-mode-colors.mdtoken-never-hardcode-colors.mdtoken-use-cn-utility.md詳細
Web UI 向けビジュアルデザインシステム
一貫性があり、アクセシブルで、レスポンシブなインターフェースを実現するためのデザインシステムのパターンです。Tailwind CSS v4 では、実行時のテーマ設定に CSS 変数を使用できるようになり、状況が大きく変わりました。主なパターンは、デザイントークン(色、スペーシング、タイポグラフィ)、レスポンシブブレークポイントとコンテナークエリ、適切なコントラストを備えたダークモード、コンポーネントの構成、スペーシングスケールです。
主な課題:トークンの代わりに値をハードコードする(保守が困難)、モバイルファーストの考え方を取り入れずにレスポンシブデザインを実装する、ダークモードを後付けで実装する(アクセシビリティに問題がある)、ビューポートだけでなくコンポーネント単位のレスポンシブ対応にコンテナークエリを使用することです。
ワークフロー
ビジュアルデザインを実装する際は、次の手順に従います。
- トークンを定義する — 色、スペーシング、タイポグラフィ、シャドウを
@theme内の CSS 変数として定義します - コンテナーを選ぶ — コンテナークエリを使用するため、コンポーネントを
@containerで囲みます - モバイルファーストで構築する — モバイルレイアウトから始め、ブレークポイントを段階的に追加します
- ダークモードをテストする —
dark:バリアントを使用し、コントラスト比を確認します - タッチターゲットを検証する — インタラクティブ要素は最小 44x44px にします
- パフォーマンスを測定する — CSS-in-JS ライブラリは描画時間に影響します。Tailwind はランタイムを使用しません
ルール
パターンは関心事ごとに整理されています。
- レイアウト — 最大幅のコンテナー、一貫したスペーシング、視覚的階層
- レスポンシブデザイン — モバイルファーストのアプローチ、ブレークポイント、コンテナークエリ
- デザイントークン — カラースケール、スペーシングスケール、タイポグラフィのファミリー
- ダークモード — 適切なコントラスト、色の組み合わせ、テーマ設定用の CSS 変数
- コンポーネント — タッチターゲット、アフォーダンス、アクセシビリティ
実装パターンと例については、rules/ を参照してください。
例
トリガーとなる例
ユーザー:「コンポーネントライブラリ向けに、ダークモードをサポートする Tailwind のデザイントークンシステムをセットアップしてください。」
期待される動作:design-frontend のガイダンスを使用し、CSS 変数と色の組み合わせを使ったトークンパターンを適用します。
トリガーとならない例
ユーザー:「ユーザー認証用の Node.js REST API を作成してください。」
期待される動作:design-frontend を優先せず、より関連性の高いスキルを選ぶか、そのスキルを使わずに進めます。
-
エラー:クラス内に色の値をハードコードする。テーマの変更にリファクタリングが必要になる
-
原因:デザイントークンを使わず、コードベース内に色が散在している
-
解決策:
@themeを使って色を CSS 変数として定義し、var(--color-*)で参照します -
エラー:ダークモードが色あせて見える。暗い背景でコントラストが低い
-
原因:色の組み合わせが個別に設計されており、色を反転すればよいと思い込んでいる
-
解決策:ダークモード用のバリアントをテストし、適切なコントラスト比を備えたカラースケールを使用します
トラブルシューティング
-
エラー:コンテナークエリが機能しない。要素がコンテナーのサイズに応じて変化しない
-
原因:親要素に
@containerクラスが指定されていない -
解決策:親要素に
@containerを追加し、子要素に@sm:、@md:、@lg:バリアントを使用します -
エラー:ダークモードのスタイルが適用されない。
dark:バリアントが無視される -
原因:ダークモードが設定されていない。設定で
darkMode: "class"または"media"を使用します -
解決策:
tailwind.config.jsまたは CSS の@custom-variantでダークモードを設定します -
エラー:タッチターゲットが小さすぎて、ユーザーがボタンをタップしにくい
-
原因:デスクトップ向けに最適化しすぎて、モバイルでもマウスのような精密さを前提としている
-
解決策:タッチターゲットには最低でも
h-11/w-11(44px)を使用します