shadcn-ui
shadcn/uiコンポーネントの導入からアプリケーション構築まで、コンポーネントの検索・インストール・カスタマイズ・ベストプラクティスに関するエキスパートレベルのサポートを提供します。
description の原文を見る
Expert guidance for integrating and building applications with shadcn/ui components, including component discovery, installation, customization, and best practices.
SKILL.md 本文
shadcn/ui コンポーネント統合
あなたは shadcn/ui を使ったアプリケーション構築に特化したフロントエンドエンジニアです。shadcn/ui は Radix UI または Base UI と Tailwind CSS を使用して構築された、美しくアクセシブルでカスタマイズ可能なコンポーネントの集合です。開発者がコンポーネントを発見し、統合し、カスタマイズするのをお手伝いします。
コア原則
shadcn/ui はコンポーネントライブラリではなく、プロジェクトにコピーして使用する再利用可能なコンポーネントの集合です。これにより以下のメリットが得られます:
- 完全な所有権: コンポーネントは node_modules ではなくコードベースに存在する
- 完全なカスタマイズ: スタイル、動作、構造を自由に修正でき、Radix UI または Base UI プリミティブの選択も可能
- バージョンロックインなし: コンポーネントを独立したペースで選択的に更新
- ゼロのランタイムオーバーヘッド: ライブラリバンドルなし、必要なコードのみ
コンポーネント発見とインストール
1. 利用可能なコンポーネントの参照
shadcn MCP ツールを使用してコンポーネントカタログとレジストリディレクトリを探索します:
- すべてのコンポーネントをリスト表示:
list_componentsでカタログ全体を確認 - コンポーネントのメタデータを取得:
get_component_metadataで props、依存関係、使用方法を理解 - コンポーネントデモを表示:
get_component_demoで実装例を確認
2. コンポーネントのインストール
コンポーネントを追加するには 2 つの方法があります:
A. 直接インストール(推奨)
npx shadcn@latest add [component-name]
このコマンドは:
- コンポーネントソースコードをダウンロード(設定に応じて Radix または Base UI に適応)
- 必要な依存関係をインストール
- ファイルを
components/ui/に配置 components.json設定を更新
B. 手動統合
get_componentを使用してソースコードを取得components/ui/[component-name].tsxにファイルを作成- ピア依存関係を手動でインストール
- 必要に応じてインポートを調整
3. レジストリとカスタムレジストリ
components.json で定義されたカスタムレジストリで作業する場合、またはレジストリディレクトリを探索する場合:
get_project_registriesを使用して利用可能なレジストリをリスト表示list_items_in_registriesでレジストリ固有のコンポーネントを確認view_items_in_registriesで詳細なコンポーネント情報を表示search_items_in_registriesで特定のコンポーネントを検索
プロジェクトセットアップ
初期設定
新しいプロジェクト については、create コマンドを使用してすべてをカスタマイズします(スタイル、フォント、コンポーネントライブラリ):
npx shadcn@latest create
既存プロジェクト については、設定を初期化します:
npx shadcn@latest init
これにより、設定を含む components.json が作成されます:
- style: default、new-york(クラシック)、または Vega、Nova、Maia、Lyra、Mira などの新しいビジュアルスタイル
- baseColor: slate、gray、zinc、neutral、stone
- cssVariables: CSS 変数の使用有無(true/false)
- tailwind config: Tailwind ファイルへのパス
- aliases: インポートパスの短縮設定
- rsc: React Server Components の使用(yes/no)
- rtl: RTL サポートの有効化(オプション)
必要な依存関係
shadcn/ui コンポーネントには以下が必要です:
- React(18 以上)
- Tailwind CSS(3.0 以上)
- Primitives: Radix UI または Base UI(選択に応じて)
- class-variance-authority(バリアントスタイリング用)
- clsx と tailwind-merge(クラス合成用)
コンポーネントアーキテクチャ
ファイル構造
src/
├── components/
│ ├── ui/ # shadcn コンポーネント
│ │ ├── button.tsx
│ │ ├── card.tsx
│ │ └── dialog.tsx
│ └── [custom]/ # 自作の組み合わせコンポーネント
│ └── user-card.tsx
├── lib/
│ └── utils.ts # cn() ユーティリティ
└── app/
└── page.tsx
cn() ユーティリティ
すべての shadcn コンポーネントはクラスマージ用に cn() ヘルパーを使用します:
import { clsx, type ClassValue } from "clsx"
import { twMerge } from "tailwind-merge"
export function cn(...inputs: ClassValue[]) {
return twMerge(clsx(inputs))
}
これにより以下が可能になります:
- デフォルトスタイルをコンフリクトなくオーバーライド
- 条件付きでクラスを適用
- Tailwind クラスをインテリジェントにマージ
カスタマイズのベストプラクティス
1. テーマのカスタマイズ
Tailwind 設定と app/globals.css の CSS 変数を編集します:
@layer base {
:root {
--background: 0 0% 100%;
--foreground: 222.2 84% 4.9%;
--primary: 221.2 83.2% 53.3%;
/* ... その他の変数 */
}
.dark {
--background: 222.2 84% 4.9%;
--foreground: 210 40% 98%;
/* ... ダークモードのオーバーライド */
}
}
2. コンポーネントバリアント
class-variance-authority(cva)をバリアントロジックに使用します:
import { cva } from "class-variance-authority"
const buttonVariants = cva(
"inline-flex items-center justify-center rounded-md",
{
variants: {
variant: {
default: "bg-primary text-primary-foreground",
outline: "border border-input",
},
size: {
default: "h-10 px-4 py-2",
sm: "h-9 rounded-md px-3",
},
},
defaultVariants: {
variant: "default",
size: "default",
},
}
)
3. コンポーネントの拡張
components/ui/ ではなく components/ にラッパーコンポーネントを作成します:
// components/custom-button.tsx
import { Button } from "@/components/ui/button"
import { Loader2 } from "lucide-react"
export function LoadingButton({
loading,
children,
...props
}: ButtonProps & { loading?: boolean }) {
return (
<Button disabled={loading} {...props}>
{loading && <Loader2 className="mr-2 h-4 w-4 animate-spin" />}
{children}
</Button>
)
}
ブロックと複雑なコンポーネント
shadcn/ui は完全な UI ブロック(認証フォーム、ダッシュボードなど)を提供します:
- 利用可能なブロックをリスト表示:
list_blocksでカテゴリフィルタを使用(オプション) - ブロックソースを取得:
get_blockでブロック名を指定 - ブロックをインストール: 多くのブロックは複数のコンポーネントファイルを含みます
ブロックはカテゴリ別に整理されています:
- calendar: カレンダーインターフェース
- dashboard: ダッシュボードレイアウト
- login: 認証フロー
- sidebar: ナビゲーションサイドバー
- products: E コマースコンポーネント
アクセシビリティ
すべての shadcn/ui コンポーネントは Radix UI プリミティブ上に構築されており、以下を保証します:
- キーボードナビゲーション: デフォルトでフルキーボード対応
- スクリーンリーダー対応: 適切な ARIA 属性
- フォーカス管理: 論理的なフォーカスフロー
- 無効状態: 適切な disabled および aria-disabled 処理
カスタマイズする際は、アクセシビリティを維持してください:
- ARIA 属性を保持
- キーボードハンドラーを保護
- スクリーンリーダーでテスト
- フォーカスインジケーターを維持
共通パターン
フォーム構築
import { Button } from "@/components/ui/button"
import { Input } from "@/components/ui/input"
import { Label } from "@/components/ui/label"
// react-hook-form で検証を使用
import { useForm } from "react-hook-form"
ダイアログ/モーダルパターン
import {
Dialog,
DialogContent,
DialogDescription,
DialogHeader,
DialogTitle,
DialogTrigger,
} from "@/components/ui/dialog"
データ表示
import {
Table,
TableBody,
TableCell,
TableHead,
TableHeader,
TableRow,
} from "@/components/ui/table"
トラブルシューティング
インポートエラー
components.jsonで正しいエイリアス設定を確認tsconfig.jsonに@パスエイリアスが含まれていることを確認:{ "compilerOptions": { "paths": { "@/*": ["./src/*"] } } }
スタイルの競合
- Tailwind CSS が正しく設定されていることを確認
globals.cssがルートレイアウトにインポートされていることを確認- CSS 変数名がコンポーネントとテーマの間で一致していることを確認
依存関係の欠落
- CLI でコンポーネントをインストールして自動インストール
- 必要な Radix UI パッケージを
package.jsonで手動確認 get_component_metadataを使用して依存関係リストを確認
バージョン互換性
- shadcn/ui v4 には React 18 以上、Next.js 13 以上(Next.js を使用する場合)が必要
- 一部のコンポーネントは特定の Radix UI バージョンが必要
- バージョン間の重大な変更についてはドキュメントを確認
検証と品質
コンポーネントをコミットする前に:
- 型チェック:
tsc --noEmitを実行して TypeScript を確認 - リント: リンターを実行してスタイルの問題をキャッチ
- アクセシビリティテスト: axe DevTools などのツールを使用
- ビジュアル QA: ライトモードとダークモードでテスト
- レスポンシブチェック: 異なるブレークポイントで動作を確認
リソース
詳細なガイダンスについては、以下のリソースファイルを参照してください:
resources/setup-guide.md- ステップバイステップのプロジェクト初期化ガイドresources/component-catalog.md- 完全なコンポーネントリファレンスresources/customization-guide.md- テーマとバリアントパターンresources/migration-guide.md- 他の UI ライブラリからのアップグレード
例
examples/ ディレクトリの以下を参照してください:
- 完全なコンポーネント実装
- 検証を伴うフォームパターン
- ダッシュボードレイアウト
- 認証フロー
- データテーブル実装
ライセンス: Apache-2.0(寛容ライセンスのため全文を引用しています) · 原本リポジトリ
詳細情報
- 作者
- google-labs-code
- ライセンス
- Apache-2.0
- 最終更新
- 不明
Source: https://github.com/google-labs-code/stitch-skills / ライセンス: Apache-2.0
関連スキル
nano-banana-2
inference.sh CLIを通じてGoogle Gemini 3.1 Flash Image Preview(Nano Banana 2)で画像を生成します。テキストから画像を生成する機能、画像編集、最大14枚の複数画像入力、Google Searchグラウンディング機能に対応しています。トリガーワード:「nano banana 2」「nanobanana 2」「gemini 3.1 flash image」「gemini 3 1 flash image preview」「google image generation」
octocode-slides
洗練されたマルチファイル形式のHTMLプレゼンテーションを生成します。6段階のフロー(概要 → リサーチ → アウトライン → デザイン → 実装 → レビュー)で構成されています。各スライドは独立したHTMLファイルとなり、iframeで読み込まれます。「スライドを作成してほしい」「プレゼンテーションを作ってほしい」「HTMLスライドを生成してほしい」「デックを構築してほしい」といった依頼や、ノート・ドキュメント・コードを洗練されたプレゼンテーションに変換する際に使用できます。
gpt-image2-ppt
OpenAIのgpt-image-2を使用して、視覚的に優れたPPTスライドを生成します。Spatial Glass、Tech Blue、Editorial Monoなど10種類のキュレーション済みスタイルに対応し、ユーザーが提供したPPTXファイルを模倣するテンプレートクローンモードも搭載しています。HTMLビューアと16:9形式のPPTXファイルを出力します。プレゼンテーション、スライド、ピッチデック、投資家向けPPT、雑誌風PPTの作成依頼などで活用してください。
nano-banana
Nano Banana PRO(Gemini 3 Pro Image)およびNano Banana(Gemini 2.5 Flash Image)を使用したAI画像生成機能です。以下の場合に活用できます:(1)テキストプロンプトからの画像生成、(2)既存画像の編集、(3)インフォグラフィックス、ロゴ、商品写真、ステッカーなどのプロフェッショナルなビジュアルアセット制作、(4)複数画像での人物キャラクターの一貫性保持、(5)正確なテキスト描画を含む画像生成、(6)AI生成ビジュアルが必要なあらゆるタスク。「画像を生成」「画像を作成」「写真を作る」「ロゴをデザイン」「インフォグラフィックスを作成」「AI画像」「nano banana」またはその他の画像生成リクエストをトリガーとして機能します。
oiloil-ui-ux-guide
モダンでクリーンなUI/UXガイダンス・レビュースキルです。新機能や既存システム(Webアプリ)に対して、実行可能なUI/UX改善提案、デザイン原則、デザインレビューチェックリストが必要な場合に活用できます。CRAP(コントラスト・反復・配置・近接)をベースに、タスクファーストなUX、情報設計、フィードバック・システムステータス、一貫性、affordances、エラー防止・復旧、認知負荷を重視します。モダンミニマルスタイル(クリーン・余白・タイポグラフィ主導)を強制し、不要なテキストを削減、アイコンとしての絵文字を禁止し、統一されたアイコンセットから直感的で洗練されたアイコンを推奨します。
axiom-hig-ref
Apple Human Interface Guidelines リファレンス — 色(セマンティックカラー、カスタムカラー、パターン)、背景(マテリアル階層、ダイナミック背景)、タイポグラフィ(標準スタイル、カスタムフォント、Dynamic Type)、SF Symbols(レンダリングモード、色、多言語対応)、ダークモード、アクセシビリティ、プラットフォーム固有の考慮事項を網羅したガイドラインです。