
【Claude Code】.claudeフォルダの中身を全部解説する
Claude Codeを使っていると、プロジェクトのルートに .claude/ というフォルダができていることに気づく。
「勝手に作られたけど何が入ってるの?」「消して大丈夫?」——そういう疑問を持ったことがあるはず。
この記事では .claude/ フォルダの中身を全部解説する。
.claudeフォルダの全体像
.claude/ はClaude Code専用の設定フォルダ。中身はこの3種類:
.claude/
├── settings.json ← 権限・Hooks・追加ディレクトリの設定
├── commands/ ← カスタムスラッシュコマンド
│ ├── blog-post.md
│ └── review.md
└── hooks/ ← Hook用シェルスクリプト
├── guard.sh
└── log-write.sh
それぞれ役割が全く違う。順番に見ていく。
settings.json——Claude Codeの動作設定
.claude/settings.json はClaude Codeの動作を制御するファイル。主に3つのことを設定できる。
① 権限(permissions)
Claude Codeが実行を許可するコマンドやアクセス先を指定する。
{
"permissions": {
"allow": [
"Bash(git add:*)",
"Bash(git commit:*)",
"Bash(npm run:*)",
"WebFetch(domain:github.com)"
]
}
}
allow に書いたコマンドは確認なしで実行される。書いていないコマンドはClaude Codeが実行前に許可を求めてくる。
よく使うコマンドは最初にまとめて許可しておくと、作業のテンポが上がる。
② 追加ディレクトリ(additionalDirectories)
ディレクトリ構成の記事で解説したように、Claude Codeは起動したディレクトリ以下しか見えない。additionalDirectories を使うと、別の場所にあるファイルも参照できるようになる。
{
"permissions": {
"additionalDirectories": [
"/Users/yourname/shared-utils",
"/Users/yourname/another-project/src"
]
}
}
複数プロジェクトをまたいで作業するときや、共有ライブラリを参照させたいときに使う。
③ Hooks
Claude Codeのツール実行タイミングにシェルコマンドを差し込む設定。Hooksの仕組みの記事・Hooksで自動化する記事で詳しく解説している。
{
"hooks": {
"PostToolUse": [
{
"matcher": "Write",
"hooks": [
{
"type": "command",
"command": "/path/to/project/.claude/hooks/log-write.sh"
}
]
}
]
}
}
settings.jsonはどこに置く?
settings.jsonは2か所に置ける。
| 場所 | パス | 適用範囲 |
|---|---|---|
| プロジェクト限定 | .claude/settings.json |
そのプロジェクトのみ |
| 全プロジェクト共通 | ~/.claude/settings.json |
すべてのプロジェクト |
「このプロジェクトだけgit pushを許可したい」ならプロジェクト側に書く。「どのプロジェクトでもnpm runは許可したい」ならホーム側に書く。
両方ある場合はマージされる。プロジェクト側がホーム側を上書きするのではなく、両方の設定が合わさって適用される。
commands/——カスタムスラッシュコマンド
.claude/commands/ フォルダにMarkdownファイルを置くと、そのファイル名がスラッシュコマンドになる。
.claude/commands/blog-post.md → /blog-post
.claude/commands/review.md → /review
チャットで /blog-post と入力すると、blog-post.md の内容がプロンプトとして展開される。
使い方
Markdownファイルの中に、Claudeへの指示を書くだけ:
# 役割
あなたはブログ執筆エージェントです。
以下の手順で記事を作成してください。
1. series-plan.mdを読んで次の回を確認する
2. 構成案をユーザーに提示する
3. 承認を得たら執筆する
複雑な作業手順を毎回入力する手間が省けるので、定型作業が多いプロジェクトで特に便利。
プロジェクト限定 vs 全体共通
| 場所 | パス | 使える範囲 |
|---|---|---|
| プロジェクト限定 | .claude/commands/ |
そのプロジェクト内のみ |
| 全体共通 | ~/.claude/commands/ |
すべてのプロジェクト |
「このプロジェクトでだけ使うコマンド」はプロジェクト側に、「どこでも使う汎用コマンド」はホーム側に置く。
hooks/——Hookスクリプトの置き場所
.claude/hooks/ はHookで使うシェルスクリプトを置くディレクトリ。Claude Codeが自動で読む場所ではなく、settings.jsonから参照するための置き場所として使う。
.claude/hooks/
├── guard.sh ← 危険なコマンドをブロック
├── prettier.sh ← ファイル保存時にフォーマット
└── log-write.sh ← 変更ファイルをログに記録
settings.jsonからは絶対パスで参照する:
{
"hooks": {
"PreToolUse": [
{
"matcher": "Bash",
"hooks": [
{
"type": "command",
"command": "/Users/yourname/my-project/.claude/hooks/guard.sh"
}
]
}
]
}
}
スクリプトは chmod +x で実行権限を付けておく必要がある。
Hookの実装例はHooksで自動化する記事にまとめている。
.claudeフォルダはGitに入れる?
結論:settings.jsonとcommands/は入れる。hooks/も入れる。ただし内容に注意。
入れるべきもの
settings.json— チームで共有すれば全員が同じ権限設定・Hooksで動けるcommands/— プロジェクト固有のカスタムコマンドはチームで共有できるhooks/— lint・ガードなどはチームで統一したほうがいい
注意点
- settings.jsonにAPIキーや個人トークンを書いていないか確認する
- Hooksのスクリプトにローカルの絶対パスがハードコードされている場合、他の人の環境で動かない。スクリプト内で
$CLAUDE_PROJECT_DIRなどの変数を使うか、パスを動的に取得する工夫が必要
個人設定(名前・文体など)は ~/.claude/ 側に置き、リポジトリには入れないのが原則。これはCLAUDE.mdの記事で解説した「個人設定とプロジェクト設定の分離」と同じ考え方。
まとめ
| ファイル/フォルダ | 役割 |
|---|---|
settings.json |
権限・Hooks・追加ディレクトリの設定 |
commands/ |
カスタムスラッシュコマンドの定義 |
hooks/ |
Hookスクリプトの置き場所 |
.claude/はプロジェクトとホーム(~/.claude/)の2か所に存在できる- プロジェクト側はGitで管理してチームと共有、個人設定はホーム側に分離
- Hooksの詳細はHooksとは何か・Hooksで自動化するへ
関連記事
- ディレクトリ構成とClaude Codeの関係 — 起動場所とCLAUDE.mdの探し方
- CLAUDE.mdとは?プロジェクトにルールを設定する — CLAUDE.mdの書き方
- Hooksとは何か——Claude Codeの動作に割り込む — Hooksの仕組み
- Hooksで自動化する — Hookの実装例