Claude Code の挙動は settings.json という設定ファイルと、ツール実行の許可・拒否を決める権限(permissions)の仕組みでカスタマイズできます。ここではプロジェクト単位・ユーザー単位の設定ファイルの階層と、安全に使うための権限ルールの書き方を解説します。これは Anthropic 公式の Claude Code に実在する機能です。
settings.jsonとは
settings.json は、Claude Code のふるまいを宣言的に設定するための JSON ファイルです。使うモデルや権限ルール、環境変数、フック(hooks)、状態行(status line)といった設定をここに書いておくと、起動のたびに手動で指定しなくても同じ設定でセッションを始められます。設定はチームで共有したり、プロジェクトごとに切り替えたりできます。
{
"permissions": {
"allow": ["Bash(npm run test:*)"],
"deny": ["Read(./secrets/**)"]
},
"env": {
"MY_FLAG": "1"
}
}
設定ファイルの階層
設定はいくつかの場所に置け、より狭いスコープの設定が優先されます。代表的なものは次の3種類です。
- ユーザー設定:
~/.claude/settings.json。すべてのプロジェクトに共通で適用される個人の設定。 - プロジェクト設定: リポジトリ内の
.claude/settings.json。チームで共有したい設定を置き、バージョン管理にコミットします。 - ローカルのプロジェクト設定:
.claude/settings.local.json。自分専用の上書きで、通常は.gitignoreに入れて共有しません。
同じ項目が複数の場所で指定された場合は、より狭い(ローカル → プロジェクト → ユーザー)スコープの値が優先されます。チーム共通のルールはプロジェクト設定に、自分だけの微調整はローカル設定に置くと管理しやすくなります。
権限(permissions)の仕組み
Claude Code は、ファイルの編集やコマンド実行など「副作用のある操作」を行う前に権限を確認します。既定では、変更を伴う操作や未許可のコマンドを実行しようとするたびに確認(プロンプト)が入ります。permissions 設定を使うと、どの操作を確認なしで許可し、どの操作を必ず拒否するかを事前に決められます。
権限ルールは ツール名(パターン) の形式で書きます。例えば Bash(npm run test:*) は「npm run test で始まる Bash コマンド」を、Read(./secrets/**) は「secrets ディレクトリ以下の読み取り」を表します。
allow・deny・askルールの書き方
権限は主に3つのリストで制御します。
- allow: 確認なしで自動的に許可する操作。よく使う安全なコマンド(テスト実行やビルドなど)を入れておくと、確認の手間が減ります。
- deny: 常に拒否する操作。機密ファイルの読み取りや破壊的なコマンドを禁止します。deny は allow より優先されます。
- ask: 実行前に必ず確認する操作。allow に入れるほどではないが完全に禁止もしたくない操作に使います。
{
"permissions": {
"allow": ["Bash(npm run lint:*)", "Bash(git status)"],
"ask": ["Bash(git push:*)"],
"deny": ["Read(./.env)", "Read(./secrets/**)"]
}
}
パターンの末尾の :* は「その語で始まる任意の続き」を意味します。範囲を広げすぎると意図しないコマンドまで自動許可されるため、必要な範囲に絞るのが安全です。
安全に使うベストプラクティス
- allow は「安全で頻繁に使う」操作だけに限定し、広すぎるワイルドカードは避ける。
- 機密ファイル(
.envや鍵ファイル)は deny に入れて読み取り自体を禁止する。deny は allow に優先されるため確実です。 - チーム共通の方針は
.claude/settings.jsonにコミットし、個人的な上書きは.claude/settings.local.jsonに置く。 - プロジェクト固有の前提(使用ライブラリ・命名規則など)は CLAUDE.md に書いておくと、設定と役割を分けられます。
関連記事: フックで操作を自動化する / プランモードの使い方