32blogby StudioMitsu
claude-code12 min read

Claude Code × Next.js 初期構築を完全自動化する

Next.js + TypeScript + Tailwind + shadcn/ui の初期構築をClaude Codeに任せる手順を解説。CLAUDE.mdの書き方からhooks・カスタムコマンドまで実務で使える設定を公開。

claude-codenext-js自動化TypeScriptApp Router
目次

Claude Code に「Next.js プロジェクト作って」と頼んだら、TypeScript の設定がゆるゆるで型エラーを出しまくるコードが生成された。僕が何度も試行錯誤しながら、CLAUDE.md に何を書けば意図通りに動くかを探り続けた記録だ。

「AI に任せたら雑なコードが出てきた」という経験は、指示の精度を上げることで解決できる。この記事では、CLAUDE.md の書き方から始まり、create-next-app の自動セットアップ、カスタムコマンド、pre-commit hook の設定、Vercel デプロイまでを1セッションで完走させる手順を紹介する。

Claude Code に Next.js 初期構築を任せると何が変わる?

手作業でやっていた Next.js の初期構築をざっと挙げると、こうなる。

  • create-next-app の実行と選択肢の入力
  • TypeScript の strict 設定
  • Tailwind のインストールと設定ファイルの調整
  • shadcn/ui の初期化
  • ESLint / Prettier の設定
  • .gitignore の整備
  • src/ ディレクトリ構成の整理

これらを毎回手作業でやるのは30〜60分かかる。Claude Code に任せると5〜10分で終わる。

ただし注意点がある。Claude Code は指示された通りにしか動かない。「なんとなくいい感じに」は通じない。どんな設定にしたいかを明確に言語化してから渡す必要がある。それを担うのが CLAUDE.md だ。

CLAUDE.md には最低限何を書けばいい?

プロジェクトルートに置く CLAUDE.md は、Claude Code がそのプロジェクトを理解するための設計書だ。最小限の構成はこれだ。

markdown
# プロジェクト名

## 技術スタック
- Next.js 15+ (App Router)
- TypeScript (strict: true)
- Tailwind CSS v4
- shadcn/ui
- ESLint + Prettier

## ディレクトリ構成
- `src/app/` — App Router のルート
- `src/components/` — UIコンポーネント
- `src/lib/` — ユーティリティ関数
- `src/types/` — 型定義

## コーディングルール
- コンポーネントは必ず TypeScript で書く
- `any` 型は使用禁止
- `interface` より `type` を優先
- Server Component をデフォルトとし、必要な場合のみ `"use client"` を付ける

## 禁止事項
- `src/` 外にコードを置かない
- CSS in JS の使用禁止(Tailwind を使う)
- `console.log` をそのままコミットしない

この程度でも、生成されるコードの品質が大きく変わる。特に「禁止事項」のセクションは重要で、明示しない限り Claude Code はゆるい設定でコードを書く。

create-next-app から shadcn/ui まで一気に自動セットアップするには?

CLAUDE.md が用意できたら、Claude Code に次のように指示する。

新規 Next.js プロジェクトを作成してください。
- プロジェクト名: my-app
- CLAUDE.md の技術スタックに従って設定してください
- create-next-app を実行し、その後 shadcn/ui の初期化まで完了させてください

Claude Code が実行するコマンドは以下のようになる。

bash
npx create-next-app@latest my-app \
  --typescript \
  --tailwind \
  --eslint \
  --app \
  --src-dir \
  --import-alias "@/*"

ここで重要なのは、create-next-app の選択肢をフラグで明示的に指定させることだ。対話形式で進めると Claude Code が途中で詰まることがある。

セットアップ後、TypeScript の設定を厳格にする。

json
// tsconfig.json
{
  "compilerOptions": {
    "strict": true,
    "noUncheckedIndexedAccess": true,
    "exactOptionalPropertyTypes": true
  }
}

shadcn/ui・Tailwind v4・ESLint の設定を自動化するには?

shadcn/ui の初期化

bash
npx shadcn@latest init

Claude Code に指示するとき、コンポーネントのスタイルとベースカラーを CLAUDE.md に書いておくと迷わない。

markdown
## shadcn/ui 設定
- style: default
- base color: slate
- CSS variables: 使用する

Tailwind CSS v4 の設定

v4 は設定ファイルの書き方が v3 と異なる。tailwind.config.ts ではなく、CSS ファイルに直接設定を書く方式になっている。

css
/* src/app/globals.css */
@import "tailwindcss";

@theme {
  --color-primary: oklch(0.5 0.2 250);
  --font-sans: "Inter", sans-serif;
}

Claude Code に v4 の記法で書くよう CLAUDE.md に明記しておかないと、v3 の設定ファイルを生成することがある。

markdown
## Tailwind CSS
- バージョン: v4
- 設定は globals.css の @theme に書く
- tailwind.config.ts は作成しない

ESLint の設定

javascript
// eslint.config.mjs
import { dirname } from "path";
import { fileURLToPath } from "url";
import { FlatCompat } from "@eslint/eslintrc";

const __filename = fileURLToPath(import.meta.url);
const __dirname = dirname(__filename);

