shadcn について
shadcn/ui アプリケーションを開発する人向けの実践ガイドです。コンポーネント設計、アクセシビリティ、スタイル、フォーム、データ表示を扱い、プリミティブ固有の指針を適用する前に Radix UI と Base UI のどちらを使っているか確認します。
主な機能
- 01優先度別の8カテゴリ
- 02Radix UI と Base UI の指針
- 03アクセシビリティの実践
- 04スタイルとテーマの助言
- 05フォームとデータ表示のパターン
活用シーン
- 01shadcn/ui コンポーネントの作成・合成
- 02アクセシビリティとスタイルのレビュー
- 03フォームとデータ表示の実装
MCP 対応
コンポーネントのライフサイクル、レジストリ、MCP に現行 CLI を使うルールを含みます。
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ pymodel/ react-frontend-skills --skill shadcnインストール後、Claude Code で/shadcnを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
references/ally-ensure-color-contrast.mdally-maintain-focus-management.mdally-preserve-aria-attributes.mdally-preserve-keyboard-navigation.mdally-provide-sr-only-labels.mdarch-current-cli-registry.mdarch-extend-variants-with-cva.mdarch-forward-refs-for-composable-components.mdarch-isolate-component-variants.mdarch-preserve-radix-primitive-structure.mdarch-unified-radix-package.mdarch-use-asChild-for-custom-triggers.mdarch-use-cn-for-class-merging.mdcomp-combine-command-with-popover.mdcomp-compose-with-compound-components.mdcomp-create-reusable-form-fields.mdcomp-nest-dialogs-correctly.mdcomp-use-drawer-for-mobile-modals.mdcomp-use-slot-pattern-for-flexibility.mddata-empty-states-with-guidance.mddata-paginate-server-side.mddata-use-skeleton-loading-states.mddata-use-tanstack-table-for-complex-tables.mddata-virtualize-large-lists.mdform-handle-async-validation.mdform-reset-form-state-correctly.mdform-show-validation-errors-correctly.mdform-use-react-hook-form-integration.mdform-use-zod-for-schema-validation.mdperf-avoid-unnecessary-rerenders-in-forms.md詳細
shadcn/ui のコミュニティベストプラクティス
shadcn/ui アプリケーション向けの最新ベストプラクティスガイドです。プリミティブ固有のガイダンスを適用する前に、チェックイン済みのコンポーネントが Radix UI と Base UI のどちらを使用しているか確認してください。現在の shadcn は両方をサポートしており(新規プロジェクトでは Base UI がデフォルトです)、それぞれコンポジション API が異なります。コンポーネントのインストールとアップグレードには、名前空間付きレジストリを解決する現在の CLI(v4)を使用します。
適用する場面
以下の場合に、このガイドラインを参照してください。
- 新しい shadcn/ui コンポーネントを作成する場合や、プリミティブを組み合わせる場合
- React Hook Form と Zod のバリデーションを使用してフォームを実装する場合
- データテーブルを構築する場合や、大規模なデータセットを表示する場合
- テーマをカスタマイズする場合や、ダークモードへの対応を追加する場合
- アクセシビリティ基準への準拠についてコードをレビューする場合
優先度別のルールカテゴリ
| 優先度 | カテゴリ | 影響度 | プレフィックス |
|---|---|---|---|
| 1 | コンポーネントアーキテクチャ | CRITICAL | arch- |
| 2 | アクセシビリティの維持 | CRITICAL | ally- |
| 3 | スタイリングとテーマ設定 | HIGH | style- |
| 4 | フォームのパターン | HIGH | form- |
| 5 | データ表示 | MEDIUM-HIGH | data- |
| 6 | コンポーネントのコンポジション | MEDIUM | comp- |
| 7 | パフォーマンスの最適化 | MEDIUM | perf- |
| 8 | 状態管理 | LOW-MEDIUM | state- |
クイックリファレンス
1. コンポーネントアーキテクチャ(CRITICAL)
arch-use-asChild-for-custom-triggers- 生成されたプリミティブのコンポジション API を使用しますarch-current-cli-registry- コンポーネントのライフサイクルには現在の CLI(v4、レジストリ、MCP)を使用しますarch-unified-radix-package- プリミティブは統合された radix-ui パッケージからインポートしますarch-preserve-radix-primitive-structure- Radix の複合コンポーネントの階層を維持しますarch-extend-variants-with-cva- 型安全なバリアントには Class Variance Authority を使用しますarch-use-cn-for-class-merging- Tailwind クラスを安全にマージするには cn() ユーティリティを使用しますarch-forward-refs-for-composable-components- フォームやフォーカスとの連携のために ref を転送しますarch-isolate-component-variants- 基本スタイルとバリアント固有のスタイルを分離します
2. アクセシビリティの維持(CRITICAL)
ally-preserve-aria-attributes- Radix の ARIA 属性をそのまま維持しますally-provide-sr-only-labels- アイコンボタンにスクリーンリーダー用のラベルを追加しますally-maintain-focus-management- モーダル内のフォーカストラップを維持しますally-preserve-keyboard-navigation- WAI-ARIA のキーボード操作パターンを維持しますally-ensure-color-contrast- WCAG のカラーコントラスト比を維持します
3. スタイリングとテーマ設定(HIGH)
style-use-css-variables-for-theming- テーマカラーには CSS 変数を使用しますstyle-avoid-important-overrides-!importantによる上書きより、バリアントとクラスのコンポジションを優先しますstyle-use-tailwind-theme-extend- CSS で Tailwind v4 のテーマトークンを定義しますstyle-consistent-spacing-scale- 一貫性のある Tailwind のスペーシングスケールを使用しますstyle-responsive-design-patterns- モバイルファーストのレスポンシブデザインを適用しますstyle-dark-mode-support- CSS 変数でダークモードに対応します
4. フォームのパターン(高)
form-use-react-hook-form-integration- React Hook Form と統合するform-use-zod-for-schema-validation- 型安全な検証に Zod を使用するform-show-validation-errors-correctly- 適切なタイミングでエラーを表示するform-handle-async-validation- 非同期検証の呼び出しをデバウンスするform-reset-form-state-correctly- 送信後にフォームの状態をリセットする
5. データ表示(中〜高)
data-use-tanstack-table-for-complex-tables- 並べ替え/フィルタリングに TanStack Table を使用するdata-virtualize-large-lists- 100 件以上のリストを仮想化するdata-use-skeleton-loading-states- 読み込み状態に Skeleton を使用するdata-paginate-server-side- 大規模なデータセットをサーバー側でページ分割するdata-empty-states-with-guidance- 次の行動につながる空の状態を表示する
6. コンポーネントの構成(中)
comp-compose-with-compound-components- 複合コンポーネントのパターンを使用するcomp-use-drawer-for-mobile-modals- モバイルデバイスでは Drawer を使用するcomp-combine-command-with-popover- Command で検索可能なセレクトを作成するcomp-nest-dialogs-correctly- ネストしたダイアログのフォーカスを適切に管理するcomp-create-reusable-form-fields- 再利用可能なフォームフィールドコンポーネントを切り出すcomp-use-slot-pattern-for-flexibility- 柔軟なコンテンツのためにスロットパターンを使用する
7. パフォーマンスの最適化(中)
perf-lazy-load-heavy-components- 50KB を超えるコンポーネントを遅延読み込みするperf-memoize-expensive-renders- リスト項目や処理コストの高いコンポーネントをメモ化するperf-optimize-icon-imports- Lucide アイコンを直接インポートするperf-avoid-unnecessary-rerenders-in-forms- フォームフィールドの監視を分離するperf-debounce-search-inputs- 検索やフィルターの入力をデバウンスする
8. 状態管理(低〜中)
state-prefer-uncontrolled-for-simple-inputs- シンプルなフォームでは非制御を使用するstate-lift-state-to-appropriate-level- 最も近い共通祖先まで状態を引き上げるstate-use-controlled-dialog-state- プログラムから操作できるようダイアログを制御するstate-colocate-state-with-components- 状態を使用箇所の近くに配置する
使用方法
まず、プロジェクトのルートで実行します。
npx -y @pymodel/react-frontend-skills detect # installed vs. targeted versions
上記のルールのうちタスクに該当するものについて、references/<rule-id>.md を読み、重要である理由と、誤ったコードと正しいコードを確認してください。
コメント
Markdown 対応