shadcn/ui 06 レジストリ・MCP・AI 開発・実務の注意
更新日:
レジストリ(自分の部品を配布する仕組み)
shadcn の CLI は公式部品だけでなく、**誰でも作れる「レジストリ」**から部品を追加できる。
- 社内デザインシステムを配布(例: ジョブアンテナUI はこの仕組みで配布)
- コミュニティのレジストリ(Directory に登録されたもの)は CLI から直接使える
使う側
// components.json
{ "registries": { "@acme": "https://acme.com/r/{name}.json" } }npx shadcn@latest add @acme/hero
npx shadcn@latest search @acme
npx shadcn@latest view @acme/auth- 認証付きの非公開レジストリも設定可能(トークンは環境変数で)
作る側
registry.jsonに部品(registry-item)を定義(ファイル、依存、CSS 変数など)npx shadcn@latest buildで JSON を生成- 静的ホスティング(Cloudflare など)に置く
- 部品だけでなく、hooks・ページ・テーマ・ブロックも配布できる
- 「Open in v0」連携も可能
AI との連携(ここが今の shadcn の強み)
MCP サーバー
AI アシスタントがレジストリを閲覧・検索・インストールできる。
npx shadcn@latest mcp init --client claude # Claude Code
npx shadcn@latest mcp init --client cursor
npx shadcn@latest mcp init --client vscode
# Codex は ~/.codex/config.toml に手動で追記プロンプト例:
- 「shadcn レジストリの全コンポーネントを見せて」
- 「button・dialog・card を追加して」
- 「shadcn の部品で問い合わせフォームを作って」
- 「acme レジストリの部品でランディングページを作って」
Skills(Claude Code 等向けの知識パック)
npx skills add shadcn/ui- 毎回
shadcn info --jsonでプロジェクト設定(フレームワーク、Tailwind のバージョン、エイリアス、土台ライブラリ、アイコン、導入済み部品)を読み取り、正しい API で最初から書かせる - CLI・テーマ・レジストリ作成の知識を含む
- 例: 「メールとパスワードのログインフォームを追加して」「サイドバー・統計カード・データテーブルのダッシュボードを作って」
v0(Vercel)
v0 で生成した UI を shadcn の部品として取り込める。
実務の注意
部品の編集ルール
- 見た目の全体変更はトークン(CSS 変数)で。部品ファイルを直接いじるのは「このプロジェクト固有のバリエーションを足す時」
- 部品を大きく改造したら、その意図をコメントや DESIGN.md に残す(AI が勝手に戻さないように)
- 同じような部品を増やさない(
Buttonの variant を足す方が良い)
更新との付き合い方
- 自動更新されないのが前提。セキュリティや挙動の修正は土台ライブラリ(Base UI / Radix / React Aria)の更新で入る
- 見た目の最新版を取り込みたい時は
diff/viewで差分を見てから手で反映
AI に指示する時(CLAUDE.md / AGENTS.md に書く例)
## UI
- UI 部品は shadcn/ui(components/ui/)を使う。無ければ `npx shadcn@latest add` で追加。自作しない
- 色は globals.css のトークン(bg-primary, text-muted-foreground 等)のみ。カラーコード直書き禁止
- アイコンは lucide-react
- フォームは Field + React Hook Form + Zod。スキーマは lib/schemas.ts に置きサーバーと共有
- 主要ボタン(variant 既定)は1画面1つまでチェックリスト
-
components.jsonとglobals.cssをコミット - トークンでブランドカラー・角丸を設定済み、ダークモードで読めるか確認
- フォームはラベル・エラー表示・送信中表示・サーバー検証あり
- アイコンボタンに
aria-label、Dialog に Title - モバイルで Sheet / Drawer / Native Select が使いやすいか