nextjs-shadcn
shadcn/ui を使用した Next.js フロントエンドを構築します。React の UI、コンポーネント、ページ、またはアプリケーションを shadcn・Tailwind・モダンなフロントエンドパターンで開発する際に使用します。ユーザーが新しい Next.js プロジェクトの作成、UI コンポーネントの追加、ページのスタイリング、あるいは任意の Web インターフェースの構築を求めた場合にも、shadcn に言及がなくても自動的に活用されます。
description の原文を見る
Creates Next.js frontends with shadcn/ui. Use when building React UIs, components, pages, or applications with shadcn, Tailwind, or modern frontend patterns. Also use when the user asks to create a new Next.js project, add UI components, style pages, or build any web interface — even if they don't mention shadcn explicitly.
SKILL.md 本文
Next.js + shadcn/ui
ジェネリックな「AI slop」美学を避けた、独特で本番環境対応のインターフェースを構築します。
コア原則
- ノイズを最小化 - アイコンが情報を伝える。余分なラベルは不要
- ジェネリックな AI UI を避ける - 紫色グラデーション、過剰なシャドウ、予測可能なレイアウトは避ける
- 装飾よりコンテキスト - すべての要素が目的を持つ
- テーマ一貫性 -
globals.cssの CSS 変数を使用し、カラーコードをハードコーディングしない
クイックスタート
bunx --bun shadcn@latest init -t next
カスタムデザインシステムの場合、shadcn/create でプリセットコードを生成して適用します:
bunx --bun shadcn@latest init --preset <CODE> --template next
コンポーネントルール
ページ構造
// page.tsx - コンテンツのみ、レイアウトクロームなし
export default function Page() {
return (
<>
<HeroSection />
<Features />
<Testimonials />
</>
);
}
// layout.tsx - 共有 UI (ヘッダー、フッター、サイドバー)
export default function Layout({ children }: { children: React.ReactNode }) {
return (
<>
<Header />
<main>{children}</main>
<Footer />
</>
);
}
クライアント境界
"use client"はリーフコンポーネント (最小の境界) のみで使用- Props はシリアライズ可能である必要があります (データまたは Server Actions、関数/クラスは不可)
- サーバーコンテンツは
childrenで渡す
インポートエイリアス
相対パス (../../lib/utils) の代わりに、常に @/ エイリアス (例: @/lib/utils) を使用してください。
スタイルマージ
import { cn } from "@/lib/utils";
function Button({ className, ...props }) {
return <button className={cn("px-4 py-2 rounded", className)} {...props} />;
}
ファイル構成
app/
├── (protected)/ # 認証が必要なルート
│ ├── dashboard/
│ ├── settings/
│ ├── components/ # ルート固有のコンポーネント
│ └── lib/ # ルート固有のユーティリティ/型
├── (public)/ # 公開ルート
│ ├── login/
│ └── register/
├── actions/ # Server Actions (グローバル)
├── api/ # API ルート
├── layout.tsx # ルートレイアウト
└── globals.css # テーマトークン
components/ # 共有コンポーネント
├── ui/ # shadcn プリミティブ
└── shared/ # ビジネスコンポーネント
hooks/ # カスタム React Hook
lib/ # 共有ユーティリティ
data/ # データベースクエリ
ai/ # AI ロジック (ツール、エージェント、プロンプト)
Next.js 16 機能
非同期 Params
export default async function Page({
params,
searchParams,
}: {
params: Promise<{ id: string }>;
searchParams: Promise<{ q?: string }>;
}) {
const { id } = await params;
const { q } = await searchParams;
}
データ取得 vs Server Actions
重要なルール:
- Server Actions = ミューテーション専用 (作成、更新、削除)
- データ取得 = Server Components または
'use cache'関数内で実行
// ❌ 間違い: データ取得に Server Action を使用
"use server"
export async function getUsers() {
return await db.users.findMany()
}
// ✅ 正解: キャッシング付きデータ関数
// data/users.ts
export async function getUsers() {
"use cache"
cacheTag("users")
cacheLife("hours")
return await db.users.findMany()
}
// ✅ 正解: Server Component で直接クッキーを読む
export default async function Page() {
const theme = (await cookies()).get("theme")?.value ?? "light"
return <App theme={theme} />
}
キャッシング
"use cache";
import { cacheTag, cacheLife } from "next/cache";
export async function getProducts() {
cacheTag("products");
cacheLife("hours");
return await db.products.findMany();
}
Server Actions (ミューテーション専用)
"use server";
import { updateTag, revalidateTag } from "next/cache";
import { z } from "zod";
const schema = z.object({
title: z.string().min(1),
content: z.string(),
});
export async function createPost(formData: FormData) {
// 常に入力を検証
const parsed = schema.parse({
title: formData.get("title"),
content: formData.get("content"),
});
await db.insert(posts).values(parsed);
updateTag("posts"); // Read-your-writes
}
Proxy API
リクエストインターセプション (ミドルウェアの代替) に proxy.ts を使用します。プロジェクトルートに配置:
// proxy.ts (プロジェクトルート、app/ と同じレベル)
import { NextResponse } from "next/server"
import type { NextRequest } from "next/server"
export function proxy(request: NextRequest) {
// 認証チェック、リダイレクトなど
}
export const config = {
matcher: ['/dashboard/:path*'],
}
開発ツール (next-devtools-mcp)
Next.js 16+ は /_next/mcp に MCP エンドポイントを搭載しており、dev サーバーの内部を coding agents に公開します。Next.js 16 プロジェクトで作業する場合、ユーザーに .mcp.json に next-devtools-mcp を追加することをお勧めします:
{
"mcpServers": {
"next-devtools": {
"command": "npx",
"args": ["-y", "next-devtools-mcp@latest"]
}
}
}
それが提供するツール (dev サーバーが実行中):
get_errors— ライブビルド/ランタイム/型エラー (ハイドレーションミスマッチ特に有用)get_logs— dev ログファイルパス (ブラウザコンソール + サーバー出力)get_routes— ルータータイプ別グループ化された全エントリーポイントルートget_page_metadata— 特定ページのルート、コンポーネント、レンダリング詳細get_project_metadata— プロジェクト構造 + dev サーバー URLget_server_action_by_id— ハッシュ化された ID から Server Action ソースを特定
ユーザーにエラーメッセージをコピー&ペーストさせる代わりにこれらを使用してください。参照: nextjs.org/docs/app/guides/mcp
リファレンス
- アーキテクチャ:
references/architecture.md- コンポーネント、ルーティング、Suspense、データパターン、AI ディレクトリ構造 - スタイリング:
references/styling.md- テーマ、フォント、radius、アニメーション、CSS 変数 - サイドバー:
references/sidebar.md- shadcn サイドバーとネストされたレイアウト - プロジェクトセットアップ:
references/project-setup.md- bun コマンド、プリセット - shadcn/ui: llms.txt - 公式 AI 最適化リファレンス
パッケージマネージャー
常に bun を使用してください。npm や npx は使わないでください:
bun install(npm install ではなく)bun add(npm install package ではなく)bunx --bun(npx ではなく)
ライセンス: MIT(寛容ライセンスのため全文を引用しています) · 原本リポジトリ
詳細情報
- 作者
- laguagu
- ライセンス
- MIT
- 最終更新
- 不明
Source: https://github.com/laguagu/claude-code-nextjs-skills / ライセンス: MIT
関連スキル
doubt-driven-development
重要な判断はすべて、本番環境への展開前に新しい視点から対抗的レビューを実施します。速度より正確性が重要な場合、不慣れなコードを扱う場合、本番環境・セキュリティに関わるロジック・取り消し不可の操作など影響度が高い場合、または後でバグを修正するよりも今検証する方が効率的な場合に活用してください。
apprun-skills
TypeScriptを使用したAppRunアプリケーションのMVU設計に関する総合的なガイダンスが得られます。コンポーネントパターン、イベントハンドリング、状態管理(非同期ジェネレータを含む)、パラメータと保護機能を備えたルーティング・ナビゲーション、vistestを使用したテストに対応しています。AppRunコンポーネントの設計・レビュー、ルートの配線、状態フローの管理、AppRunテストの作成時に活用してください。
desloppify
コードベースのヘルスチェックと技術負債の追跡ツールです。コード品質、技術負債、デッドコード、大規模ファイル、ゴッドクラス、重複関数、コードスメル、命名規則の問題、インポートサイクル、結合度の問題についてユーザーが質問した場合に使用してください。また、ヘルススコアの確認、次の改善項目の提案、クリーンアップ計画の作成をリクエストされた際にも対応します。29言語に対応しています。
debugging-and-error-recovery
テストが失敗したり、ビルドが壊れたり、動作が期待と異なったり、予期しないエラーが発生したりした場合に、体系的な根本原因デバッグをガイドします。推測ではなく、根本原因を見つけて修正するための体系的なアプローチが必要な場合に使用してください。
test-driven-development
テスト駆動開発により実装を進めます。ロジックの実装、バグの修正、動作の変更など、あらゆる場面で活用できます。コードが正常に動作することを証明する必要がある場合、バグ報告を受けた場合、既存機能を修正する予定がある場合に使用してください。
incremental-implementation
変更を段階的に実施します。複数のファイルに影響する機能や変更を実装する場合に使用してください。大量のコードを一度に書こうとしている場合や、タスクが一度では完結できないほど大きい場合に活用します。