Communitygithub.com

shadcn/ui コンポーネント統合

shadcn/uiコンポーネントを使用したアプリケーションの統合と構築に関する専門的なガイダンス。コンポーネントの発見、インストール、カスタマイズ、ベストプラクティスを提供します。

ui コンポーネント統合 とは?

このスキルは、shadcn/ui(Radix UIまたはBase UIとTailwind CSS上に構築された、美しくデザインされたアクセシブルでカスタマイズ可能なコンポーネントのコレクション)を使用してアプリケーションを構築するための専門知識を提供します。開発者はコンポーネントの発見、インストール(CLIコマンド`npx shadcn@latest add`を使用した直接インストールまたは手動統合)、テーマのカスタマイズ、`class-variance-authority`を使用したバリアントの定義、コンポーネントの拡張方法を学べます。このスキルはshadcn MCPツールを活用してコンポーネントカタログやカスタムレジストリを参照し、利用可能なブロックを一覧表示し、アクセシビリティとベストプラクティスを確保します。Claude Code、Cursor、CodexなどのAIエージェントプラットフォームと連携し、React 18+、Tailwind CSS 3.0+、Radix UIまたはBase UIを前提としています。フォーム構築、ダイアログ/モーダル、データ表示、トラブルシューティングのヒントを含む一般的なパターンもカバーされており、効率的で高品質なUI開発を支援します。

対応~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/Anand-4-6/skills/tree/HEAD/personal/shadcn-ui

お気に入りのAIに質問する

このエージェントスキルを事前に読み込んだ状態で新しいチャットを開きます。

ドキュメント

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でプロパティ、依存関係、使用方法を理解
  • コンポーネントデモの表示: get_component_demoで実装例を確認

2. コンポーネントのインストール

コンポーネントを追加するには2つのアプローチがあります:

A. 直接インストール(推奨)

npx shadcn@latest add [コンポーネント名]

このコマンドは:

  • コンポーネントのソースコードをダウンロード(設定に応じてRadixとBase UIを適応)
  • 必要な依存関係をインストール
  • ファイルをcomponents/ui/に配置
  • components.json設定を更新

B. 手動統合

  1. get_componentでソースコードを取得
  2. components/ui/[コンポーネント名].tsxにファイルを作成
  3. ピア依存関係を手動でインストール
  4. 必要に応じてインポートを調整

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 (classic) または 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+)
  • プリミティブ: 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設定とCSS変数をapp/globals.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ブロック(認証フォーム、ダッシュボードなど)を提供します:

  1. 利用可能なブロックの一覧表示: list_blocksをオプションのカテゴリフィルターとともに使用
  2. ブロックソースの取得: get_blockをブロック名とともに使用
  3. ブロックのインストール: 多くのブロックには複数のコンポーネントファイルが含まれます

ブロックはカテゴリ別に整理されています:

  • 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経由でコンポーネントインストールを実行し、依存関係を自動インストール
  • package.jsonで必要なRadix UIパッケージを手動で確認
  • get_component_metadataで依存関係リストを確認

バージョン互換性

  • shadcn/ui v4ではReact 18+およびNext.js 13+(Next.js使用時)が必要
  • 一部のコンポーネントは特定のRadix UIバージョンが必要
  • バージョン間の破壊的変更についてはドキュメントを確認

検証と品質

コンポーネントをコミットする前に:

  1. 型チェック: tsc --noEmitを実行してTypeScriptを検証
  2. リント: リントを実行してスタイルの問題を検出
  3. アクセシビリティテスト: axe DevToolsなどのツールを使用
  4. ビジュアルQA: ライトモードとダークモードでテスト
  5. レスポンシブチェック: 異なるブレークポイントでの動作を確認

リソース

詳細なガイダンスについては、次のリソースファイルを参照してください:

  • resources/setup-guide.md - ステップバイステップのプロジェクト初期化
  • resources/component-catalog.md - 完全なコンポーネントリファレンス
  • resources/customization-guide.md - テーマとバリアントパターン
  • resources/migration-guide.md - 他のUIライブラリからのアップグレード

例

examples/ディレクトリを参照してください:

  • 完全なコンポーネント実装
  • バリデーション付きフォームパターン
  • ダッシュボードレイアウト
  • 認証フロー
  • データテーブル実装

関連スキル