Claude Codeが指示を無視する問題の解決法|CLAUDE.mdで慣習を徹底させる設定術
Claude Codeが指定したコーディング規約を無視される理由
開発チームでClaudeを導入してから「指定した命名規約を守らない」「フォーマットが統一されない」「コメント規約が反映されない」という悩みをよく耳にします。これはClaudeが設定不足の状態で動作しているからです。
Claude Codeは強力な開発支援ツールですが、デフォルト状態では、プロジェクトの全体像や開発チームの慣習を認識していません。つまり、一度の指示で「この規約に従ってください」と伝えても、次のタスクでは指示が引き継がれず、繰り返し同じ説明をする羽目になるわけです。
この問題を根本から解決する方法が、プロジェクトルート(ソースコードの最上位ディレクトリ)に「CLAUDE.md」というファイルを配置すること。このファイルは、Claudeに「このプロジェクトはこういう規約を使っている。今後のすべてのコード生成はこれに従ってね」と継続的に伝える設定書になります。
「CLAUDE.md」とは何か
CLAUDE.mdは、プロジェクトの開発慣習をまとめたドキュメントで、Claude Codeがこのファイルを自動で参照し、コード生成時に規約を適用する仕組みです。これにより、毎回の指示で規約を繰り返す必要がなくなります。
参考になる実践例によると、クエイアはこのアプローチで「複数年間Claude Codeを毎日使う中で構築した設定」を採用し、プロジェクト固有の命名規約やコード構造がClaudeから一貫性を持って生成されるようになったと報告しています。つまり、正しく設定すれば、Claude Codeの出力品質が大きく改善されるということです。
CLAUDE.mdに含めるべき基本情報
実際にClaudeを日々使用してきた開発者の経験則に基づくと、CLAUDE.mdに記載すべき項目は以下の通りです。
1. プロジェクトの概要
# プロジェクト概要
- **プロジェクト名**: MyEcommercePlatform
- **主要言語**: Python(バックエンド)、TypeScript(フロントエンド)
- **フレームワーク**: FastAPI、React
- **Node.js バージョン**: 18.x 以上
- **Python バージョン**: 3.10 以上
プロジェクトの基本情報を記載することで、Claudeが言語やフレームワーク固有の機能や書き方を自動で選択しやすくなります。
2. コーディング規約
## コーディング規約
### Python(バックエンド)
- **命名規約**
- クラス: PascalCase(例: `UserService`)
- 関数・変数: snake_case(例: `get_user_by_id`)
- 定数: UPPER_SNAKE_CASE(例: `MAX_RETRY_COUNT`)
- **インデント**: スペース4個(タブ禁止)
- **行の最大文字数**: 100字
- **インポート順序**: 標準ライブラリ → サードパーティ → ローカルモジュール
- **型ヒント**: 必須(例: `def fetch_user(user_id: int) -> User:`)
### TypeScript(フロントエンド)
- **命名規約**
- コンポーネント: PascalCase(例: `UserCard`)
- 関数・変数: camelCase(例: `getUserData`)
- インターフェース: PascalCase(例: `IUserResponse`)
- **インデント**: スペース2個
- **セミコロン**: 必須
- **strict モード**: 有効
コーディング規約の詳細を明記することで、言語ごと、チームごとの慣習がClaudeから確実に反映されます。複数言語を使っているプロジェクトの場合は、言語ごとにセクションを分けることが重要です。
3. ディレクトリ構成
## ディレクトリ構成
project-root/ ├── backend/ │ ├── app/ │ │ ├── models/ # Pydanticモデル │ │ ├── services/ # ビジネスロジック │ │ ├── routes/ # APIエンドポイント │ │ ├── schemas/ # リクエスト/レスポンス定義 │ │ └── dependencies.py # 依存性注入 │ ├── tests/ # テストコード │ └── requirements.txt ├── frontend/ │ ├── src/ │ │ ├── components/ # Reactコンポーネント │ │ ├── hooks/ # カスタムフック │ │ ├── types/ # TypeScript型定義 │ │ ├── services/ # API呼び出し │ │ └── styles/ # CSSモジュール │ └── package.json └── CLAUDE.md
ディレクトリ構成を明確にすることで、Claudeが新規ファイルを作成する際に正しい場所に配置するようになります。
4. 使用禁止ライブラリ・推奨ライブラリ
## ライブラリ運用規則
### 推奨ライブラリ(使う)
- FastAPI(フレームワーク)
- SQLAlchemy(ORM)
- Pydantic(バリデーション)
- pytest(テスト)
### 使用禁止ライブラリ(使わない)
- Django(FastAPIで統一)
- SQLite(本番環境ではPostgresを使う)
これにより、Claudeが個人の好みで異なるライブラリを提案することを防げます。
5. テストの書き方ルール
## テスト規約
- **テストツール**: pytest
- **テスト配置**: `tests/` ディレクトリにモジュールごと配置
- **ファイル名**: `test_<module_name>.py`
- **関数名**: `test_<機能説明>()`
- **カバレッジ目標**: 70%以上(重要な関数は90%以上)
- **モック**: `unittest.mock` を使用(monkeypatch推奨)
### テスト例
```python
# tests/test_user_service.py
import pytest
from app.services.user_service import UserService
from unittest.mock import AsyncMock
@pytest.fixture
def user_service():
return UserService()
@pytest.mark.asyncio
async def test_get_user_by_id_success(user_service):
user = await user_service.get_user_by_id(user_id=1)
assert user.id == 1
assert isinstance(user.name, str)
テストの書き方を具体例付きで示すことで、Claudeが生成するテストコードの品質が格段に上がります。
## CLAUDE.mdが機能しない時の対処法
適切にCLAUDE.mdを設定しても、Claudeが完全に規約を守らないケースがあります。その場合は、以下の手段を試してください。
### 1. CLAUDE.mdの位置を確認する
CLAUDE.mdはプロジェクトのルートディレクトリに配置される必要があります。サブディレクトリに置いても自動で参照されません。
✓ 正しい配置 project-root/ ├── CLAUDE.md ├── backend/ └── frontend/
✗ 間違った配置 project-root/ ├── backend/ │ └── CLAUDE.md # これは参照されない └── frontend/
### 2. 規約を「ムスト」で明記する
Claudeは曖昧な表現よりも、明確な指示に従いやすくなります。「推奨します」ではなく「必ず守ってください」という強い言い方を使いましょう。
```markdown
✗ 避けるべき表現
命名規約は snake_case をお勧めします。
✓ 明確な表現
すべての関数名と変数名は snake_case で記述します。
PascalCase や camelCase は絶対に使用しないでください。
3. 逆の手段:Claudeに「レビュー」をさせない
別の実践例から学べる重要な指摘があります。Claudeにコードを書かせた後に「このコードをレビューして、規約に従っているかチェックしてください」と指示する人が多いですが、実はこれは逆効果のことがあります。
なぜなら、Claudeが自分で生成したコードをレビューすると、「これは問題ありません」と判定してしまい、実は規約違反だったとしても見過ごすことがあるからです。その代わり、以下の方法を試してください:
- コード生成段階での指示を強化する: 「以下のCLAUDE.mdに完全に従ってコードを書いてください」と冒頭に置く
- 人間(開発者)にレビューさせる: Claudeではなく、チームメンバーがコードをチェックする
- 自動チェックツール(linter・formatter)を活用する: Black、Pylint、ESLint、Prettier などで自動フォーマットを施す
4. より詳しい文脈を追加する
単に「規約を守ってください」と書くのではなく、「なぜその規約が必要か」という背景を書くと、Claudeの理解度が上がります。
## 命名規約を厳格にする理由
snake_case を強制する理由:
- Pythonコミュニティの標準(PEP 8)に準拠
- チームメンバーが読みやすく、レビューがスムーズに
- 自動コード解析ツール(Pylint)がデフォルトで snake_case を想定
これを破ると、Pylint が警告を出し、CI/CD パイプラインが失敗します。
背景情報があることで、Claudeがルールの重要性を「理解」し、より確実に守るようになります。
実践テンプレート:CLAUDE.mdの完全版
以下は、実際に機能するCLAUDE.mdのテンプレートです。プロジェクトに合わせてカスタマイズしてください。
# プロジェクト開発ガイド(CLAUDE.md)
## 1. プロジェクト概要
- **プロジェクト名**: [プロジェクト名]
- **主要言語**: Python(バックエンド)、TypeScript(フロントエンド)
- **フレームワーク**: FastAPI、React
- **推定開発期間**: 2026年4月~2026年10月
## 2. 絶対に守るべきコーディング規約
### Python
- **命名**: 関数・変数は `snake_case`、クラスは `PascalCase`、定数は `UPPER_SNAKE_CASE`
- **インデント**: スペース4個(タブは絶対に禁止)
- **行長**: 100字以内
- **型ヒント**: すべての関数に必須(例: `def func(arg: int) -> str:` )
- **docstring**: すべての関数・クラスに Google スタイルで記述
### TypeScript
- **命名**: コンポーネント・インターフェースは `PascalCase`、関数・変数は `camelCase`
- **インデント**: スペース2個
- **strict モード**: 必須
- **セミコロン**: すべての文の最後に必須
## 3. ディレクトリ構成(厳格に守る)
project-root/ ├── backend/ │ ├── app/ │ │ ├── models/ │ │ ├── services/ │ │ ├── routes/ │ │ └── schemas/ │ ├── tests/ │ └── requirements.txt ├── frontend/ │ ├── src/ │ │ ├── components/ │ │ ├── hooks/ │ │ ├── types/ │ │ └── services/ │ └── package.json ├── CLAUDE.md └── .env.example
新しいファイルを作成するときは、必ずこの構成に従ってください。
## 4. テスト規約
- **テストツール**: pytest(Python)、Jest(TypeScript)
- **テスト配置**: `tests/` または `__tests__/` ディレクトリ
- **カバレッジ目標**: 70%以上
- **命名**: `test_<機能名>_<期待結果>.py` または `<機能名>.test.ts`
## 5. 使用禁止・推奨ライブラリ
### 使う
- FastAPI(フレームワーク)
- SQLAlchemy(ORM)
- Pydantic(バリデーション)
- React(UI フレームワーク)
- TanStack Query(データ取得)
### 使わない
- Django(FastAPI で統一)
- Flask(FastAPI で統一)
- jQuery(React で統一)
## 6. コミット規約
- type: feat / fix / docs / style / test / refactor など
- scope: 変更範囲(例: user-service)
- subject: 命令形で簡潔に(30字以内)
7. セキュリティ
- 環境変数は
.envに配置し、.env.exampleを共有(本物のキーは含めない) - API キーやトークンはコードに記述しない
- SQL インジェクション対策として、必ず ORM を使う
8. ドキュメント
- API は OpenAPI(Swagger)で自動生成
- 複雑なロジックには日本語でコメントを付ける
このガイドに従わないコードは生成しないでください。
このテンプレートを自分のプロジェクトに合わせてカスタマイズすれば、Claude Codeはより一貫性の高いコードを生成するようになります。
## よくある失敗と解決策
### 失敗1: CLAUDE.mdに書いただけで終わり
CLAUDE.mdを作成しても、まず最初のプロンプトで「CLAUDE.mdに記載された規約に完全に従ってください」と明記する必要があります。Claudeは自動で参照しますが、プロンプトで強調することで確実性が上がります。
```markdown
❌ 弱い指示
「ユーザー認証機能を実装してください」
✅ 強い指示
「CLAUDE.mdの規約に完全に従い、ユーザー認証機能を実装してください。
命名規約、テスト方法、ディレクトリ構成をすべて同じにしてください」
失敗2: 規約が矛盾している
複数の言語やフレームワークを使う場合、規約同士が矛盾していないか確認が必要です。例えば:
❌ 矛盾している
Python は snake_case を強制
TypeScript は camelCase を強制
→ 連携部分(API レスポンス)で混在する可能性
✅ 解決法
API レスポンスのフィールド名は snake_case で統一
(TypeScript 側で snake_case のまま受け取り、UI では必要に応じて変換)
失敗3: 例を示さない
規約を文字で説明するだけでなく、具体的なコード例を示すことが重要です。
❌ 曖昧な説明
「関数は snake_case で命名してください」
✅ 具体的な例
```python
# 正しい例
def get_user_by_id(user_id: int) -> User:
pass
# 間違った例
def GetUserByID(userID: int) -> User: # PascalCase は禁止
pass
def GetUserById(user_id: int) -> User: # 混在は禁止
pass
Claude Code 使用時の実践フロー
- CLAUDE.mdを作成・更新する(プロジェクト開始時と規約変更時)
- Claude Code を開く
- 初回の指示でCLAUDE.mdを参照させる:「CLAUDE.mdに記載された規約に従ってください」と明記
- コード生成後、自動ツール(linter / formatter)を実行:Black、Prettier などで自動修正
- 人間がレビュー:Claudeにレビューさせるのではなく、開発者が確認
この流れにより、Claude Codeの出力品質が大きく向上し、コードレビューの時間も短縮できます。
まとめ
Claude Codeが規約を無視する問題は、設定・指示不足が原因です。CLAUDE.mdをプロジェクトルートに配置し、具体的で矛盾のない規約を記載することで、Claudeの出力は格段に改善されます。
重要なのは「CLAUDE.mdを作ったら終わり」ではなく、毎回のプロンプトで規約への従順を強調し、生成後に自動チェックツールと人間のレビューで確認することです。この習慣を組み込めば、チーム全体で一貫性の高いコードベースを維持できるようになります。
あわせて読みたい
- Claude初心者向けプロンプト設計5つのコツ|AI精度を3倍上げる指示方法
- プロンプトの書き方完全ガイド|ChatGPT・Claudeで思い通りの回答を引き出すコツ
- Claude Codeの使い方|5つの実践テクニック&よくあるエラー対処法