📝
CLAUDE.md 書き方完全ガイド|テンプレート・サンプル付き【2026年】
CLAUDE.md はClaude Codeがセッション開始時に自動で読み込む「プロジェクトメモリファイル」です。一度書いてしまえば、毎セッションで同じ指示を繰り返す必要がなくなります。
CLAUDE.md が解決する3つの問題
- 指示の繰り返し問題:コーディング規約やコマンドを毎セッション説明しなくて済む
- 一貫性の欠如:チームメンバー全員が同じルールで Claude を動かせる
- コンテキスト消費の無駄:説明に使うトークンを削減し、本質的な作業に集中できる
3層の配置構造
~/.claude/CLAUDE.md ← グローバル設定(全プロジェクト共通)
project/
├── CLAUDE.md ← プロジェクト設定(チームで共有・git管理)
├── CLAUDE.local.md ← ローカル設定(個人用・gitignore対象)
├── frontend/
│ └── CLAUDE.md ← フロントエンド固有設定
└── backend/
└── CLAUDE.md ← バックエンド固有設定
優先順位は「ローカル > プロジェクト > グローバル」の順です。
| レベル | 場所 | 書くべき内容 | git管理 |
|---|---|---|---|
| グローバル | ~/.claude/CLAUDE.md |
言語設定、出力スタイル、個人的な癖 | なし |
| プロジェクト | ./CLAUDE.md |
技術スタック、コマンド、アーキテクチャ | あり |
| ローカル | ./CLAUDE.local.md |
個人の環境変数、マシン固有の設定 | なし |
読み込みの確認方法
# セッション内で実行
/memory
現在アクティブなすべてのメモリファイルが一覧表示されます。
/init コマンドで初期ファイルを自動生成
cd /path/to/your/project
claude
/init
効果的な書き方5つのルール
ルール1:「削除したら Claude が間違えるか」で取捨選択する
書くべきでない内容:
-
package.jsonを見ればわかること(「Reactを使っています」など) - 言語の標準的な慣例(「関数にはコメントを書いてください」など)
- 頻繁に変わる情報(バージョン番号など)
必ず書くべき内容:
- Claude が推測できないプロジェクト固有のコマンド(
npm run dev:mockなど特殊なスクリプト) - デフォルトと異なるコードスタイルのルール(「
any型は絶対禁止」など意識的に選んだ制約) - 過去に Claude が繰り返し間違えた箇所
ルール2:500行以内に収める
500行を超えると Claude が指示の一部を無視し始めます。大規模プロジェクトでは .claude/rules/ ディレクトリに分割して管理します:
.claude/
└── rules/
├── coding-style.md
├── testing.md
└── git-workflow.md
ルール3:WHY(理由)を必ず添える
## コーディング規約
- TypeScript strict モードを使用(`any` 型は禁止)
- 理由:過去に implicit any 由来の本番バグが複数発生したため
- named export を使用(default export は禁止)
- 理由:リファクタリング時のリネームを IDE が自動追跡できるようにするため
ルール4:フィードバックループで育てていく
同じ訂正を2回以上したらルールとして追加します。数週間ごとに不要になった指示を削除する「剪定」も重要です。
ルール5:禁止事項には代替手段を示す
## 注意事項
# NG
console.log でのデバッグは禁止
# OK
console.log でのデバッグは禁止。代わりに logger.debug() を使用すること
# NG
fetch を直接使わない
# OK
fetch を直接使わない。代わりに src/lib/api.ts の apiClient を使うこと
テンプレート集
React(TypeScript)プロジェクト用
# プロジェクト概要
Eコマースサイトのフロントエンド。Next.js 15 + TypeScript + App Router 構成。
## 技術スタック
- Next.js 15(App Router)
- TypeScript 5(strict モード)
- Tailwind CSS v4
- Tanstack Query
- Vitest + Testing Library
## よく使うコマンド
- `pnpm dev`: 開発サーバー起動(ポート3000)
- `pnpm test`: Vitest 実行
- `pnpm lint`: ESLint + TypeScript チェック
## コーディング規約
- `any` 型は禁止(理由:implicit any 由来の本番バグ防止)
- named export を使用(default export 禁止)
- CSS は Tailwind ユーティリティクラスのみ(インライン style 禁止)
- fetch を直接使わず、src/lib/apiClient.ts を必ず経由すること
Python(FastAPI)プロジェクト用
# プロジェクト概要
ユーザー管理 REST API。FastAPI + SQLAlchemy + PostgreSQL 構成。
## 技術スタック
- Python 3.12 / FastAPI / SQLAlchemy 2.0 / uv / Ruff
## よく使うコマンド
- `uv run fastapi dev`: 開発サーバー起動
- `uv run pytest`: テスト実行
- `uv run ruff check .`: リント実行
- `uv run alembic upgrade head`: マイグレーション適用
## コーディング規約
- パッケージ管理は uv のみ(pip / poetry は使わない)
- Python コードの実行は `uv run` 経由
- 型アノテーションは必須(mypy strict モード相当)
- 生 SQL は原則禁止。SQLAlchemy ORM を使用すること
グローバル設定(全プロジェクト共通)
# 個人設定(グローバル)
## 出力スタイル
- 日本語で回答すること
- コードの説明は日本語でコメントを入れること
## コミットメッセージ
- Conventional Commits 形式(feat: / fix: / docs: / refactor:)
- 1行目は50文字以内、日本語可
## 作業スタイル
- 大きな変更の前に必ず計画を提示し、承認を取ること
- テストを書かずに機能実装を完了としない
Before / After 比較
Before(CLAUDE.md なし)
// デフォルト export を使っている
export default function UserList() {
// any 型を使っている
const [users, setUsers] = useState<any[]>([])
useEffect(() => {
// fetch を直接使っている
fetch('/api/users').then(res => res.json()).then(data => setUsers(data))
}, [])
return <div style={{ padding: '20px' }}>{/* インライン style */}</div>
}
After(CLAUDE.md あり)
import { useQuery } from '@tanstack/react-query'
import { apiClient } from '@/lib/apiClient'
import type { User } from '@/types/user'
// named export を使用(CLAUDE.md のルールに従う)
export function UserList() {
// 型を明示(any 型を使わない)
const { data: users = [], isLoading } = useQuery<User[]>({
queryKey: ['users'],
queryFn: () => apiClient.get('/users'), // apiClient 経由
})
return (
<ul className="space-y-2"> {/* Tailwind を使用 */}
{users.map(user => (
<li key={user.id} className="p-4 border rounded">{user.name}</li>
))}
</ul>
)
}
プロジェクトのルールをすべて守ったコードが一発で生成されます。
さらに詳しく
この記事では配置構造・書き方のルール・テンプレート・Before/After比較を中心にまとめました。
グローバルとプロジェクトの使い分け・hooks 機能との連携など、より詳細な運用レビューは以下のブログ記事にまとめています。
Discussion