tailwind-design-system
Tailwind CSSとshadcn/uiを使用したデザインシステムの構築・管理に特化したスキルです。デザイントークンの定義、CSS変数を用いたテーマ設定、一貫性のあるUIコンポーネントライブラリの整備、デザインシステムの初期設定、またはshadcn/uiコンポーネントをデザインシステムのプリミティブとしてラップする際に活用してください。
description の原文を見る
Skill for creating and managing a Design System using Tailwind CSS and shadcn/ui. Use when defining design tokens, setting up theming with CSS variables, building a consistent UI component library, initializing a design system configuration, or wrapping shadcn/ui components into design system primitives.
SKILL.md 本文
Tailwind CSS & shadcn/ui デザインシステム
概要
Tailwind CSS (v4.1+) と shadcn/ui を使用して、集中管理されたデザインシステムを構築・管理するための専門家向けガイドです。このスキルは、デザイントークンの定義、CSS変数によるテーム設定、shadcn/ui プリミティブに基づいた一貫性のあるUIコンポーネントライブラリの構築を実現するための体系的なワークフローを提供します。
他のスキルとの関係:
- tailwind-css-patterns はユーティリティファースト設計、レスポンシブデザイン、一般的なTailwind CSS使用法をカバーします
- shadcn-ui は個別のコンポーネントのインストール、設定、実装をカバーします
- このスキル はシステムレベルの調整に焦点を当てています:デザイントークン、テーミング基盤、コンポーネント ラッピングパターン、およびアプリケーション全体の一貫性を確保します
使用するべき場合
- Tailwind CSS と shadcn/ui を使用して、ゼロからデザインシステムを構築するとき
- デザイントークン (色、タイポグラフィ、間隔、半径、影) を CSS 変数として定義するとき
globals.cssに集中管理されたテーミングシステム (ライト/ダークモード) を設定するとき- shadcn/ui コンポーネントをデザインシステムプリミティブにラッピングして制約を適用するとき
- トークン駆動のコンポーネントライブラリを構築して一貫性のある UI を実現するとき
- JavaScript ベースの Tailwind 設定から CSS ファーストの設定 (v4.1+) へ移行するとき
- 知覚的均一性のための oklch 形式のカラーパレットを確立するとき
- ライト/ダーク以外の複数のテーマをサポートするとき (例:ブランドテーマ)
手順
ステップ 1: デザインシステム設定の初期化
プロジェクトを設定するために、以下のコマンドを実行してください:
# Tailwind がインストールされているか確認
npx tailwindcss --version
# Tailwind v4 の場合 (推奨)
npx @tailwindcss/vite@latest init # または: npm install -D tailwindcss @tailwindcss/vite
# shadcn/ui CLI を初期化
npx shadcn@latest init
# コアの shadcn/ui コンポーネントをインストール
npx shadcn@latest add button card input -y
バリデーションチェックポイント: セットアップ後、以下で確認してください:
ls src/components/ui/ # インストール済みコンポーネントが表示されるはず
cat src/app/globals.css # @tailwind ディレクティブが含まれているはず
ステップ 2: デザイントークンの定義
src/app/globals.css にデザイントークンを記述してください:
@tailwind base;
@tailwind components;
@tailwind utilities;
@layer base {
:root {
/* Brand Colors */
--primary: oklch(0.55 0.18 250);
--primary-foreground: oklch(0.985 0 0);
/* Semantic Colors */
--background: oklch(0.99 0 0);
--foreground: oklch(0.15 0 0);
--secondary: oklch(0.96 0.01 250);
--secondary-foreground: oklch(0.20 0 0);
/* Validation: all colors must have foreground pair */
--destructive: oklch(0.55 0.22 25);
--destructive-foreground: oklch(0.985 0 0);
}
.dark {
--primary: oklch(0.65 0.20 250);
--background: oklch(0.14 0 0);
--foreground: oklch(0.97 0 0);
--secondary: oklch(0.25 0.02 250);
}
}
バリデーションチェックポイント: トークンが有効な CSS であることを確認してください:
grep -E "^[[:space:]]*--[a-z-]+:" src/app/globals.css | wc -l
# 定義されたトークンの数を返すはず (例:10 以上)
ステップ 3: テーミング基盤の設定
CSS 変数を Tailwind ユーティリティに結びつけます (Tailwind v4.1+):
@theme inline {
--color-primary: var(--primary);
--color-primary-foreground: var(--primary-foreground);
--color-background: var(--background);
--color-foreground: var(--foreground);
}
components/providers/theme-provider.tsx に暗いモードのクラストグルを追加してください:
import { useEffect } from "react";
export function ThemeProvider({ children }: { children: React.ReactNode }) {
useEffect(() => {
const isDark = window.matchMedia("(prefers-color-scheme: dark)").matches;
document.documentElement.classList.toggle("dark", isDark);
}, []);
return <>{children}</>;
}
バリデーションチェックポイント: ダークモードをテストしてください:
document.documentElement.classList.contains("dark") // ブラウザコンソールで実行
ステップ 4: shadcn/ui コンポーネントのラッピング
src/components/ds/Button.tsx を作成してください:
import { Button as ShadcnButton } from "@/components/ui/button";
type DSVariant = "primary" | "secondary" | "destructive" | "ghost";
const variantMap: Record<DSVariant, "default" | "secondary" | "destructive" | "ghost"> = {
primary: "default", secondary: "secondary",
destructive: "destructive", ghost: "ghost",
};
export function Button({ variant = "primary", ...props }: { variant?: DSVariant } & React.ComponentProps<typeof ShadcnButton>) {
return <ShadcnButton variant={variantMap[variant]} {...props} />;
}
バリデーションチェックポイント: ビルドが成功することを確認してください:
npx tsc --noEmit src/components/ds/Button.tsx
ステップ 5: バリデーションとドキュメント
トークンバリデーションスクリプトを実行してください:
REQUIRED=("primary" "primary-foreground" "background" "foreground" "secondary" "secondary-foreground")
for token in "${REQUIRED[@]}"; do
grep -q "$token:" src/app/globals.css || echo "MISSING: --$token"
done
バリデーションチェックポイント: すべての shadcn コンポーネントが DS トークンを使用していることを確認してください:
grep -r "bg-primary\|text-primary\|bg-background" src/components/ds/
例
カスタムトークンの追加
globals.css の基本トークンを拡張してください:
:root {
--warning: oklch(0.84 0.16 84);
--warning-foreground: oklch(0.28 0.07 46);
}
.dark {
--warning: oklch(0.41 0.11 46);
--warning-foreground: oklch(0.99 0.02 95);
}
@theme inline {
--color-warning: var(--warning);
--color-warning-foreground: var(--warning-foreground);
}
使用方法: <div className="bg-warning text-warning-foreground">Warning</div>
shadcn/ui コンポーネントをデザインシステムプリミティブとしてラッピング
完全な例については references/component-wrapping.md を参照してください。Button、Text、Stack プリミティブの完全な TypeScript 型が含まれています。
トークン使用を強制するように制約されたデザインシステムコンポーネントを作成してください。 インライン例:
import { Button as ShadcnButton } from "@/components/ui/button";
export function Button({ variant = "primary", size = "md", ...props }) {
const variantMap = { primary: "default", secondary: "secondary" };
const sizeMap = { sm: "sm", md: "default", lg: "lg" };
return (
<ShadcnButton
variant={variantMap[variant]}
size={sizeMap[size]}
{...props}
/>
);
}
マルチテーマサポート
ライト/ダーク以上の複数のブランドテーマが必要なアプリケーションの場合:
[data-theme="ocean"] {
--primary: oklch(0.55 0.18 230);
--primary-foreground: oklch(0.985 0 0);
}
[data-theme="forest"] {
--primary: oklch(0.50 0.15 145);
--primary-foreground: oklch(0.985 0 0);
}
const [theme, setTheme] = useState("light");
useEffect(() => {
document.documentElement.setAttribute("data-theme", theme);
}, [theme]);
デザイントークンのバリデーション
必要なすべてのトークンが定義されていることを確認してください:
#!/bin/bash
REQUIRED=("--background" "--foreground" "--primary" "--primary-foreground")
for token in "${REQUIRED[@]}"; do
grep -q "$token:" src/styles/globals.css || echo "Missing: $token"
done
制約と警告
- oklch カラーフォーマット: 知覚的均一性のため oklch を使用してください。すべてのブラウザが natively oklch をサポートしているわけではありません。古いブラウザをターゲットにする場合は互換性を確認してください
- トークンネーミング: shadcn/ui の規約 (
--primary,--primary-foreground) に従い、シームレスな統合を実現してください @theme inline vs@theme: CSS 変数を Tailwind ユーティリティにブリッジする場合は@theme inlineを使用してください。直接トークン定義する場合は@themeを使用してください- コンポーネントラッピング: ラッパーコンポーネントはシンプルに保ってください。デザインシステムルールを強制する制約のみを追加し、shadcn/ui ロジックの複製を避けてください
- ダークモード:
:root内のすべてのトークンについてダークモード値を常に定義してください。ダークトークンの欠落は視覚的な退行を引き起こします - CSS 変数スコープ:
:rootで定義されたトークンはグローバルです。複数テーマで競合を避けるために[data-theme]セレクタを使用してください - パフォーマンス: 過度な CSS カスタムプロパティチェーンを避けてください。各
var()検索はわずかですが ゼロではないオーバーヘッドを追加します - Tailwind v4 vs v3:
@themeディレクティブと@theme inlineは v4.1+ の機能です。v3 プロジェクトの場合は、tailwind.config.jsでtheme.extendを使用してください
ベストプラクティス
- 単一の情報源: すべてのデザイントークンは
globals.cssに存在します。コンポーネント内にカラー値をハードコードしないでください - セマンティックネーミング: 外観ベース (
--blue-500,--red-600) ではなく、目的ベース (--primary,--destructive) の名前を使用してください - フォアグラウンドペアリング: すべての背景トークンには、コントラスト準拠のため対応する
-foregroundトークンが必要です - トークンスケール: カスタムパレット (50-950) の完全なスケールを定義して、柔軟性を提供してください
- コンポーネントバレルエクスポート: クリーンなインポートのため、すべての DS コンポーネントを単一の
index.tsからエクスポートしてください - アクセシビリティ: すべてのトークンペア (背景/フォアグラウンド) が WCAG AA コントラスト (テキストは 4.5:1、大きいテキストは 3:1) を満たしていることを確認してください
- トークンのドキュメント化: チームのためにすべてのトークンの視覚的リファレンスを保持してください
- 一貫した間隔: 任意の値ではなく、DS コンポーネント経由で Tailwind の間隔スケール (
gap-2,gap-4,gap-6) を使用してください
参照
- Tailwind CSS v4 Theme Configuration: https://tailwindcss.com/docs/theme
- Tailwind CSS Functions and Directives: https://tailwindcss.com/docs/functions-and-directives
- shadcn/ui Theming Guide: https://ui.shadcn.com/docs/theming
- shadcn/ui Installation (Manual): https://ui.shadcn.com/docs/installation/manual
- oklch Color Space: https://oklch.com
ライセンス: MIT(寛容ライセンスのため全文を引用しています) · 原本リポジトリ
詳細情報
- 作者
- giuseppe-trisciuoglio
- ライセンス
- MIT
- 最終更新
- 不明
Source: https://github.com/giuseppe-trisciuoglio/developer-kit / ライセンス: MIT
関連スキル
doubt-driven-development
重要な判断はすべて、本番環境への展開前に新しい視点から対抗的レビューを実施します。速度より正確性が重要な場合、不慣れなコードを扱う場合、本番環境・セキュリティに関わるロジック・取り消し不可の操作など影響度が高い場合、または後でバグを修正するよりも今検証する方が効率的な場合に活用してください。
apprun-skills
TypeScriptを使用したAppRunアプリケーションのMVU設計に関する総合的なガイダンスが得られます。コンポーネントパターン、イベントハンドリング、状態管理(非同期ジェネレータを含む)、パラメータと保護機能を備えたルーティング・ナビゲーション、vistestを使用したテストに対応しています。AppRunコンポーネントの設計・レビュー、ルートの配線、状態フローの管理、AppRunテストの作成時に活用してください。
desloppify
コードベースのヘルスチェックと技術負債の追跡ツールです。コード品質、技術負債、デッドコード、大規模ファイル、ゴッドクラス、重複関数、コードスメル、命名規則の問題、インポートサイクル、結合度の問題についてユーザーが質問した場合に使用してください。また、ヘルススコアの確認、次の改善項目の提案、クリーンアップ計画の作成をリクエストされた際にも対応します。29言語に対応しています。
debugging-and-error-recovery
テストが失敗したり、ビルドが壊れたり、動作が期待と異なったり、予期しないエラーが発生したりした場合に、体系的な根本原因デバッグをガイドします。推測ではなく、根本原因を見つけて修正するための体系的なアプローチが必要な場合に使用してください。
test-driven-development
テスト駆動開発により実装を進めます。ロジックの実装、バグの修正、動作の変更など、あらゆる場面で活用できます。コードが正常に動作することを証明する必要がある場合、バグ報告を受けた場合、既存機能を修正する予定がある場合に使用してください。
incremental-implementation
変更を段階的に実施します。複数のファイルに影響する機能や変更を実装する場合に使用してください。大量のコードを一度に書こうとしている場合や、タスクが一度では完結できないほど大きい場合に活用します。