react-shadcn について
React SPA(Vite)向けの shadcn/ui 実装スキルで、プロジェクトの既存基盤に合わせたアクセシブルな UI の構築を支援します。フォーム、オーバーレイ、フィードバック、データ表示、ナビゲーションを扱い、MCP レジストリ検索を実装手順に含みます。
主な機能
- 01Base UI、Radix UI、React Aria に対応
- 02フォーム、オーバーレイ、フィードバックを網羅
- 03データ表示とナビゲーションのパターン
- 04実装前にコンポーネント基盤を判定
- 05CLI でレジストリのコンポーネントを導入
活用シーン
- 01React SPA にフォームを追加
- 02ダイアログ、ドロワー、ポップオーバーの実装
- 03データテーブルやナビゲーションメニューの構築
- 04プロジェクトの基盤に沿った UI コンポーネント構成
MCP 対応
shadcn MCP レジストリツールでコンポーネント検索、ソースや例の確認、導入コマンドの取得ができます。
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ fusengine/ agents --skill react-shadcnインストール後、Claude Code で/react-shadcnを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
references/accordion.mdalert-dialog.mdalert.mdaspect-ratio.mdavatar.mdbadge.mdbreadcrumb.mdbutton.mdcalendar.mdcard.mdcarousel.mdchart.mdcheckbox.mdcollapsible.mdcommand.mdconfiguration.mdcontext-menu.mddialog.mddrawer.mddropdown.mdfield-patterns.mdform-examples.mdhover-card.mdinput-otp.mdinput.mdinstallation.mdlabel.mdmenubar.mdnavigation-menu.mdpagination.md詳細
コンポーネントのコードを書く前に、components.json からベースを検出する必要があります。コンポーネントは bunx --bun shadcn@latest add を使って @/modules/cores/shadcn/components/ui/ にインストールしてください(手書きは禁止)。実装前にコンポーネントを探すための MCP レジストリツール(mcp__shadcn__*)も扱います。これは shadcn/ui のプレーンな React 版です。Next.js App Router 版については nextjs-shadcn を参照してください。
React 向け shadcn/ui
Tailwind CSS v4 でスタイルを設定した、Base UI、Radix UI、React Aria のプリミティブをベースにした、アクセシブルでコピーして使えるコンポーネントです。
エージェントのワークフロー(必須)
実装を始める前に、必ず name を指定して Agent を 1 回ずつ呼び出し、3 つのエージェントを並行して起動します。
- fuse-ai-pilot:explore-codebase - 既存のコンポーネントとパターンを分析します
- fuse-ai-pilot:research-expert - Context7/Exa を使って最新の shadcn/ui ドキュメントを確認します
- mcp__shadcn__* - コンポーネントが利用可能かレジストリを検索します
実装後、検証のために fuse-ai-pilot:sniper を実行します。
概要
使用する場面
- React アプリケーション(Vite)向けの UI コンポーネントを構築する場合
- アクセシブルでカスタマイズ可能なフォームコンポーネント(入力、セレクト、チェックボックス)が必要な場合
- Dialog、Sheet、Drawer、オーバーレイのパターンを実装する場合
- 並べ替え、フィルタリング、ページネーションに対応したデータテーブルを作成する場合
- ナビゲーションメニュー、サイドバー、コマンドパレットを構築する場合
- トースト通知やアラートのフィードバックコンポーネントが必要な場合
shadcn/ui を選ぶ理由
| 特長 | メリット |
|---|---|
| コピー&ペースト方式 | コンポーネントをプロジェクトにコピーするため、完全に所有できます |
| ベースを選択可能 | Base UI(デフォルト)、Radix UI、React Aria — コンポーネント名は共通です |
| Tailwind CSS v4 によるスタイル設定 | CSS ファーストのテーマ(@theme inline、OKLCH トークン) |
| TanStack Form に対応 | Field と FieldError は Standard Schema の問題を受け取れます |
| Lucide アイコン(デフォルト) | components.json の iconLibrary で、migrate icons を使って切り替え可能です |
重要なルール
- 最初にベースを検出する -
components.jsonのstyleを確認します。base-*は Base UI、radix-*/new-yorkは Radix、aria-*は React Aria です。1 つのコンポーネント内でベースを混在させないでください - 新規プロジェクトのデフォルトは Base UI -
-b radix/-b ariaを指定しない限り、initは Base UI を選択します - ベースに沿ってコンポジションする - Base UI は
render={<Button />}、Radix はasChildを使います。Radix と記載された参考例は、Base UI のプロジェクトでは適切な形に読み替えてください - コンポーネントを手動で作成しない - 必ず
bunx --bun shadcn@latest addでインストールしてください(レジストリからプロジェクトのベースに対応するバリアントが提供されます) - TanStack Form のみを使う - React Hook Form は使用しません。
Fieldにdata-invalidを、コントロールにaria-invalidを設定してエラーを連携してください - SOLID パス - コンポーネントの配置先は
@/modules/cores/shadcn/components/ui/です
コードに影響するベースの違い
| 項目 | Base UI(デフォルト) | Radix UI |
|---|---|---|
| パッケージ | @base-ui/react | radix-ui(統合版。@radix-ui/react-* からは migrate radix) |
| カスタム要素としてのトリガー | <DialogTrigger render={<Button />}>開く</DialogTrigger> | <DialogTrigger asChild><Button>開く</Button></DialogTrigger> |
| Select | <Select items={items}>、SelectContent alignItemWithTrigger | <SelectContent position="item-aligned" | "popper"> |
| Accordion | multiple、defaultValue={["item-1"]} | type="single" collapsible / type="multiple" |
| Toggle group の値 | 配列(defaultValue={["bold"]})、multiple | type="single" | "multiple" |
| Checkbox の不確定状態 | indeterminate プロパティ | checked="indeterminate" |
| Drawer | Base UI Drawer(swipeDirection) | Vaul(direction) |
| Toast | add toast → toast.add({ title }) | add sonner → sonner の toast("…") |
| 開閉状態のスタイル設定 | data-open / data-closed | data-state="open"(どちらも shadcn/tailwind.css の data-open: バリアントで対応) |
両方のベースで共通:コンポーネント名、DialogContent / SheetContent の showCloseButton、
Field ファミリー、テーマトークン。
アーキテクチャ
コンポーネントの基盤
- プリミティブ - Base UI / Radix UI / React Aria(
components.jsonによる) - Tailwind CSS v4 - CSS ファーストの設定:
@import "tailwindcss"、@import "shadcn/tailwind.css"、@custom-variant dark、@theme inline - class-variance-authority - コンポーネントスタイルのバリアント管理
cnパッケージ - レジストリコンポーネントではimport { cn } from "cn"を使用(2026年9月、twMerge(clsx(...))のドロップイン置き換え);lib/utils.tsが再エクスポート;既存プロジェクトはshadcn migrate cnで移行
プロジェクト構成
SOLID アーキテクチャに従い、コンポーネントを @/modules/cores/shadcn/components/ui/ にインストールします。ユーティリティは @/modules/cores/lib/utils.ts(export { cn } from "cn")にあります。
MCP サーバー統合
bunx --bun shadcn@latest mcp init --client claude を実行するか、.mcp.json を作成して、shadcn レジストリと Claude Code を統合します。
利用可能な MCP ツール
mcp__shadcn__search_items_in_registries- 利用可能なコンポーネントを検索mcp__shadcn__view_items_in_registries- コンポーネントのソースコードを表示mcp__shadcn__get_item_examples_from_registries- 使用例を取得mcp__shadcn__get_add_command_for_items- インストールコマンドを取得
エージェント向けの CLI ヘルパー:shadcn info(フレームワーク、ベース、インストール済みコンポーネント)および shadcn docs <component> -b <base|radix|aria>。
セットアップの全手順については、installation.md を参照してください。
コンポーネントのカテゴリー
| カテゴリー | コンポーネント | 主なリファレンス |
|---|---|---|
| セットアップ | 初期化、設定、テーマ設定、アイコン | installation.md |
| フォーム | Button、Input、Field、Select、Checkbox、Switch、Slider | field-patterns.md |
| オーバーレイ | Dialog、Sheet、Drawer、Popover、Tooltip、HoverCard | dialog.md |
| フィードバック | Alert、Toast(Base UI)/ Sonner(Radix、Aria)、Progress、Skeleton、Spinner | toast.md |
| データ表示 | Table、Badge、Avatar、Calendar、Chart、Carousel | table.md |
| ナビゲーション | Breadcrumb、DropdownMenu、Command、Sidebar、Tabs | sidebar.md |
| レイアウト | Card、Accordion、Separator、ScrollArea、Resizable | card.md |
特に記載がない限り、コンポーネントのリファレンスには Radix API が記載されています。各リファレンスの先頭には Base UI との違いが記載されています。
ベストプラクティス
- Field コンポーネント -
Field+FieldLabel+FieldError errors={field.state.meta.errors} - クライアントコンポーネント - React アプリはデフォルトでクライアントサイドです(
"rsc": false) - ベースごとのトースト - Base UI では Base UI Toast、Radix/Aria では Sonner を使用します(Radix Toast は非推奨です)
- まず MCP ツールを使用 - 実装前に
mcp__shadcn__*を使って調べます - CSS 変数によるテーマ設定 -
src/index.cssの:root/.darkに OKLCH トークンを定義し、@theme inlineで公開します - アクセシビリティ - プリミティブのキーボードナビゲーションと ARIA を活用し、無効なコントロールでは
aria-invalidを維持します
リファレンスガイド
| 必要な内容 | リファレンス |
|---|---|
| 初期設定 | installation.md, configuration.md |
| フォームのパターン | field-patterns.md, form-examples.md |
| テーマのカスタマイズ | theming.md |
| データテーブル | table.md |
| モーダルダイアログ | dialog.md, alert-dialog.md |
| ナビゲーション | sidebar.md, navigation-menu.md |