UI スタイリングスキル
shadcn/ui コンポーネント、Tailwind CSS ユーティリティスタイリング、キャンバスベースのビジュアルデザインシステムを組み合わせて、美しくアクセシブルなユーザーインターフェースを作成するための包括的なスキルです。
リファレンス
- shadcn/ui: https://ui.shadcn.com/llms.txt
- Tailwind CSS: https://tailwindcss.com/docs
このスキルを使用するタイミング
以下の場合に使用します:
- Reactベースのフレームワーク(Next.js、Vite、Remix、Astro)でUIを構築する場合
- アクセシブルなコンポーネント(ダイアログ、フォーム、テーブル、ナビゲーション)を実装する場合
- ユーティリティファーストのCSSアプローチでスタイリングする場合
- レスポンシブでモバイルファーストのレイアウトを作成する場合
- ダークモードとテーマのカスタマイズを実装する場合
- 一貫性のあるトークンを使用したデザインシステムを構築する場合
- ビジュアルデザイン、ポスター、ブランド素材を生成する場合
- 即時のビジュアルフィードバックを得ながらラピッドプロトタイピングを行う場合
- 複雑なUIパターン(データテーブル、チャート、コマンドパレット)を追加する場合
コアスタック
コンポーネントレイヤー: shadcn/ui
- Radix UI プリミティブによる事前構築済みのアクセシブルコンポーネント
- コピー&ペースト配布モデル(コンポーネントはコードベース内に配置)
- TypeScript ファーストで完全な型安全性
- 複雑なUIのためのコンポーザブルプリミティブ
- CLIベースのインストールと管理
スタイリングレイヤー: Tailwind CSS
- ユーティリティファーストのCSSフレームワーク
- ビルド時処理でランタイムオーバーヘッドゼロ
- モバイルファーストのレスポンシブデザイン
- 一貫性のあるデザイントークン(色、スペーシング、タイポグラフィ)
- 自動デッドコード除去
ビジュアルデザインレイヤー: キャンバス
- 美術館品質のビジュアルコンポジション
- 哲学に基づいたデザインアプローチ
- 洗練されたビジュアルコミュニケーション
- 最小限のテキスト、最大のビジュアルインパクト
- 体系的なパターンと洗練された美学
クイックスタート
コンポーネント + スタイリングのセットアップ
shadcn/ui を Tailwind と共にインストール:
npx shadcn@latest init
CLIがフレームワーク、TypeScript、パス、テーマ設定をプロンプトで尋ねます。これにより、shadcn/ui と Tailwind CSS の両方が設定されます。
コンポーネントを追加:
npx shadcn@latest add button card dialog form
ユーティリティスタイリングでコンポーネントを使用:
import { Button } from "@/components/ui/button"
import { Card, CardHeader, CardTitle, CardContent } from "@/components/ui/card"
export function Dashboard() {
return (
<div className="container mx-auto p-6 grid gap-6 md:grid-cols-2 lg:grid-cols-3">
<Card className="hover:shadow-lg transition-shadow">
<CardHeader>
<CardTitle className="text-2xl font-bold">Analytics</CardTitle>
</CardHeader>
<CardContent className="space-y-4">
<p className="text-muted-foreground">View your metrics</p>
<Button variant="default" className="w-full">
View Details
</Button>
</CardContent>
</Card>
</div>
)
}
代替: Tailwind のみのセットアップ
Vite プロジェクト:
npm install -D tailwindcss @tailwindcss/vite
// vite.config.ts
import tailwindcss from '@tailwindcss/vite'
export default { plugins: [tailwindcss()] }
/* src/index.css */
@import "tailwindcss";
コンポーネントライブラリガイド
使用パターン、インストール方法、構成例を含む包括的なコンポーネントカタログ。
参照: references/shadcn-components.md
カバー範囲:
- フォーム&入力コンポーネント(Button、Input、Select、Checkbox、Date Picker、Form バリデーション)
- レイアウト&ナビゲーション(Card、Tabs、Accordion、Navigation Menu)
- オーバーレイ&ダイアログ(Dialog、Drawer、Popover、Toast、Command)
- フィードバック&ステータス(Alert、Progress、Skeleton)
- 表示コンポーネント(Table、Data Table、Avatar、Badge)
テーマ&カスタマイズ
テーマ設定、CSS 変数、ダークモード実装、コンポーネントカスタマイズ。
参照: references/shadcn-theming.md
カバー範囲:
- next-themes を使用したダークモード設定
- CSS 変数システム
- 色のカスタマイズとパレット
- コンポーネントのバリアントカスタマイズ
- テーマトグルの実装
アクセシビリティパターン
ARIA パターン、キーボードナビゲーション、スクリーンリーダーサポート、アクセシブルなコンポーネントの使用法。
参照: references/shadcn-accessibility.md
カバー範囲:
- Radix UI のアクセシビリティ機能
- キーボードナビゲーションパターン
- フォーカス管理
- スクリーンリーダーへの読み上げ
- フォームバリデーションのアクセシビリティ
Tailwind ユーティリティ
レイアウト、スペーシング、タイポグラフィ、色、ボーダー、シャドウのためのコアユーティリティクラス。
参照: references/tailwind-utilities.md
カバー範囲:
- レイアウトユーティリティ(Flexbox、Grid、位置指定)
- スペーシングシステム(パディング、マージン、ギャップ)
- タイポグラフィ(フォントサイズ、ウェイト、配置、行間)
- 色と背景
- ボーダーとシャドウ
- カスタムスタイリングのための任意の値
レスポンシブデザイン
モバイルファーストのブレークポイント、レスポンシブユーティリティ、アダプティブレイアウト。
参照: references/tailwind-responsive.md
カバー範囲:
- モバイルファーストアプローチ
- ブレークポイントシステム(sm、md、lg、xl、2xl)
- レスポンシブユーティリティパターン
- コンテナクエリ
- 最大幅クエリ
- カスタムブレークポイント
Tailwind カスタマイズ
設定ファイル構造、カスタムユーティリティ、プラグイン、テーマ拡張。
参照: references/tailwind-customization.md
カバー範囲:
- カスタムトークンのための @theme ディレクティブ
- カスタムカラーとフォント
- スペーシングとブレークポイントの拡張
- カスタムユーティリティの作成
- カスタムバリアント
- レイヤー構成(@layer base、components、utilities)
- コンポーネント抽出のための Apply ディレクティブ
ビジュアルデザインシステム
キャンバスベースのデザイン哲学、ビジュアルコミュニケーションの原則、洗練されたコンポジション。
参照: references/canvas-design-system.md
カバー範囲:
- デザイン哲学アプローチ
- テキストよりもビジュアルコミュニケーション
- 体系的なパターンと構成
- 色、形、空間デザイン
- 最小限のテキスト統合
- 美術館品質の実行
- マルチページデザインシステム
ユーティリティスクリプト
コンポーネントインストールと設定生成のための Python 自動化。
shadcn_add.py
依存関係処理付きで shadcn/ui コンポーネントを追加:
python scripts/shadcn_add.py button card dialog
tailwind_config_gen.py
カスタムテーマで tailwind.config.js を生成:
python scripts/tailwind_config_gen.py --colors brand:blue --fonts display:Inter
ベストプラクティス
- コンポーネント構成: シンプルで構成可能なプリミティブから複雑なUIを構築する
- ユーティリティファーストスタイリング: Tailwind クラスを直接使用し、真に反復する場合のみコンポーネントに抽出する
- モバイルファーストレスポンシブ: モバイルスタイルから始め、レスポンシブバリアントを重ねる
- アクセシビリティファースト: Radix UI プリミティブを活用し、フォーカス状態を追加し、セマンティックHTMLを使用する
- デザイントークン: 一貫性のあるスペーシングスケール、カラーパレット、タイポグラフィシステムを使用する
- ダークモードの一貫性: テーマ設定されたすべての要素にダークバリアントを適用する
- パフォーマンス: 自動CSSパージを活用し、動的なクラス名を避ける
- TypeScript: より良い開発体験のために完全な型安全性を活用する
- ビジュアル階層: 構成で注目を誘導し、スペーシングと色を意図的に使用する
- 専門家の職人技: すべての細部が重要です - UIを職人技として扱う
リファレンスナビゲーション
コンポーネントライブラリ
references/shadcn-components.md- 完全なコンポーネントカタログreferences/shadcn-theming.md- テーマとカスタマイズreferences/shadcn-accessibility.md- アクセシビリティパターン
スタイリングシステム
references/tailwind-utilities.md- コアユーティリティクラスreferences/tailwind-responsive.md- レスポンシブデザインreferences/tailwind-customization.md- 設定と拡張
ビジュアルデザイン
references/canvas-design-system.md- デザイン哲学とキャンバスワークフロー
自動化
scripts/shadcn_add.py- コンポーネントインストールscripts/tailwind_config_gen.py- 設定生成
共通パターン
バリデーション付きフォーム:
import { useForm } from "react-hook-form"
import { zodResolver } from "@hookform/resolvers/zod"
import * as z from "zod"
import { Form, FormField, FormItem, FormLabel, FormControl, FormMessage } from "@/components/ui/form"
import { Input } from "@/components/ui/input"
import { Button } from "@/components/ui/button"
const schema = z.object({
email: z.string().email(),
password: z.string().min(8)
})
export function LoginForm() {
const form = useForm({
resolver: zodResolver(schema),
defaultValues: { email: "", password: "" }
})
return (
<Form {...form}>
<form onSubmit={form.handleSubmit(console.log)} className="space-y-6">
<FormField control={form.control} name="email" render={({ field }) => (
<FormItem>
<FormLabel>Email</FormLabel>
<FormControl>
<Input type="email" {...field} />
</FormControl>
<FormMessage />
</FormItem>
)} />
<Button type="submit" className="w-full">Sign In</Button>
</form>
</Form>
)
}
ダークモード対応のレスポンシブレイアウト:
<div className="min-h-screen bg-white dark:bg-gray-900">
<div className="container mx-auto px-4 py-8">
<div className="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6">
<Card className="bg-white dark:bg-gray-800 border-gray-200 dark:border-gray-700">
<CardContent className="p-6">
<h3 className="text-xl font-semibold text-gray-900 dark:text-white">
Content
</h3>
</CardContent>
</Card>
</div>
</div>
</div>
リソース
- shadcn/ui ドキュメント: https://ui.shadcn.com
- Tailwind CSS ドキュメント: https://tailwindcss.com
- Radix UI: https://radix-ui.com
- Tailwind UI: https://tailwindui.com
- Headless UI: https://headlessui.com
- v0 (AI UI ジェネレーター): https://v0.dev