const compat = new FlatCompat({ baseDirectory: __dirname });

export default [
  ...compat.extends("next/core-web-vitals", "next/typescript"),
  {
    rules: {
      "@typescript-eslint/no-explicit-any": "error",
      "@typescript-eslint/no-unused-vars": "error",
    },
  },
];

繰り返し作業をカスタムスラッシュコマンドで自動化するには?

Claude Code はカスタムのスラッシュコマンドをサポートしている。.claude/commands/ ディレクトリにマークダウンファイルを置くだけで使えるようになる。

コンポーネント生成コマンド

markdown
<!-- .claude/commands/component.md -->
# コンポーネント生成

$ARGUMENTS で指定されたコンポーネントを以下のルールで生成してください:
- ファイル: `src/components/$ARGUMENTS.tsx`
- TypeScript で書く
- shadcn/ui のスタイルに合わせる
- Props の型定義を必ず含める
- Storybook のストーリーファイル(.stories.tsx)も同時に生成する

使い方は Claude Code のチャットで /component Button と入力するだけだ。

ページ生成コマンド

markdown
<!-- .claude/commands/page.md -->
# ページ生成

$ARGUMENTS のページを App Router の規約に従って生成してください:
- `src/app/$ARGUMENTS/page.tsx` を作成
- Server Component として実装
- メタデータ(metadata export)を含める
- ローディング UI(loading.tsx)も生成する

よく使うパターンをコマンド化しておくと、毎回同じ指示を書かずに済む。

pre-commit hook とフォーマットはどう自動化する?

コードの品質を保つために、コミット前に自動チェックを走らせる。

Husky + lint-staged の設定

bash
npm install -D husky lint-staged
npx husky init

.husky/pre-commit を設定する。

bash
#!/usr/bin/env sh
. "$(dirname -- "$0")/_/husky.sh"

npx lint-staged

package.json に lint-staged の設定を追加する。

json
{
  "lint-staged": {
    "*.{ts,tsx}": [
      "eslint --fix",
      "prettier --write"
    ],
    "*.{css,md,json}": [
      "prettier --write"
    ]
  }
}

Claude Code にこれを設定させるとき、CLAUDE.md に以下を書いておく。

markdown
## 自動化
- pre-commit: husky + lint-staged でESLintとPrettierを実行
- TypeScriptのビルドエラーもpre-commitでチェックする

Prettier の設定

json
// .prettierrc
{
  "semi": false,
  "singleQuote": true,
  "tabWidth": 2,
  "trailingComma": "es5",
  "printWidth": 100
}

Vercel デプロイまでを1セッションで完走させるには?

セットアップが終わったら、Vercel へのデプロイも Claude Code に指示できる。

まず Vercel CLI をインストールする。

bash
npm install -g vercel

Claude Code に次のように指示する。

現在のプロジェクトを Vercel にデプロイしてください。
- プロジェクト名: my-app
- フレームワーク: Next.js
- ビルドコマンドはデフォルト設定を使用
- 環境変数は .env.local から読み込む

Vercel CLI を使ったデプロイコマンドは以下だ。

bash
vercel --prod

環境変数がある場合は Vercel のダッシュボードで設定するか、CLI で追加する。

bash
vercel env add NEXT_PUBLIC_API_URL production

GitHub リポジトリと連携すれば、以降は main ブランチへの push で自動デプロイされる。

Claude Code でよくある失敗パターンと回避策は?

CLAUDE.md を読み込まずに実行される

Claude Code を起動したとき、プロジェクトルートに CLAUDE.md があれば自動的に読み込まれる。ただし、サブディレクトリで起動した場合は読み込まれないことがある。必ずプロジェクトルートで claude を起動する

指示が曖昧で意図と違うコードが生成される

「いい感じに」「ベストプラクティスで」という指示は通じない。「TypeScript の strict モードで、any は使わずに、Server Component として実装する」のように具体的に書く。

長いセッションでコンテキストが薄れる

1セッションが長くなると、最初に伝えたルールを忘れたかのような挙動をすることがある。CLAUDE.md のルールを守っているか確認し、ズレを感じたら「CLAUDE.md のルールに従って修正してください」と明示的に指示する。

ファイルが意図せず上書きされる

Claude Code はファイルを積極的に編集する。既存ファイルを壊されたくない場合は、CLAUDE.md に「〇〇ファイルは編集禁止」と明記する。

markdown
## 編集禁止ファイル
- `src/styles/design-tokens.css` — デザイントークンの定義(変更不可)
- `.env.local` — 環境変数(参照のみ)

まとめ

Claude Code で Next.js の初期構築を自動化するポイントは3つだ。

  1. CLAUDE.md で意図を正確に伝える: 技術スタック・ディレクトリ構成・禁止事項を明記する
  2. カスタムコマンドで繰り返し作業を排除する: よく使うパターンをコマンド化して再利用する
  3. pre-commit hook で品質を担保する: コードレビュー前に機械的なチェックを自動化する

最初の CLAUDE.md を書く30分の投資が、その後の開発効率を大きく左右する。テンプレートとして保存しておき、プロジェクトごとに調整していく使い方がおすすめだ。