TL;DR: CLAUDE.md は Claude Code の行動指針を定義するファイルです。プロジェクトルートに置くだけで Claude Code がそのコンテキストを常時参照します。本記事では個人・小チーム・大規模チームの3パターンのテンプレートと、グローバル設定との使い分け、5つ以上のアンチパターンを解説します。
📚 シリーズ: Claude Code シリーズ:環境設定から実践まで
はじめに:CLAUDE.md がなぜ重要か
Claude Code を使い始めてしばらくすると、多くのエンジニアが同じ壁にぶつかります。
- 「毎回パッケージマネージャーの指示をしないといけない」
- 「コーディングスタイルが一貫しない」
- 「チームメンバーと Claude Code の挙動が違う」
これらはすべて CLAUDE.md が適切に設定されていないことが原因です。
CLAUDE.md は Claude Code が自動的に読み込む設定ファイルです。Anthropic 公式ドキュメントによると、このファイルはセッションをまたいで永続するコンテキストとして機能し、プロジェクト固有のルール・技術スタック・コーディング規約を Claude に認識させます。
適切に書かれた CLAUDE.md は:
- Claude Code の応答品質を大幅に向上させる
- チーム全体で一貫したAI活用を実現する
- 「同じことを何度も説明する」という無駄を排除する
本記事では、プロジェクト規模と技術スタックに応じた設計パターンを、コピペ可能なテンプレートとともに解説します。
CLAUDE.md の読み込み仕組みを理解する
3層の設定階層
Anthropic の設定ガイドによると、Claude Code は以下の優先順位で設定を読み込みます。
優先順位(高→低)
1. プロジェクト CLAUDE.md(リポジトリルートの .claude/CLAUDE.md または CLAUDE.md)
2. グローバル CLAUDE.md(~/.claude/CLAUDE.md)
3. サブディレクトリの CLAUDE.md(作業ディレクトリに近いものが優先)
重要な動作原則:
- Claude Code は現在の作業ディレクトリから上位に向かってすべての CLAUDE.md を自動探索します
- 複数の CLAUDE.md が存在する場合、すべてが結合されてコンテキストに注入されます
- プロジェクト CLAUDE.md はリポジトリに含まれるため、チームメンバー全員が同一設定を共有します
ファイルの配置場所
project-root/
├── CLAUDE.md ← プロジェクト設定(推奨配置)
├── .claude/
│ └── CLAUDE.md ← 別の配置オプション
├── src/
│ └── CLAUDE.md ← サブディレクトリ固有の設定
└── ...
サブディレクトリに CLAUDE.md を配置すると、そのディレクトリ配下での作業時にのみ追加のコンテキストが注入されます。大規模プロジェクトで「バックエンドAPIとフロントエンドで異なるルールを適用したい」場合に活用できます。
プロジェクト規模別パターン
個人・ソロ開発向けテンプレート
個人開発では「自分の好みと習慣を素早く反映させる」ことが目的です。冗長な説明より、具体的なコマンドと制約を簡潔に記述します。
# プロジェクト名 - Claude Code 設定
## 技術スタック
- Node.js 22.x / TypeScript 5.x
- Next.js 14(App Router)
- PostgreSQL + Prisma ORM
- pnpm(npm 不可)
## コーディング規約
- 関数は arrow function で統一
- 型注釈を必ず付ける(`any` 禁止)
- コメントは日本語で書く
## コマンド
- 開発サーバー: `pnpm dev`
- テスト: `pnpm test`
- ビルド: `pnpm build`
## 禁止事項
- `node_modules/` の直接編集
- `.env` ファイルのコミット
- `npm` コマンドの使用(pnpm を使う)
## 自律性
不明な点は作業を止めず、最もよさそうな判断で進めてください。
ポイント:
- 技術スタックを最初に明記し、Claude が適切なAPIやライブラリを選択できるようにする
- 禁止事項は明示的に列挙する(暗黙の了解は伝わらない)
- 「自律性」の指示で不要な確認を減らす
小チーム(2〜5人)向けテンプレート
小チームでは「チームの共通認識をコードで表現する」ことが目的です。個人設定に加えて、コードレビュー基準や連絡手順を追加します。
# チームプロジェクト - Claude Code 設定
> **SSoT(Single Source of Truth)**: このファイルとチームの開発規約が一致していること。
> 矛盾がある場合はこのファイルを更新してください。
## 技術スタック
- Node.js 22.x / TypeScript 5.x
- Next.js 14(App Router)+ Tailwind CSS
- PostgreSQL + Prisma ORM
- pnpm(npm 不可)
- Vitest(テストフレームワーク)
## アーキテクチャルール
- コンポーネントは `src/components/` に配置(atomic design 準拠)
- API Routes は `src/app/api/` に配置
- DB操作は必ず `src/lib/db/` 経由(直接クエリ禁止)
- 環境変数は `src/lib/env.ts` の型安全な wrapper を使う
## コーディング規約
- ESLint + Prettier の設定に従う
- 関数コンポーネントのみ(クラスコンポーネント禁止)
- `any` 型の使用禁止。型が不明な場合は `unknown` を使う
- テストは最低限「ハッピーパス + エラーケース1つ」を作成
## コミット規約(Conventional Commits)
- feat: 新機能
- fix: バグ修正
- refactor: リファクタリング
- docs: ドキュメント変更
- test: テストの追加・修正
## コマンド
- `pnpm dev`: 開発サーバー起動
- `pnpm test`: テスト実行
- `pnpm test:watch`: ウォッチモード
- `pnpm lint`: Lint チェック
- `pnpm build`: 本番ビルド
## PR・レビュー方針
- PR は 1機能 = 1PR(最大200行の変更)
- セルフレビューを必ず実施してから PR を出す
- セキュリティに関わる変更は必ず2名以上のレビューを得る
## 禁止事項
- `node_modules/`, `.env*`, `secrets/` の編集
- main ブランチへの直接 push
- force push(緊急時は Issue 起票してチームに相談)
- 外部 API キーのハードコード
ポイント:
- アーキテクチャルールを明記することで、Claude が適切な場所にコードを配置できる
- コミット規約を書くことで自動生成されるコミットメッセージの品質が上がる
- 禁止事項のリストは「なぜ禁止か」まで書くと Claude の判断精度が上がる
中〜大規模チーム向けテンプレート
大規模チームでは「複数のサブシステム・複数チームの共存」が課題です。ルーティング・権限・ドメイン設計を明示します。
# エンタープライズプロジェクト - Claude Code 設定
> **優先順位**: セキュリティ > SSoT > 品質 > 速度
> **担当**: 迷ったら `CODEOWNERS` を参照してください。
## プロジェクト構造
apps/
├── web/ # Next.js フロントエンド(チームA担当)
├── api/ # Express API サーバー(チームB担当)
└── admin/ # 管理画面(チームC担当)
packages/
├── ui/ # 共有UIコンポーネント
├── shared/ # 共有ユーティリティ・型定義
└── config/ # 共有設定(ESLint/TypeScript等)
## 技術スタック
- Node.js 22.x / TypeScript 5.x(全パッケージ統一)
- pnpm workspaces(monorepo管理)
- Next.js 14 / Express 5 / React 18
- PostgreSQL + Prisma(apps/api のみ直接DB接続可)
- Redis(セッション・キャッシュ)
## アーキテクチャ原則
- フロントエンドからDBに直接アクセス禁止(必ず apps/api 経由)
- packages/ への変更は全チームのレビューが必要
- 環境変数は Vault から取得(ハードコード絶対禁止)
- APIの変更はOpenAPI仕様を先に更新してから実装
## セキュリティルール
- OWASP Top 10 を常時意識すること
- 認証/認可コードは `packages/auth/` 以外に書かない
- ユーザー入力は必ず zod でバリデーション
- SQL クエリは Prisma ORM 経由のみ(生SQL禁止)
- ログにPII(個人識別情報)を出力しない
## コマンド(リポジトリルートで実行)
- `pnpm dev`: 全サービス起動
- `pnpm dev --filter=web`: webのみ起動
- `pnpm test`: 全テスト実行
- `pnpm lint`: 全パッケージLint
- `pnpm build`: 全ビルド
## ブランチ戦略(GitHub Flow)
- `main`: 本番相当(直接 push 禁止)
- `develop`: 統合ブランチ
- `feature/*`: 機能開発
- `hotfix/*`: 緊急修正
## CI/CD
- PR 作成 → 自動テスト → コードレビュー → develop マージ
- develop → main のマージは週次リリース時のみ
- 本番デプロイは GitHub Actions 経由のみ(手動デプロイ禁止)
## 禁止事項
- 本番環境への直接デプロイ
- packages/ の直接編集(PR必須)
- 認証ロジックのコピー(共通ライブラリを使う)
- console.log の本番コミット(logger ライブラリを使う)
技術スタック別の設定ポイント
Next.js プロジェクト
## Next.js 固有ルール
- App Router を使用(Pages Router は新規作成禁止)
- Server Components をデフォルトとし、必要な場合のみ 'use client' を付ける
- データ取得は Server Component で行う(クライアントサイドの fetch は例外のみ)
- Image コンポーネントを必ず使う(img タグ禁止)
- `next/font` でフォントを最適化する
- middleware.ts での認証チェックを必須とする
- Route Handlers は `src/app/api/` 配下に配置
Python プロジェクト
## Python 固有ルール
- Python 3.12+ を使用
- パッケージ管理は uv(pip 直接使用禁止)
- 型ヒントを全関数に付ける(mypy strict モード)
- フォーマッタは ruff(black は使わない)
- テストは pytest(unittest 禁止)
- 非同期処理は asyncio / FastAPI のみ
- 環境変数は python-dotenv + pydantic-settings で管理
## コマンド
- `uv run python -m pytest`: テスト実行
- `uv run ruff check .`: Lint
- `uv run ruff format .`: フォーマット
- `uv run mypy .`: 型チェック
Monorepo(pnpm workspaces)
## Monorepo ルール
- パッケージ間の依存は `workspace:*` プロトコルを使う
- 共有コードは `packages/shared/` に置く(重複禁止)
- 各パッケージは独自の tsconfig.json を持つが、ルートを extends する
- `pnpm --filter <package>` でパッケージ指定実行
- changesets でバージョン管理(手動バンプ禁止)
## コマンド
- `pnpm --filter web dev`: web パッケージのみ起動
- `pnpm -r test`: 全パッケージのテスト実行
- `pnpm changeset`: バージョン変更を記録
グローバル CLAUDE.md との使い分け戦略
Anthropic の公式ドキュメントによると、設定は「グローバル(~/.claude/CLAUDE.md)」と「プロジェクト(プロジェクトルートの CLAUDE.md)」の2種類が存在します。
使い分けの原則
| 設定内容 | 配置場所 | 理由 |
|---|---|---|
| 個人の言語設定(日本語/英語) | グローバル | プロジェクトに依存しない |
| よく使うショートカット | グローバル | 個人の作業スタイル |
| パッケージマネージャー(pnpm) | プロジェクト | プロジェクトによって異なる |
| フレームワーク固有ルール | プロジェクト | プロジェクト依存 |
| セキュリティポリシー | プロジェクト | チームで共有が必要 |
| コードレビュー基準 | プロジェクト | チームの合意事項 |
グローバル CLAUDE.md の推奨内容
# グローバル設定
## 基本動作
- 出力言語: 日本語
- 説明は簡潔に。実装よりもコードを優先する
- 確認なしで進められる場合は自律的に作業を進める
## 私のプログラミングスタイル
- 関数型プログラミングを好む
- 早期リターンパターン(ガード節)を優先
- 変数名は英語、コメントは日本語
## セキュリティ意識
- 環境変数やシークレットは絶対にコードに含めない
- パブリックリポジトリにプッシュする前に機密情報がないか確認する
注意点:グローバル設定はチームと共有されません。プロジェクト設定(CLAUDE.md)はリポジトリに含まれるためチーム全員が共有しますが、グローバル設定は個人のマシンにのみ存在します。チームで統一すべき設定は必ずプロジェクト CLAUDE.md に書いてください。
アンチパターン集
CLAUDE.md の設計でよく見られる失敗パターンを6つ紹介します。
アンチパターン1:曖昧な指示
NG 例:
- コードをきれいに書く
- セキュリティに注意する
- ベストプラクティスに従う
OK 例:
- 関数の行数は20行以内に収める
- ユーザー入力は必ず zod でバリデーションする
- `any` 型の使用禁止、代わりに `unknown` を使う
Claude は「きれいなコード」の定義を知りません。具体的なルールに変換してください(経験則: 曖昧な指示は無視されやすい)。
アンチパターン2:機密情報を記載する
NG 例:
## データベース接続
- DB_URL: postgresql://user:password@localhost/mydb
- API_KEY: sk-xxxxx
OK 例:
## 環境変数
- DB_URL: `.env.local` を参照
- 環境変数の取得は `src/lib/env.ts` の型安全な wrapper を使うこと
CLAUDE.md はリポジトリに含まれます。機密情報を書くと Git 履歴に残ります。
アンチパターン3:過度に長い CLAUDE.md
NG 例: 500行を超えるルール集。全ての edge case を網羅しようとする。
OK 例: 最重要ルールのみ記載(100行以内を目安)。詳細な規約は別ファイルに分離して参照させる。
## 詳細規約
詳細なコーディング規約は `docs/CODING_GUIDE.md` を参照してください。
Anthropic の公式ベストプラクティスでは、CLAUDE.md は「最重要の情報のみ含めること」を推奨しています(公式値)。コンテキストウィンドウの効率的な利用のためです。
アンチパターン4:一度書いたら更新しない
プロジェクトが進化するにつれて CLAUDE.md も更新が必要です。ライブラリのバージョンアップ、アーキテクチャ変更、チームの追加など、変更があるたびに CLAUDE.md を更新しないと、古い情報が Claude を混乱させます。
対策:
## メンテナンスノート
- 最終更新: 2026-07-05
- 次回レビュー予定: 技術スタック変更時、または四半期ごと
- 更新担当: チームリード
アンチパターン5:チームメンバー全員が同一設定を使う前提にする
問題: フロントエンドエンジニアとバックエンドエンジニアで必要な指示が異なるのに、一つの CLAUDE.md に混在させる。
対策: サブディレクトリに CLAUDE.md を分割する。
project/
├── CLAUDE.md ← 全体共通ルール(短く)
├── frontend/
│ └── CLAUDE.md ← フロントエンド固有ルール
└── backend/
└── CLAUDE.md ← バックエンド固有ルール
アンチパターン6:否定形だけで指示する
NG 例:
- npm を使わない
- console.log を使わない
- any を使わない
OK 例:
- パッケージ管理: pnpm を使う(npm 不可)
- ログ出力: `src/lib/logger.ts` の logger を使う(console.log 不可)
- 型: 不明な型には `unknown` を使う(any 不可)
否定形は「何をすべきか」を示しません。代替手段とセットで書くことで Claude の判断が明確になります(経験則: 代替提示ありの否定は遵守率が上がる)。
コピペ用テンプレート集
テンプレート1:個人開発・フロントエンド(最小構成)
# [プロジェクト名]
## 技術スタック
- Node.js [バージョン] / TypeScript [バージョン]
- [フレームワーク名]
- pnpm
## コーディングルール
- TypeScript strict モード
- arrow function 統一
- コメントは日本語
## コマンド
- 開発: `pnpm dev`
- テスト: `pnpm test`
- ビルド: `pnpm build`
## 禁止
- node_modules/ 直接編集
- .env のコミット
- npm コマンド使用
テンプレート2:チーム開発(標準構成)
# [プロジェクト名] - Claude Code 設定
> 優先順位: セキュリティ > 品質 > 速度
## 技術スタック
- Node.js [バージョン] / TypeScript [バージョン]
- [フロントエンドフレームワーク]
- [バックエンド/DB]
- pnpm
## アーキテクチャ
[ディレクトリ構造と責務を記述]
## コーディング規約
- ESLint + Prettier 設定に従う
- any 型禁止(unknown を使う)
- テスト: ハッピーパス + エラーケース最低1件
## コミット(Conventional Commits)
- feat / fix / refactor / docs / test / chore
## コマンド
- `pnpm dev` / `pnpm test` / `pnpm lint` / `pnpm build`
## 禁止
- main への直接 push
- .env* / secrets/ の編集・コミット
- force push(緊急時は Issue 起票)
- 外部 API キーのハードコード
## PR 方針
- 1機能 = 1PR(最大200行)
- セキュリティ変更は2名以上のレビュー必須
テンプレート3:大規模・Monorepo(フル構成)
# [プロジェクト名] - Claude Code 設定
> 優先順位: セキュリティ > SSoT > 品質 > 速度
> 詳細は docs/CONTRIBUTING.md を参照
## リポジトリ構造
apps/
├── [サービス名]/ # [担当チーム]
packages/
├── shared/ # 共有ロジック(変更は全チームのレビュー必須)
## 技術スタック
- Node.js [バージョン] / TypeScript [バージョン](全パッケージ統一)
- pnpm workspaces
## セキュリティルール
- 認証/認可は packages/auth/ 以外に書かない
- ユーザー入力は zod でバリデーション必須
- PII をログに出力しない
- Vault から環境変数取得(ハードコード禁止)
## アーキテクチャルール
- フロントエンドから DB 直接アクセス禁止
- packages/ 変更は全チームの承認必須
- API 変更は OpenAPI 仕様を先に更新
## コマンド
- `pnpm dev`: 全サービス起動
- `pnpm --filter [パッケージ] dev`: 個別起動
- `pnpm -r test`: 全テスト
- `pnpm changeset`: バージョン変更記録
## ブランチ戦略
- main(本番)/ develop(統合)/ feature/* / hotfix/*
- 本番デプロイは GitHub Actions のみ
## 禁止
- 本番への手動デプロイ
- packages/ の直接 push
- console.log の本番コミット(logger を使う)
本サイト自身(Growth Lab)の運用事例として、本リポジトリの CLAUDE.md は「言語・パッケージ管理・成果物パス・編集禁止ファイル」の4項目を最小限に記載し、詳細は AGENTS.md に委譲する構成を採用しています(経験則: 本サイト実運用での知見)。
👉 シリーズ全体像: Claude Code 環境セットアップガイド
まとめ・次のステップ
CLAUDE.md の設計パターンをまとめます。
- 3層構造を理解する: グローバル設定(個人)、プロジェクト設定(チーム共有)、サブディレクトリ設定(サービス固有)を適切に使い分ける
- プロジェクト規模に合わせる: 個人開発は最小構成から始め、チーム規模に応じて拡張する
- 具体的に書く: 曖昧な指示より、具体的なコマンド・ライブラリ・ファイルパスで記述する
- 定期的に更新する: プロジェクトの進化に合わせて CLAUDE.md も更新する
- アンチパターンを避ける: 機密情報は絶対に書かない、過度に長くしない
次のステップとして、以下の記事も参考にしてください。
- Claude Code Hooks 実践:自動フォーマット・安全ガード・通知 — CLAUDE.md と組み合わせて使う Hooks の設計パターン
- AIとペアプロする実践パターン:コンテキスト設計と引き継ぎの技術 — AI ペアプログラミングを継続的に機能させるコンテキスト設計
- AI主導の開発計画:プランニングの実践ガイド — Claude Code を活用した開発計画の立て方
- PlanGate:ゲートドリブン開発の入門 — ゲートドリブン開発と Claude Code の組み合わせ
FAQ
CLAUDE.md と .claude/settings.json の違いは何ですか?
CLAUDE.md はプロジェクトの「行動指針」を自然言語で記述するファイルです。Claude Code がどのように振る舞うべきかのコンテキストを提供します。一方、.claude/settings.json は Claude が実行できるコマンドの許可・拒否リストなど、ツールレベルの設定を管理します(公式ドキュメント)。例えば、「pnpmを使う」という指示は CLAUDE.md、「rm -rf コマンドを禁止する」という設定は settings.json に書きます。
チームで Claude Code を使う場合 CLAUDE.md はどこに置けばいいですか?
プロジェクトルートの CLAUDE.md(またはプロジェクトルートの .claude/CLAUDE.md)に置いてください。このファイルはリポジトリに含まれるため、git clone するだけでチームメンバー全員が同一設定を共有できます。個人固有の設定(言語設定など)は ~/.claude/CLAUDE.md(グローバル設定)に書き、リポジトリには含めないようにします。
CLAUDE.md に書いてはいけないことは何ですか?
主に3点です。(1) 機密情報(APIキー・パスワード・接続文字列)— リポジトリに含まれるため Git 履歴に残ります。(2) 過度に長い内容 — コンテキストウィンドウを消費し、重要な情報が埋もれます。(3) 曖昧な指示(「きれいに書く」「セキュリティを守る」など)— Claude には伝わりません。
グローバル CLAUDE.md とプロジェクト CLAUDE.md はどちらを優先すべきですか?
Claude Code は両方を読み込み、統合してコンテキストを構築します。優先順位は「プロジェクト設定 > グローバル設定」です。チーム開発では、全員に共通させたいルールはプロジェクト CLAUDE.md に書いてください。グローバル設定は個人のローカル環境にのみ存在するため、チームメンバーで自動的に共有されません。
CLAUDE.md の変更はいつ有効になりますか?
Claude Code のセッション開始時に読み込まれます。既存のセッションを継続している場合は、/compact コマンドでコンテキストをリセットするか、新しいセッションを開始すると変更が反映されます。
