こんな方に読んでほしい
- Claude Code を使い始めて、毎回同じ指示を出していることに気づいた方
- 「Claude に好き勝手なコマンドを実行させたくない」と感じている方
- CLAUDE.md と settings.json の違いがよくわからない方
【注意点】
– この記事は Claude Code(デスクトップアプリ版)が対象です。
CLAUDE.md と settings.json
Claude Code を使っていると、「Claude の動き方を自分でコントロールしたい」と感じる場面が出てきます。
- 「毎回テストを書くよう指示しなくても、自動でやってほしい」
- 「
.envファイルだけは絶対に読まれたくない」 - 「
rm -rfみたいな危険なコマンドを勝手に実行してほしくない」
こういった要望に対応するために使うのが CLAUDE.md と settings.json です。
ただし、この2つは目的が全く異なります。
| ファイル | 一言で言うと | 効力 |
|---|---|---|
| CLAUDE.md | Claude への「指示書」 | Claudeへのお願い(高い確率で従うが保証はない) |
| settings.json | 権限の「設定ファイル」 | 技術的に強制される(無視できない) |
「こう動いてほしい」という方向性は CLAUDE.md に、「これだけは絶対ダメ」という制限は settings.json に書く、と覚えておくと整理しやすいです。
CLAUDE.md ── Claude への指示書
どこに置くか
CLAUDE.md はプロジェクトのルートに置くのが基本です。また、ユーザーレベルに置くことで全プロジェクト共通の指示を書くこともできます。
(1)./CLAUDE.local.md ← 自分だけの指示
(2)./CLAUDE.md ← プロジェクト共通(チームで共有)
(3)~/.claude/CLAUDE.md ← 全プロジェクト共通の指示
複数のファイルが存在する場合、Claude はすべてを読み込んで連結します。上位のファイルが下位を上書きするのではなく、すべて同時に有効になります。
何を書くか
Claude Code が起動時に自動で読み込む「プロジェクトの説明書」です。以下のような内容を書いておくと効果的です。
基本的な記述例:
# プロジェクト概要
このプロジェクトはJavaのSpring Bootアプリケーションです。
# コーディングルール
- インデントはスペース4つ
- コードにはコメントを必ずつけること
- メソッド名は動詞で始めること(例:getUserById)
# よく使うコマンド
- ビルド:`mvn clean install`
- テスト実行:`mvn test`
- 起動:`mvn spring-boot:run`
# 必ずやること
- コードを変更したら必ずテストを実行すること
- コミット前にコードレビューの観点でセルフチェックすること
毎回 Claude に説明していた「前提条件」をここにまとめておくだけで、作業効率が大きく変わります。
書く量の目安
長く書きすぎると、Claude が読み込むコンテキストが増えて応答が遅くなったり、指示通りに動いてくれる確率が下がったりします。目安は200行以内です。
内容が多くなる場合は、別ファイルに分けて @ でインポートする方法も使えます。
# プロジェクトルール例
@docs/coding-rules.md
# Git運用ルール例
@docs/git-workflow.md
CLAUDE.md の限界
CLAUDE.md はあくまで Claude への「お願い」です。Claude が高い確率で従ってくれますが、技術的に強制する仕組みではありません。
Claudeへの権限に関して「絶対に守らせたい」ことは、次に説明する settings.json で設定しましょう。
settings.json ── 権限の設定ファイル
どこに置くか
settings.json にも複数の置き場所があり、優先順位があります。
↑ 優先順位が高い
(1).claude/settings.local.json ← 自分だけの設定
(2).claude/settings.json ← プロジェクト共通(チームで共有)
(3)~/.claude/settings.json ← ユーザー全体(全プロジェクト共通)
↓ 優先順位が低い
優先順位は「より具体的な方が優先」されます。プロジェクトの設定はユーザー設定より優先され、ローカル設定はその両方より優先されます。
ただし deny(禁止)ルールだけは例外で、どのレベルに書いても必ず有効になります。「ユーザー設定で許可してもプロジェクト設定で禁止できる」という動きです。
permissions の使い方
settings.json の核心は permissions です。allow・ask・deny の3種類を使い分けます。
{
"permissions": {
"allow": [
"Bash(npm run *)",
"Bash(git status)",
"Bash(git diff *)"
],
"ask": [
"Bash(git push *)"
],
"deny": [
"Bash(rm -rf *)",
"Read(.env)",
"Read(./secrets/**)"
]
}
}
| 種類 | 動き |
|---|---|
| allow | 確認なしで自動実行する |
| ask | 実行前に毎回確認を求める |
| deny | 実行を完全にブロックする |
評価の順番は deny → ask → allow です。deny に一致したものは、allowに何を書いていても必ずブロックされます。
ツールの指定方法
Bash 以外にも、ファイルの読み書きや Web アクセスなど様々なツールを制御できます。
{
"permissions": {
"allow": [
"Read(./src/**)", // src/ 以下の読み取りを許可
"Edit(./docs/**)", // docs/ 以下の編集を許可
"WebFetch(domain:example.com)" // 特定ドメインへのアクセスを許可
],
"deny": [
"Read(.env)", // .env ファイルの読み取りを禁止
"Read(./secrets/**)" // secrets/ 以下をすべて禁止
]
}
}
* はワイルドカードとして使えます。Bash(npm run *) は npm run build や npm run test などに一致します。
そのほかの主な設定項目
権限以外にも、よく使う設定を紹介します。
{
"model": "claude-sonnet-4-6",
"permissions": { ... },
"env": {
"NODE_ENV": "development"
},
"hooks": {
"PostToolUse": [{
"matcher": "Edit|Write",
"hooks": [{
"type": "command",
"command": "npx prettier --write {{file}}"
}]
}]
}
}
- model: 使用するモデルを固定する
- env: セッション中に使う環境変数を設定する
- hooks: ファイル編集後に自動でコマンドを実行するなど、ライフサイクルに合わせた処理を設定する
hooks は少し上級向けの機能ですが、「コード変更後に自動でフォーマッターを走らせる」といった使い方ができ、うまく活用すると作業効率が上がります。
使い分けの整理
改めて2つの使い分けを整理します。
CLAUDE.md に書くこと
- プロジェクトの概要・技術スタック
- コーディング規約・命名規則
- よく使うコマンド
- 「こうしてほしい」という作業のルール
- チームの開発フロー
settings.json に書くこと
- 絶対に実行させたくないコマンド(deny)
- 読み取り・編集させたくないファイル(deny)
- 毎回確認なしで実行してよいコマンド(allow)
- コード変更後に自動実行したい処理(hooks)
迷ったときの判断基準
「Claude が守らなかったら困る」ことは settings.json に。
「Claude に覚えておいてほしい」ことは CLAUDE.md に。
まとめ
CLAUDE.md と settings.json、どちらも「Claude をコントロールする」ためのファイルですが、役割はまったく異なります。
CLAUDE.md → 指示・前提・ルールを伝える(Claudeへのお願い)
settings.json → 権限・制限を設定する(技術的に強制される)
まずは CLAUDE.md にプロジェクトの基本情報とよく使うコマンドを書くところから始めてみてください。それだけで「毎回同じことを説明する手間」がなくなり、Claude との作業がぐっとスムーズになります。
セキュリティが気になる方は、settings.json の deny に .env ファイルや機密ディレクトリを追加しておくのが最初の一歩としておすすめです。

コメント