AIコーディング 2026.05.05

CLAUDE.mdの書き方【Claude Code設定ファイル完全ガイド】

タグ:CLAUDE.md / Claude Code / 生成AI / AI活用 / 入門

CLAUDE.mdとは「AIへの引き継ぎメモ」

Claude Codeが毎回セッション開始時に自動で読み込む設定ファイルです。一度書いておけば、毎回同じプロジェクト説明をAIに繰り返す必要がなくなります。

Before(CLAUDE.mdなし):
  毎セッション: 「TypeScriptで書いてください、anyは使わないでください、
                  Prismaでクエリを...」 → 5分の説明

After(CLAUDE.mdあり):
  セッション開始即座に作業開始
  → Claude Codeが設定を自動読み込み

基本テンプレート(コピペして使えます)

# CLAUDE.md
# このファイルはClaude Codeが自動で読み込みます

## プロジェクト概要
[プロジェクト名]: [一行説明]

技術スタック:
- Frontend: [フレームワーク + バージョン]
- Backend: [フレームワーク + バージョン]
- DB: [データベース名]
- インフラ: [デプロイ先]

## コーディングルール
- TypeScript: strict: true を維持する
- 型: any 禁止、不明な型は unknown を使う
- スタイル: [スタイルガイドへのリンク]
- テスト: [テスト方針]

## 禁止操作
- git push --force は絶対にしない
- APIキーやシークレットをコードに直書きしない
- .env ファイルをgitにコミットしない
- production DB への直接接続は禁止

## よく使うコマンド
- 開発サーバー起動: npm run dev
- テスト実行: npm test
- 型チェック: npm run type-check

## 現在の作業状況
- ✅ 完了: [機能名]
- 🔄 進行中: [機能名]
- ⏳ 未着手: [機能名]

Next.js + Prisma向け実践テンプレート

# CLAUDE.md

## プロジェクト概要
ECサイト「MyShop」: Next.js 14 + TypeScript + Prisma + PostgreSQL
デプロイ: Vercel + Vercel Postgres

## 技術スタック
- Next.js 14 (App Router) - Pages Routerは使わない
- TypeScript strict mode
- Prisma ORM(生のSQL禁止)
- Tailwind CSS + shadcn/ui
- Auth.js(認証)
- Zod(バリデーション)

## コーディングルール
### TypeScript
- `any` 型を一切使わない → `unknown` を使う
- エクスポートされる関数の引数・戻り値の型を明示する
- Props は interface で定義する

### Next.js
- デフォルトはServer Component
- `"use client"` は useState・イベントハンドラが必要な場合のみ
- `<img>``next/image` / `<a>``next/link`

### Server Actions
- 最初に認証チェック(middleware に依存しない)
- 全入力は Zod でバリデーション
- 変更後は revalidatePath / revalidateTag でキャッシュ更新

### Prisma
- `$queryRaw`(生SQL)は使用前にユーザーに確認
- スキーマ変更は migrate dev でマイグレーションファイルを生成
- `prisma db push` は開発初期のみ

## 禁止操作(実行前に必ず確認)
- git push --force
- git reset --hard
- rm -rf(対象と影響範囲を明示してから確認)
- DROP TABLE / TRUNCATE
- .env ファイルのコミット

CLAUDE.mdをAPIで自動検証する

# validate_claude_md.py
# CLAUDE.mdの必須セクションが揃っているか自動検証する

import anthropic
from pathlib import Path

client = anthropic.Anthropic()

REQUIRED_SECTIONS = [
    "プロジェクト概要",
    "コーディングルール",
    "禁止操作",
]

def validate_claude_md(file_path: str = "CLAUDE.md") -> dict:
    """CLAUDE.mdの品質をClaude APIで検証する"""
    content = Path(file_path).read_text()
    
    missing = [s for s in REQUIRED_SECTIONS if s not in content]
    if missing:
        return {"status": "incomplete", "missing": missing}
    
    response = client.messages.create(
        model="claude-haiku-4-5-20251001",
        max_tokens=256,
        messages=[{
            "role": "user",
            "content": f"""以下のCLAUDE.mdを評価してください。

評価観点:
1. 明確さ(1-10): ルールが明確に書かれているか
2. 完全性(1-10): 必要な情報が網羅されているか
3. 改善点: 3点以内で具体的に指摘してください

CLAUDE.md:
{content[:2000]}"""
        }]
    )
    
    cost = (response.usage.input_tokens * 0.80 + response.usage.output_tokens * 4.00) / 1_000_000
    
    return {
        "status": "complete",
        "feedback": response.content[0].text,
        "cost_usd": round(cost, 5)
    }

result = validate_claude_md()
print(f"ステータス: {result['status']}")
if result["status"] == "incomplete":
    print(f"不足セクション: {result['missing']}")
else:
    print(f"フィードバック:\n{result.get('feedback', '')}")
    print(f"検証コスト: ${result.get('cost_usd', 0):.5f}")

あわせて読みたい

参考ソース