skills/lvncer/ai-configs/nextjs-best-practice

nextjs-best-practice

SKILL.md

Next.js Best Practice

ディレクトリ構造

src/
├── app/ # Next.js App Router - ルーティングとページ
├── components/
│ ├── ui/      # Shadcn/ui コンポーネント - 再利用可能な UI プリミティブ
│ └── layouts/ # 一貫したページ構造のためのレイアウトコンポーネント
├── hooks/     # 共有ロジックのためのカスタム React フック
├── types/     # TypeScript 型定義
├── lib/
│ ├── constants/ # アプリケーション定数と設定
│ ├── utils/     # ユーティリティ関数とヘルパー
│ ├── actions/   # Server Actions(サーバーサイドのミューテーション)
│ └── services/  # ドメインサービス(ビジネスロジック、外部API呼び出し等)
└── tests/
├── unit/        # 個別の関数/コンポーネントのユニットテスト
├── integration/ # コンポーネント相互作用の統合テスト
└── e2e/         # 完全なユーザーフローのエンドツーエンドテスト

ファイル命名規則

  • Pages: page.tsx - Next.js App Router のページコンポーネント
  • Layouts: layout.tsx - ルートグループの共有レイアウトコンポーネント
  • Loading: loading.tsx - ルートセグメントのローディング UI
  • Errors: error.tsx - ルートセグメントのエラー境界コンポーネント
  • APIs: route.ts - サーバーエンドポイントの API ルートハンドラー

コンポーネント設計原則

  • Server Components (デフォルト): データフェッチ、SEO 最適化、静的コンテンツのレンダリングに使用
  • Client Components (必要な場合): ブラウザ API、イベントリスナー、または React フックが必要な場合のみ使用
  • 継承よりもコンポジション: 小さな焦点を絞ったコンポーネントを組み合わせて複雑な UI を構築

API 設計パターン

  • GET API なし: API ルートの代わりに Server Components を使用してデータフェッチ
  • Server Actions を優先: フォーム送信とミューテーションには Server Actions を使用
  • 外部統合用の API ルート: ウェブフックとサードパーティ統合にのみ POST/PATCH/PUT/DELETE を使用
  • 型安全性: リクエスト/レスポンス検証には常に Zod スキーマを使用

Server Actions の配置方針

  • 共有/ドメイン横断的な Server Actions は lib/actions/ に配置する
  • ルート専用の小さな Server Actions は、必要に応じて該当ルート直下(例: app/(group)/feature/actions.ts)に置いてもよい
  • ファイル命名は動詞ベースで、1 ファイル = 1 概念(例: user.ts, post.ts)を原則とし、index.ts で再エクスポートを許容

hooks / services / actions の使い分け

  • hooks(クライアント専用): React の状態・副作用・UI 連携に関するロジック。ブラウザ API、イベントハンドリング、フォーム状態など UI 寄りの責務
  • services(サーバー/クライアント共有可): ビジネスロジック、外部 API 呼び出し、プリミティブの組み合わせなどを純粋関数中心で実装。副作用は抽象化しテスト容易性を最優先
  • actions(サーバー専用): フォーム送信やミューテーションの入口。認証/認可、入力検証(Zod)、トランザクション制御、services のオーケストレーションを担当

ガイドライン:

  • hooks は UI から actions を呼び出すための薄い橋渡しに留める
  • ビジネスルールは可能な限り services に集約し、actions は I/O とオーケストレーションに専念
  • services は副作用境界を明確化し、テストではモックで置き換え可能にする
Weekly Installs
7
First Seen
Mar 1, 2026
Installed on
cline7
gemini-cli7
github-copilot7
codex7
kimi-cli7
cursor7