.claude フォルダには何が入っているのか
.claudeフォルダの中身を整理: CLAUDE.md、settings.json、rules、skills、agents、MCPサーバー、優先順位、コミット対象と除外対象。
.claude フォルダには、2 種類のものが入っています。1 つは、セッション開始時に毎回 Claude のコンテキストへ読み込まれる「指示」(CLAUDE.md、rules/、skills/、agents/)。もう 1 つは、ツールの挙動を制御する「設定」(settings.json、hooks、MCP サーバー)です。どちらも、コミットするプロジェクトディレクトリと、決してコミットしないホームフォルダ内の ~/.claude ディレクトリに分かれて配置されます。
さらに、このフォルダは放っておいても勝手に増えていく傾向があります。パーミッションのプロンプトを承認すれば、自分で作った覚えのないファイルが書き出され、/init は CLAUDE.md を置いていき、プルリクエストが特定の開発者の allow ルールで埋まった .claude/settings.local.json を巻き込んでしまうこともあります。
本記事は、ファイル単位でのガイドです。各パスが何をするのか、2 つのファイルが同じ項目を設定したときにどちらが勝つのか、そしてファイルごとにリポジトリへ入れるべきかどうかの判断を示します。
要点
- Claude Code は設定を 3 通りの方法で解決します。
settings.jsonの値は 5 段階の優先順位に従い、最も高いスコープが勝ちます。CLAUDE.md ファイルは互いを置き換えるのではなく、ファイルシステムのルートから下に向かって積み重なります。パーミッションルールはマージされ、あらゆるスコープのすべてのルールが有効なまま残ります。 - 設定の 5 つのスコープは、優先度の高い順に、managed settings、コマンドラインフラグ、
.claude/settings.local.json、.claude/settings.json、~/.claude/settings.jsonです。 - CLAUDE.md、
.claude/settings.json、.claude/rules/、.claude/skills/、.claude/agents/、.mcp.jsonはコミットし、.claude/settings.local.json、CLAUDE.local.md、~/.claude配下のすべてはリポジトリに入れないでください。 - Claude Code は、まだそのファイルを ignore していないリポジトリで初めて
.claude/settings.local.jsonに書き込むときに、グローバルの git excludes へ追加します。そのため、手作業で作成したコピーには独自の.gitignoreエントリが必要です。
2 つの .claude はどこにあるのか
Claude Code は 2 つの .claude ルートを読み込みます。1 つはプロジェクト内にあり、リポジトリとともに移動し、チーム全体のためのものです。もう 1 つはホームフォルダ内の ~/.claude で、これはあなた個人のものであり、そのマシン上のあらゆるプロジェクトに付いて回ります。この分割こそが、真っ先に頭に入れておくべき最も有用なポイントです。Claude Code のディレクトリリファレンスも同じ線引きをしています。プロジェクトのファイルはコミットし、ホームフォルダのファイルはそのままにしておく、ということです。Windows ではホームのルートは %USERPROFILE%\.claude になり、CLAUDE_CONFIG_DIR を別の場所に向ければ、まとめて移動できます。
my-project/
├── CLAUDE.md # instructions loaded every session
├── CLAUDE.local.md # private preferences, gitignored
├── .mcp.json # team-shared MCP servers
└── .claude/
├── settings.json # permissions, hooks, env, model defaults
├── settings.local.json # your personal overrides, gitignored
├── rules/*.md # topic-scoped instructions, optionally path-gated
├── skills/<name>/SKILL.md # reusable prompts invoked with /name
├── commands/*.md # single-file prompts, same mechanism as skills
├── agents/*.md # subagent definitions with their own prompt and tools
├── workflows/*.js # workflow scripts saved from /workflows
├── output-styles/*.md # instruction sets that adjust how Claude works
└── agent-memory/<name>/ # persistent memory for subagents
~/.claude.json # app state, OAuth, personal MCP servers
~/.claude/
├── CLAUDE.md # your instructions, across every project
├── settings.json # personal defaults
├── rules/*.md # user-level rules, applied to every project
├── keybindings.json # custom keyboard shortcuts
├── themes/*.json # custom colour themes
├── plugins/ # cloned marketplaces and per-plugin data
├── projects/<project>/memory/ # auto memory Claude writes itself
└── .credentials.json # login credentials
実際のところ、編集の大部分は 2 つのファイルに集中します。CLAUDE.md と settings.json です。それ以外はすべてオプションです。
CLAUDE.md、インポート、パスでゲートされたルール
CLAUDE.md は、Claude Code がセッション開始時に毎回コンテキストへ読み込むファイルであり、4 か所から読み取られます。managed policy、~/.claude/CLAUDE.md、プロジェクト(./CLAUDE.md または ./.claude/CLAUDE.md)、そして個人用メモのための ./CLAUDE.local.md です。メモリのドキュメントには、これらが競合するのではなく積み重なることが明記されています。Claude Code が見つけた各ファイルは、ファイルシステムのルートから作業ディレクトリへ下りながら順にコンテキストへ追加され、同一ディレクトリ内では CLAUDE.local.md が CLAUDE.md の後に入ります。親ディレクトリのファイルは起動時に読み込まれますが、サブディレクトリのファイルは Claude がそこにあるファイルを開くまで待機します。
@path/to/file 構文は別のファイルを取り込みます。パスはインポート元ファイルからの相対で解決され、最大 4 階層までたどれます。長いファイルをインポートに分割すると整理はされますが、コンテキストの節約にはなりません。インポート対象もすべて起動時に展開されるためです。インポートの解析はバッククォート内やフェンスドブロック内の記述を無視するので、ファイルを取り込まずに指示の中でパスを表記したいときはこれを使います。
重要な制限が 2 つあります。200 行という数字は上限というより目安です。これを超えると、ファイルはより多くのコンテキストを消費し、Claude がそれに従う確実性も下がります。実際の上限は 4 MiB です。Claude Code はそのサイズまでの CLAUDE.md を丸ごと読み込み、それを超えるものはスキップします。
.claude/rules/*.md はモジュール化された代替手段です。ルールファイルは再帰的に探索され、1 ファイルにつき 1 トピックを扱います。frontmatter を付けなければ起動時に読み込まれ、.claude/CLAUDE.md と同等に扱われます。paths フィールドを与えると、Claude が glob に一致するファイルに触れるまでコンテキストに入りません。
---
paths:
- "src/components/**/*.tsx"
---
Prefer function components with explicitly typed props.
Co-locate the test file beside the component it covers.
ファイルをまたいで矛盾する指示があった場合、その解決は任意であり、覚えておくべきルールはありません。実際に何が読み込まれたかは /context または /memory で確認してください。ある指示をどうしても決まったタイミングで実行させたいのであれば、代わりに PreToolUse フックとして書きましょう。フックは、Claude がそれを選ぶかどうかにかかわらず、セッション中の決まったタイミングでシェルコマンドとして実行されます。
AGENTS.md はどこに位置づけられるのか
他のコーディングエージェント向けにすでに AGENTS.md を持つリポジトリでは、追加の作業は不要です。Claude Code はそれらのファイルを単独でも、CLAUDE.md と併せても読み取ります。作業ディレクトリとその親に CLAUDE.md が存在しない場合、読み込まれるのは AGENTS.md です。どのファイルを読み込むかは /config の “Project instructions” で設定され、この設定は Anthropic の機能フラグを取得できるセッションでのみ表示されるため、Bedrock、Vertex、Foundry では利用できません。
AGENTS.md を読み込めないセッションの場合や、既存の CLAUDE.md を残したい場合は、AGENTS.md の隣に、それをインポートする CLAUDE.md を追加します。
@AGENTS.md
## Claude Code
Run `pnpm typecheck` before proposing any change under `packages/api/`.
Claude 固有の内容が不要であればシンボリックリンクでも機能します: ln -s AGENTS.md CLAUDE.md。Windows では管理者権限か開発者モードがないとシンボリックリンクを作成できないため、そこではインポートのほうが安全です。直接読み取られた AGENTS.md は、/context や /memory の Memory files には表示されません。代わりにセッションに “AGENTS.md loaded” という行が出力されます。
AGENTS.md を CLAUDE.local.md と混同しないでください。後者は CLAUDE.md の個人用・gitignore 対象の相棒であり、ツール間の相互運用とは無関係です。
skills/、commands/、agents/ の違いは何か
commands と skills は同じ仕組みで動作し、どちらも /name で呼び出せます。ディレクトリリファレンスは、新規に作るものは skills/<name>/SKILL.md にするよう推奨しています。skill のディレクトリは指示と一緒に補助ファイルをまとめられるのに対し、command は単一の markdown ファイルだからです。既存の commands/*.md ディレクトリは引き続き機能します。フロントエンド向けに skill を構成する方法については、フロントエンドワークフローのための Claude Code skills のガイドを参照してください。
agents/*.md にはサブエージェントの定義が入り、それぞれが独自のプロンプトとツールリストを持ちます。どちらのディレクトリもプロジェクトスコープと ~/.claude の両方に存在し、いずれも設定ファイルへの登録ではなく、配置場所によって認識されます。
Claude Code の設定の優先順位: settings.json 対 settings.local.json
settings.json は共有されるプロジェクトファイル、settings.local.json はプロジェクトごとの個人用オーバーライドであり、両者が同じキーを設定した場合はローカルファイルが勝ちます。設定リファレンスは、優先度の高い順に 5 段階を挙げています。managed settings、コマンドライン引数、.claude/settings.local.json、.claude/settings.json、~/.claude/settings.json です。--settings に渡した JSON は、managed settings のすぐ下、自分の 3 つのファイルすべてより上に位置します。
引っかかりやすいのは、すべてのキーがこのスタックに従うわけではないという点です。permissions.allow、permissions.ask、permissions.deny といったリスト型のキーは、互いを置き換えるのではなくスコープをまたいで結合されます。そのため、チームメイトの共有 settings.json にある deny ルールは、あなたのローカルファイルが同じツールを allow していても効いてしまいます。このマージの例外となるのが 4 つのモデル関連キーです。fallbackModel は順序付きのチェーンなので、これを設定している最も優先度の高いファイルが値全体を提供します。modelPicker も同様ですが、managed settings、--settings、user settings のみを読み取り、プロジェクトファイルとローカルファイルのキーは無視します(Claude Code v2.1.242 以降)。managed な availableModels リストはそのまま適用され、自分で追加した分は破棄されますが、user、project、local のファイル間ではこれらの配列はマージされます。modelSettings はモデル単位で解決されます。
共有ファイル:
{
"$schema": "https://json.schemastore.org/claude-code-settings.json",
"cleanupPeriodDays": 30,
"permissions": {
"deny": ["Read(./.env)"]
}
}
ローカルファイル:
{
"cleanupPeriodDays": 7,
"permissions": {
"allow": ["Bash(npm run lint)"]
}
}
解決後のセッションでは cleanupPeriodDays: 7 が使われます。スカラーのキーではローカルファイルが共有ファイルより優先されるためです。パーミッションルールは両方とも有効なままで、npm run lint はプロンプトなしで実行され、.env の読み取りは依然としてブロックされます。設定ファイルは厳密な JSON です。// コメントや末尾のカンマを入れると、パースに失敗します。$schema の行はエディタの補完を有効にしますが、公開されているスキーマは最新の CLI リリースに追いついていないことがあるため、先週ドキュメント化されたばかりのキーに対する警告は、あなたのファイルよりもスキーマ側の事情を示している可能性が高いです。どの設定ファイルが読み込まれたかは /status で確認できます。
hooks と MCP サーバーはどこにあるのか
hooks は独立したファイルではありません。適用したいスコープの settings.json の hooks キーの下に置かれ、編集はセッションを再起動しなくても反映されます。MCP サーバーは対象者によって分かれます。.mcp.json はプロジェクトルートに置かれ、リポジトリとともに配布される、チーム共有のリストです。個人用の MCP サーバーは ~/.claude.json に置かれますが、このファイルはアプリの状態、OAuth データ、プロジェクトパスをキーとするローカルスコープのサーバーも保持しているため、手で編集する設定ファイルというよりはマシンの状態として扱ってください。
何をコミットし、何を gitignore するか
| パス | 内容 | 判断 |
|---|---|---|
CLAUDE.md | 毎セッション読み込まれる指示 | コミットする |
.claude/settings.json | チームのパーミッション、hooks、環境変数 | コミットする |
.claude/rules/*.md | トピック単位、必要に応じてパスでゲートされる指示 | コミットする |
.claude/skills/、.claude/commands/ | /name で呼ぶプロンプト | コミットする |
.claude/agents/*.md | サブエージェントの定義 | コミットする |
.mcp.json | チーム共有の MCP サーバー | コミットする |
.claude/settings.local.json | 個人のオーバーライド | 無視する |
CLAUDE.local.md | 個人の設定・好み | 無視する |
~/.claude/*、~/.claude.json | 個人およびマシンの状態 | リポジトリに入れない |
まだ ignore されていないリポジトリで Claude Code がそのローカルファイルに初めて書き込むとき、グローバルの git excludes に **/.claude/settings.local.json を追記します。この書き込みは、パーミッションのプロンプトに “Yes, and don’t ask again” と答えたときに発生します。手作業でファイルを作成した場合は何も追加されないため、エントリを明示的に書いておきましょう。
# Claude Code personal config
# settings.local.json is usually auto-excluded already; this covers hand-created files
.claude/settings.local.json
CLAUDE.local.md
共有設定は、クラウドセッションが参照するものでもあります。クラウドセッションはクリーンなクローンに対して実行されるためです。user ファイルと local ファイルは自分のマシンに留まり、そこには届きません。
~/.claude 配下はすべて平文
セッションのトランスクリプト、ツールの出力、貼り付けたテキスト、history.jsonl のプロンプトログは、すべて平文としてディスク上に置かれ、それらを守っているのはファイルパーミッションだけです。セッション中にコマンドがトークンを出力したなら、そのトークンはトランスクリプトの中に残っています。.credentials.json はログイン認証情報を保持し、保持期間のクリーンアップを免れます。それ以外の対象ファイルは cleanupPeriodDays を過ぎると削除されます。デフォルトは 30 日、最小は 1 で、0 は無効な値として拒否されます。
整理してみれば、このフォルダは見た目ほど大きくありません。指示は連結され、設定には優先順位があり、パーミッションはマージされ、ホームディレクトリはバージョン管理に入りません。上のツリーと自分の .claude/ を突き合わせ、誰も意図して作っていないファイルを削除し、次のプルリクエストに先を越される前に、2 行の .gitignore ブロックを追加しておきましょう。
FAQ
チームメイトがコミットした .mcp.json に含まれる MCP サーバーは、承認が必要ですか?
はい。インタラクティブなセッションでは、Claude Code は .mcp.json が宣言するプロジェクトスコープのサーバーを使う前に確認し、リポジトリ全体で一度ではなく開発者それぞれが回答します。これらの回答をクリアするには claude mcp reset-project-choices を実行します。非インタラクティブな文脈ではプロンプトを表示できません。claude -p の実行、Agent SDK のセッション、クラウドセッションは確認なしにプロジェクトスコープのサーバーを読み込むため、すべてのパーミッションモードでサーバーをブロックするには disabledMcpjsonServers を使ってください。
ファイルを編集せずに、1 セッションだけ Claude Code の設定を上書きするにはどうすればよいですか?
--settings に JSON ファイルのパスかインラインの JSON 文字列を渡します。これは managed settings の下、user、project、local の各ファイルの上に位置します。一部のキーには専用のフラグや環境変数もあり、どちらが勝つかはキーごとに決まります。--model と /model は ANTHROPIC_MODEL に優先し、CLAUDE_CODE_EFFORT_LEVEL は /effort に優先します。
セッション中に settings.json を編集すると、すぐに反映されますか?
その場でリロードされるキーと、セッション開始時に一度だけ読まれるキーがあるため、次回起動まで編集が無視されたように見えることがあります。パーミッションと hooks は再起動なしでリロードされますが、model、effortLevel、modelSettings は開始時に一度だけ読まれます。outputStyle の変更は v2.1.251 以降、次のメッセージから適用されますが、ターミナルではセッション中に作成・編集したスタイルファイルは再起動後にのみ認識されます。再起動しても値がおかしい場合は /status を実行し、優先順位を確認してください。.claude/settings.local.json のような、より高いスコープのファイルが同じキーを設定している可能性があります。
~/.claude 配下の projects フォルダを削除すると何が失われますか?
projects/ を削除すると、保持されていたトランスクリプトが失われ、過去のセッションを再開できなくなる場合がありますが、新しいセッションには影響しません。より的を絞った代替手段が claude project purge コマンドです。これは 1 つのプロジェクトについて、トランスクリプト、auto memory、タスク、ファイル履歴のエントリ、history.jsonl 内の該当するプロンプト行、そして ~/.claude.json 内のそのプロジェクトのエントリを削除します。shell-snapshots/ と backups/ はどちらもそのまま残ります。削除プランを 1 つずつ確認しながら進めるには -i を渡してください。