shadcn-ui について
React 開発者向けに、shadcn/ui でアクセシブルかつカスタマイズ可能な UI を構築するスキルです。CLI でソースをプロジェクトに取り込み、テーマ、フォーム、レジストリを扱います。
主な機能
- 01CLI によるコンポーネントソースの追加
- 02Radix UI または Base UI のプリミティブ
- 03Tailwind CSS 4 のテーマとダークモード
- 04React Hook Form または TanStack Form のフォーム
- 05コンポーネントのバリアントとアクセシビリティ
- 06カスタムレジストリ
活用シーン
- 01React プロジェクトへのコンポーネント追加
- 02oklch カラーによるテーマ設定
- 03Zod 検証付きフォームの構築
- 04コンポーネントレジストリの作成と配布
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ oakoss/ agent-skills --skill shadcn-uiインストール後、Claude Code で/shadcn-uiを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
references/cli-and-registry.mdcomponent-patterns.mdform-patterns.mdtheming-and-dark-mode.md詳細
shadcn/ui
概要
shadcn/ui をコード生成プラットフォーム(npm の依存関係ではありません)として活用し、アクセシブルでカスタマイズ可能な UI を構築するためのガイドです。コンポーネントは CLI 経由でプロジェクトにコピーされ、完全に所有できます。Radix UI または Base UI のプリミティブ、oklch カラートークンを使った Tailwind CSS 4、React 19 の直接的な ref パターン、Field コンポーネントと Zod を使った型安全なフォーム検証に対応しています。
使用する場面: shadcn/ui コンポーネントの追加、CSS 変数と oklch カラーによるテーマ設定、React Hook Form または TanStack Form を使ったフォームの構築、カスタムレジストリの作成、アクセシブルなコンポーネントバリアントの合成、ダークモードの設定。
使用しない場面: React 以外のフレームワークを使う場合(代わりに shadcn-vue または shadcn-svelte を使用してください)、別のコンポーネントライブラリ(MUI、Chakra)を使うプロジェクト、Tailwind CSS を使わないプロジェクト。
クイックリファレンス
| パターン | API/アプローチ | 主なポイント |
|---|---|---|
| プロジェクトを初期化 | npx shadcn@latest init | フレームワークを自動検出し、CSS 変数を設定します |
| コンポーネントを追加 | npx shadcn@latest add [name] | ソースコードをプロジェクトにコピーします |
| カスタムプロジェクト | npx shadcn@latest create | ライブラリ(Radix/Base UI)、スタイル、テーマ、フォントを選択します |
| 更新を確認 | npx shadcn@latest diff [component] | コンポーネントの上流の変更を表示します |
| レジストリを検索 | npx shadcn@latest search @registry | 名前空間付きレジストリを閲覧してインストールします |
| レジストリを構築 | npx shadcn@latest build | registry.json からレジストリ JSON を生成します |
| テーマトークン | :root vars + @theme inline mapping | oklch カラー値を使用し、.dark クラスでダークモードにします |
| ダークモード | @custom-variant dark (&:is(.dark *)) | .dark セレクターの下で CSS 変数を切り替えます |
| コンポーネントバリアント | class-variance-authority の cva() | 型安全なバリアント定義 |
| ポリモーフィックスロット | Radix の <Slot> を使う asChild prop | 子要素に props をマージします |
| 直接的な ref | 通常の prop としての ref | React 19 では forwardRef は非推奨です |
| フォーム(現行) | <Field /> + React Hook Form + Zod | 従来の <Form /> コンポーネントに代わるものです |
| フォーム(従来) | <Form /> + <FormField /> + Zod | 引き続き動作しますが、積極的な開発は終了しています |
| クラスのマージ | clsx + twMerge をラップする cn() ユーティリティ | Tailwind クラスを競合なく安全にマージします |
| トースト/通知 | Sonner(npx shadcn@latest add sonner) | 標準の通知方法です。自動非表示とスタックに対応します |
| ブロックを使って初期化 | npx shadcn@latest init sidebar-01 | 事前構築済みのページブロックでプロジェクトをセットアップします |
| RTL サポート | ルート要素の dir="rtl" | すべてのコンポーネントで RTL レイアウトを標準サポートします |
| 新しいコンポーネント | Spinner、Kbd、ButtonGroup | 最近追加されたユーティリティおよびレイアウトコンポーネント |
よくある間違い
| 間違い | 正しい方法 |
|---|---|
| shadcn/ui を npm 依存関係としてインストールする | CLI(npx shadcn@latest add)を使って、ソースをプロジェクトにコピーします |
React 19 のコンポーネントで forwardRef を使う | ref をプロパティとして直接渡します。React 19 では forwardRef は非推奨です |
| カラートークンに HSL 値を使う | oklch 形式を使います:--primary: oklch(0.205 0 0) |
ユーティリティで変数を hsl() または oklch() で囲む | CSS 変数を直接参照します:var(--primary) |
トークンを @theme {} に直接記述する | 値には :root を使い、Tailwind へのマッピングには @theme inline を使います |
新しいフォームに従来の <Form /> を使う | React Hook Form または TanStack Form と併せて <Field /> コンポーネントを使います |
| フォームコンポーネントで Zod による検証を省略する | 型安全な検証のため、フォームには必ず Zod スキーマを組み合わせます |
インタラクティブなコントロールに div 要素を使う | セマンティック HTML とアクセシビリティのために、Radix または Base UI のプリミティブを使います |
node_modules 内のコンポーネントを変更する | コンポーネントはソースツリー内にあります。直接管理し、カスタマイズしてください |
古い CLI コマンド shadcn-ui@canary を使う | すべての CLI 操作で npx shadcn@latest を使います |
委任
- コンポーネントの検索とプリミティブの特定:
Exploreエージェントを使います - テーマの移行または複数ファイルのリファクタリング:
Taskエージェントを使います - デザインシステムのアーキテクチャ計画:
Planエージェントを使います - レジストリの設定と配布:
Taskエージェントを使います
tanstack-formスキルが利用できる場合は、高度なフォーム状態管理(配列フィールド、連動フィールド、非同期検証)を委任してください。tailwindスキルが利用できる場合は、ユーティリティクラスのパターンとデザイントークンのアーキテクチャを委任してください。