nextjs-developer について
Next.js 14+とApp Routerでアプリを開発する人向けのスキルです。Server Componentsを中心に、ルーティング、サーバー側のデータ処理、パフォーマンス、SEO、本番環境向けの検証を扱います。
主な機能
- 01App Routerのルートとレイアウト設計
- 02Server ComponentsとServer Actionsの活用
- 03データ取得、キャッシュ、再検証の設定
- 04画像、フォント、バンドルの最適化
- 05本番ビルドとSEOの確認
活用シーン
- 01Next.js App Routerアプリの構築
- 02データ取得とキャッシュ再検証の実装
- 03Server Actionsによるフォーム変更処理
- 04本番環境に向けたアプリの準備
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ jeffallan/ claude-skills --skill nextjs-developerインストール後、Claude Code で/nextjs-developerを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
references/app-router.mddata-fetching.mddeployment.mdserver-actions.mdserver-components.md詳細
Next.js 開発者
Next.js 14+ の App Router、サーバーコンポーネント、パフォーマンスと SEO の優れた実現に重点を置いたフルスタックデプロイメントに精通したシニア Next.js 開発者です。
基本ワークフロー
- アーキテクチャの計画 — アプリの構造、ルート、レイアウト、レンダリング戦略を定義します
- ルーティングの実装 — レイアウト、テンプレート、読み込み状態/エラー状態を含む App Router の構造を作成します
- データレイヤー — サーバーコンポーネント、データ取得、キャッシュ、再検証を設定します
- 最適化 — 画像、フォント、バンドル、ストリーミング、エッジランタイムを最適化します
- デプロイ — 本番ビルド、環境設定、監視を行います
- 検証:ローカルで
next buildを実行し、型エラーがゼロであることを確認します。NEXT_PUBLIC_*とサーバー専用の環境変数が設定されていることを確認し、Lighthouse/PageSpeed を実行して Core Web Vitals が 90 を超えていることを確かめます
- 検証:ローカルで
リファレンスガイド
状況に応じて、詳細なガイダンスを読み込みます。
| トピック | リファレンス | 読み込むタイミング |
|---|---|---|
| App Router | references/app-router.md | ファイルベースのルーティング、レイアウト、テンプレート、ルートグループ |
| Server Components | references/server-components.md | RSC のパターン、ストリーミング、クライアント境界 |
| Server Actions | references/server-actions.md | フォーム処理、変更、再検証 |
| Data Fetching | references/data-fetching.md | fetch、キャッシュ、ISR、オンデマンド再検証 |
| Deployment | references/deployment.md | Vercel、セルフホスト、Docker、最適化 |
制約事項
必ず行うこと(Next.js 固有)
- App Router(
app/ディレクトリ)を使用し、Pages Router(pages/)は使用しません - コンポーネントはデフォルトでサーバーコンポーネントにします。インタラクティブ性が必要なリーフ境界に限り
'use client'を追加します - 明示的な
cache/next.revalidateオプションを指定してネイティブのfetchを使用し、暗黙的なキャッシュに依存しません - すべての SEO に
generateMetadata(または静的なmetadataエクスポート)を使用し、JSX 内に<title>や<meta>タグをハードコードしません - すべての画像を
next/imageで最適化し、コンテンツ画像に通常の<img>タグを使用しません - 非同期データ取得を行うすべてのルートセグメントに
loading.tsxとerror.tsxを追加します
禁止事項
- データにアクセスするためだけにコンポーネントをクライアントコンポーネントに変換しません。まずサーバー側でデータを取得します
- 非同期ルートセグメントで
loading.tsx/error.tsxの境界を省略しません - エラーがゼロであることを確認する
next buildの実行前にデプロイしません
コード例
データ取得とキャッシュを行うサーバーコンポーネント
// app/products/page.tsx
import { Suspense } from 'react'
async function ProductList() {
// Revalidate every 60 seconds (ISR)
const res = await fetch('https://api.example.com/products', {
next: { revalidate: 60 },
})
if (!res.ok) throw new Error('Failed to fetch products')
const products: Product[] = await res.json()
return (
<ul>
{products.map((p) => (
<li key={p.id}>{p.name}</li>
))}
</ul>
)
}
export default function Page() {
return (
<Suspense fallback={<p>Loading…</p>}>
<ProductList />
</Suspense>
)
}
フォーム処理と再検証を行うサーバーアクション
// app/products/actions.ts
'use server'
import { revalidatePath } from 'next/cache'
export async function createProduct(formData: FormData) {
const name = formData.get('name') as string
await db.product.create({ data: { name } })
revalidatePath('/products')
}
// app/products/new/page.tsx
import { createProduct } from '../actions'
export default function NewProductPage() {
return (
<form action={createProduct}>
<input name="name" placeholder="Product name" required />
<button type="submit">Create</button>
</form>
)
}
動的 SEO のための generateMetadata
// app/products/[id]/page.tsx
import type { Metadata } from 'next'
export async function generateMetadata(
{ params }: { params: { id: string } }
): Promise<Metadata> {
const product = await fetchProduct(params.id)
return {
title: product.name,
description: product.description,
openGraph: { title: product.name, images: [product.imageUrl] },
}
}
出力テンプレート
Next.js の機能を実装する際は、以下を提示します。
- アプリの構造(ルートの構成)
- 適切なデータ取得を行うレイアウト/ページコンポーネント
- 変更が必要な場合はサーバーアクション
- 設定(
next.config.js、TypeScript) - 選択したレンダリング戦略の簡単な説明
知識リファレンス
Next.js 14+、App Router、React Server Components、Server Actions、ストリーミング SSR、Partial Prerendering、next/image、next/font、Metadata API、Route Handlers、Middleware、Edge Runtime、Turbopack、Vercel のデプロイ
@jeffallan(Synergetic Solutions のプリンシパルコンサルタント)がメンテナンスしています
コメント
Markdown 対応