Claude Code を使っていて「毎回コマンドの許可を求められるのが面倒」「設定ファイルがあるらしいけど何を書けばいいかわからない」と感じていませんか?
settings.json を設定するだけで、確認ダイアログの煩わしさが激減し、セキュリティも保ちつつ快適に開発できるようになります。この記事では、まずコピペで使えるおすすめ設定を紹介し、その後で各項目の意味や応用設定を詳しく解説します。
おすすめの settings.json 設定(コピペ用)
まずは結論から。以下の設定はグローバル(~/.claude/settings.json)に置いても安全な内容に絞っています。
{
"env": {
"CLAUDE_CODE_LANGUAGE": "ja",
"BASH_DEFAULT_TIMEOUT_MS": "300000",
"BASH_MAX_TIMEOUT_MS": "1200000",
"ENABLE_TOOL_SEARCH": "true",
"DISABLE_COST_WARNINGS": "1"
},
"cleanupPeriodDays": 30,
"enableAllProjectMcpServers": false,
"includeCoAuthoredBy": true,
"permissions": {
"disableBypassPermissionsMode": "disable",
"allow": [
"Bash(grep:*)", "Bash(find:*)", "Bash(wc:*)",
"Bash(ls:*)", "Bash(echo:*)", "Bash(diff:*)",
"Bash(tree:*)", "Bash(file:*)", "Bash(which:*)",
"Bash(pwd:*)", "Bash(date:*)", "Bash(mkdir:*)",
"Bash(cp:*)", "Bash(mv:*)", "Bash(touch:*)",
"Bash(unzip:*)", "Bash(tar:*)", "Bash(zip:*)",
"Bash(git:*)", "Bash(node --version)", "Bash(npm:*)",
"Bash(npx:*)", "Bash(php:*)", "Bash(composer:*)",
"Bash(jq:*)", "Bash(sed:*)", "Bash(awk:*)",
"Bash(sort:*)", "Bash(xargs:*)", "Bash(python3 --version)",
"Bash(pip:*)", "Read(<strong>)", "Edit(./</strong>)",
"Edit(!vendor/<strong>)", "Edit(!.git/</strong>)",
"Write(./<strong>)", "Write(!vendor/</strong>)", "Write(!.git/**)",
"MultiEdit(./**)", "WebFetch", "WebSearch",
"mcp__context7__*", "mcp__github__get_*",
"mcp__github__list_*", "mcp__github__search_*"
],
"deny": [
"Bash(sudo *)", "Bash(su *)", "Bash(curl *)",
"Bash(wget *)", "Bash(nc *)", "Bash(ncat *)",
"Bash(telnet *)", "Bash(ssh *)", "Bash(scp *)",
"Bash(security *)", "Bash(pbcopy *)", "Bash(pbpaste *)",
"Bash(open *)", "Bash(rm *)", "Bash(rm -r *)",
"Bash(rm -rf *)", "Bash(git push --force *)", "Bash(git reset --hard *)",
"Read(./.env)", "Edit(./.env)", "Write(./.env)",
"Read(./.env.*)", "Edit(./.env.*)", "Write(./.env.*)",
"Bash(* .env*)", "Bash(* ~/.ssh/*)", "Bash(* ~/.aws/*)",
"Bash(* ~/.config/gh/*)", "Bash(* ~/.git-credentials)", "Bash(* ~/.netrc)",
"Bash(* ~/.npmrc)", "Read(~/.ssh/<strong>)", "Read(~/.aws/</strong>)",
"Read(~/.git-credentials)", "Read(~/.config/gh/**)", "Read(~/.netrc)",
"Read(~/.npmrc)", "Edit(~/.zshrc)", "Write(~/.zshrc)",
"Edit(~/.bashrc)", "Write(~/.bashrc)"
]
},
"hooks": {
"Notification": [
{
"matcher": "",
"hooks": [
{
"type": "command",
"command": "afplay /System/Library/Sounds/Glass.aiff"
}
]
}
],
"Stop": [
{
"matcher": "",
"hooks": [
{
"type": "command",
"command": "afplay /System/Library/Sounds/Glass.aiff"
},
{
"type": "command",
"command": "osascript -e 'display notification \"テストとコミットを確認してください\" with title \"Claude Code\" subtitle \"タスク完了\"'"
}
]
}
]
}
}
使い方
~/.claude/settings.json にこの内容をコピペするだけです。ファイルが存在しない場合は新規作成してください。
# ディレクトリがなければ作成
mkdir -p ~/.claude
# エディタで開く(VS Code の場合)
code ~/.claude/settings.json
カスタマイズのポイント
上記の設定は macOS + WordPress/Node.js, Python 開発 を想定しています。開発環境に合わせて以下を調整してください。
- Rust 開発者な
"Bash(cargo:*)","Bash(rustc:*)"を追加 - Windows ユーザーな
hooks内のafplayやosascriptは使えないので、代わりに PowerShell の通知コマンドに置き換えてください - git操作をClaude Codeに任せたくない場合な
"Bash(git:*)"をallowから外し、denyに"Bash(git commit:*)","Bash(git push:*)"等を追加
settings.json の配置場所と優先順位
3種類の設定ファイル
settings.json は配置する場所によって適用範囲が変わります。
| ファイルパス | 適用範囲 | 用途 |
|---|---|---|
~/.claude/settings.json |
全プロジェクト共通 (グローバル) |
どのプロジェクトでも> 使う共通設定 |
.claude/settings.json |
プロジェクト単位 (ローカル) |
チームで共有する設定 (Git管理可能) |
.claude/settings.local.json |
プロジェクト単位 (個人用ローカル) |
個人だけの設定 (.gitignore推奨) |
グローバルとローカルの使い分け
グローバルに書くべき設定として、git, grep, ls などの安全なコマンド許可、通知用の hooks 設定、env の言語設定やタイムアウトが挙げられます。どのプロジェクトでも共通して必要になる設定がこれに該当します。
プロジェクトローカルに書くべき設定としては、npm run format や npm run lint のような PostToolUse フック、プロジェクト固有の MCP サーバー許可、.env や secrets/ への Read 禁止設定などがあります。プロジェクトごとにコマンドや構成が異なるものはローカルに書きましょう。
settings.json と settings.local.json の違い
.claude/settings.json はGit管理に含めることができるため、チームメンバー全員で同じ設定を共有できます。一方 .claude/settings.local.json は .gitignore に追加して個人だけの設定を保持する用途に使います。
例えば、チーム共通で「rm -rf を禁止する」設定は .claude/settings.json に書き、個人的に使いたい通知音の設定は .claude/settings.local.json に書く、といった使い分けです。
設定の優先順位
複数の設定ファイルが存在する場合、以下の順番で適用されます(上が優先)。
- エンタープライズポリシー
- コマンドライン引数
- ローカルプロジェクト設定(
.claude/settings.local.json) - 共有プロジェクト設定(
.claude/settings.json) - ユーザー設定(
~/.claude/settings.json)
同じキーが複数の設定ファイルに存在する場合は、より上位のファイルの値が採用されます。
settings.json の各項目を解説
env(環境変数)
Claude Code 実行時に設定される環境変数です。
"env": {
"CLAUDE_CODE_LANGUAGE": "ja",
"BASH_DEFAULT_TIMEOUT_MS": "300000",
"BASH_MAX_TIMEOUT_MS": "1200000",
"ENABLE_TOOL_SEARCH": "true",
"DISABLE_COST_WARNINGS": "1"
}
| 変数名 | 説明 | 推奨値 |
|---|---|---|
CLAUDE_CODE_LANGUAGE |
UI・応答の言語 | "ja"(日本語) |
BASH_DEFAULT_TIMEOUT_MS |
Bashコマンドの デフォルトタイムアウト |
"300000"(5分) |
BASH_MAX_TIMEOUT_MS |
Bashコマンドの 最大タイムアウト |
"1200000"(20分) |
ENABLE_TOOL_SEARCH |
ツール検索機能を有効化 | "true" |
DISABLE_COST_WARNINGS |
コスト警告を非表示にする | "1" |
CLAUDE_CODE_ENABLE_TELEMETRY |
テレメトリの有効/無効 | "0"(無効) |
DISABLE_AUTOUPDATER |
自動更新を無効化 | "1" |
permissions(権限設定)
Claude Code がどのコマンドやファイル操作を実行できるかを制御します。
"permissions": {
"allow": [ ... ],
"deny": [ ... ]
}
allow で使えるパターン
| パターン | 説明 | 例 |
|---|---|---|
Bash(コマンド:*) |
特定コマンドの 全引数を許可 |
"Bash(git:*)" |
Bash(コマンド 引数) |
特定の引数のみ許可 | "Bash(npm run lint)" |
Read(**) |
全ファイルの 読み取り許可 |
- |
Edit(./**) |
カレントディレクトリ 配下の編集 |
- |
Edit(!パス/<strong>) |
特定パスを 編集対象から除外 |
"Edit(!vendor/</strong>)" |
Write(./**) |
カレントディレクトリ 配下への書き込み |
- |
MultiEdit(./**) |
複数箇所の同時編集 | - |
WebFetch |
Web ページの取得 | - |
WebSearch |
Web 検索 | - |
WebFetch(domain:ドメイン名) |
特定ドメインのみ Fetch 許可 |
"WebFetch(domain:example.com)" |
deny で使えるパターン
allow と同じパターンが使えます。deny は allow より優先されるため、allow で広く許可しつつ deny で危険な操作だけをピンポイントで禁止する運用が可能です。
グローバルに allow して安全なコマンド一覧
| 読み取り・表示系(リスクほぼゼロ): |
grep, find, wc, ls, pwd, echo, which, date, file, diff, tree
※ cat / head / tail / less は Claude Code の Read ツールで代替できるため、allow には含めていません。Bash 経由で機密ファイルを読まれるリスクを避けるのが目的です(grep ~/.ssh/id_rsa のような用途を防ぐため)。 |
|---|---|
| ファイル操作系(低リスク): | mkdir, cp, mv, touch, unzip, tar, zip, chmod |
| 開発ツール系(要注意): | git, npm, npx, jq, sed, awk, sort, xargs |
グローバルの deny に入れるべきコマンド
| macOS 固有: | osascript(任意), security, pbcopy, pbpaste, open |
|---|---|
| 削除・強制操作系: | rm *, rm -r *, rm -rf *(rm -rf / だけでは不十分) |
| 権限昇格: | sudo *, su * |
| 機密ファイル保護(Bash 経由): | Bash(* .env*), Bash(* ~/.ssh/*), Bash(* ~/.aws/*) など |
| 機密ファイル保護(Read/Edit/Write): | .env, ~/.ssh/<strong>, ~/.aws/</strong>, ~/.npmrc など
|
| ネットワーク系: | curl, wget, nc, ncat, telnet, ssh, scp
|
※rm 自体はプロジェクトローカルで必要に応じて許可するのが安全です。
disableBypassPermissionsMode(全権限バイパスを無効化)
"disableBypassPermissionsMode": "disable"
"disable" に設定すると、--dangerously-skip-permissions オプションによる全権限バイパスを無効化します。CI 等でスキップしたい場合は削除してください。
hooks(フック)
特定のイベントが発生したときに自動実行されるコマンドを設定します。
"hooks": {
"イベント名": [
{
"matcher": "マッチ条件",
"hooks": [
{
"type": "command",
"command": "実行するコマンド"
}
]
}
]
}
主なイベント一覧
| イベント名 | 発火タイミング |
|---|---|
Stop |
Claude Code のタスクが完了したとき |
Notification |
コマンド承認待ち・60秒間の入力待ち |
PermissionRequest |
コマンド実行の承認を求めるとき |
PostToolUse |
コマンド実行やファイル編集の後 |
PreToolUse |
コマンド実行やファイル編集の前 |
matcher の使い方
matcher を空文字 "" にすると主要なイベントにマッチします。特定の条件に限定したい場合は値を指定します。
{
"matcher": "Edit|Write|MultiEdit",
"hooks": [
{
"type": "command",
"command": "npm run format"
}
]
}
上記の例では、ファイル編集系のツール(Edit / Write / MultiEdit)が使われた後にだけ npm run format が実行されます。
hooks の注意点
hooks 内の command は1つのオブジェクトにつき1つだけです。複数のコマンドを実行したい場合は、hooks 配列に複数のオブジェクトを並べます。
"hooks": [
{ "type": "command", "command": "コマンド1" },
{ "type": "command", "command": "コマンド2" }
]
cleanupPeriodDays(クリーンアップ期間)
"cleanupPeriodDays": 30
古い会話履歴やキャッシュを自動削除するまでの日数です。デフォルトは30日です。長く保持したい場合は 60 などに変更します。
enableAllProjectMcpServers(MCP サーバー制御)
"enableAllProjectMcpServers": false
プロジェクト配下の .mcp.json に定義された MCP サーバーを自動承認するかどうかを制御します。false にすると、プロジェクトごとの MCP サーバーは毎回確認ダイアログが表示されます。信頼できないリポジトリを開いたときの自動実行を防ぐため、false 推奨。
includeCoAuthoredBy(共著者表記)
"includeCoAuthoredBy": true
true に設定すると、git コミットメッセージに Co-authored-by: Claude <claude@anthropic.com> が自動付与されます。AI との共同作業であることを明示したい場合に有効です。
enabledPlugins(プラグイン有効化)
"enabledPlugins": {
"feature-dev@claude-plugins-official": true,
"security-guidance@claude-plugins-official": true
}
公式・サードパーティのプラグインを有効化する設定です。利用可能なプラグインはバージョンによって異なります。
【初心者向け】Claude Code プラグインの導入ガイド - おすすめプラグインと設定方法
応用設定
基本設定に慣れてきたら、さらに便利な応用設定も試してみましょう。
statusLine(コンテキスト使用率の表示)
Claude Code のチャット入力欄の下にステータス情報を表示する機能です。コンテキストウィンドウの消費率を表示しておくと、auto-compact(自動圧縮)が走る前に対処できます。
ステップ1: スクリプトを作成
cat << 'EOF' > ~/.claude/statusline.sh
#!/bin/bash
input=$(cat)
CONTEXT_SIZE=$(echo "$input" | jq -r '.context_window.context_window_size')
USAGE=$(echo "$input" | jq '.context_window.current_usage')
if [ "$USAGE" != "null" ] && [ "$CONTEXT_SIZE" != "null" ] && [ "$CONTEXT_SIZE" != "0" ]; then
CURRENT=$(echo "$USAGE" | jq '.input_tokens + .cache_creation_input_tokens + .cache_read_input_tokens')
PERCENT=$((CURRENT * 100 / CONTEXT_SIZE))
echo "Context: ${PERCENT}%"
else
echo "Context: -"
fi
EOF
chmod +x ~/.claude/statusline.sh
ステップ2: settings.json に追加
"statusLine": {
"type": "command",
"command": "~/.claude/statusline.sh"
}
PostToolUse フック(自動 lint / format)
ファイル編集後に自動で lint や format を実行する設定です。CLAUDE.md にルールを書いても無視されることがありますが、hooks なら確実に実行されます。
プロジェクトごとにコマンドが異なるため、プロジェクトローカルの .claude/settings.json に書くのがおすすめです。
{
"hooks": {
"PostToolUse": [
{
"matcher": "Edit|Write|MultiEdit",
"hooks": [
{
"type": "command",
"command": "npm run format"
}
]
}
]
}
}
機密ファイルの Read 禁止
.env ファイルなどに API キーが含まれている場合、Claude Code による読み取りを禁止しておくと安心です。
{
"permissions": {
"deny": [
"Read(./.env)",
"Read(./.env.*)",
"Read(./secrets/**)",
"Read(./config/credentials.json)"
]
}
}
MCP サーバーの自動承認
MCP(Model Context Protocol)サーバーを使っている場合、参照系の操作は自動承認しておくと毎回の確認が不要になります。
{
"permissions": {
"allow": [
"WebFetch",
"WebSearch",
"mcp__context7__*",
"mcp__github__get_*",
"mcp__github__list_*",
"mcp__github__search_*"
]
}
}
まとめ
Claude Code の settings.json を設定することで得られるメリットは大きく3つあります。
1つ目は作業効率の向上です。
安全なコマンドを事前に許可しておくことで、毎回の確認ダイアログから解放されます。
2つ目はセキュリティの確保です。deny で危険なコマンドを明示的に禁止し、機密ファイルへのアクセスを制限することで、意図しない事故を防げます。
3つ目は通知による見逃し防止です。
hooks を設定しておけば、タスク完了や承認待ちを通知で知らせてくれるため、待ち時間を有効活用できます。
まずは本記事のおすすめ設定をコピペして試してみてください。使いながら自分の開発スタイルに合わせて調整していくのがベストです。
関連記事
Vibe Codingのワークフロー 準備編3 - CLAUDE.mdの作成と最適化設定
【初心者向け】Claude Code プラグインの導入ガイド - おすすめプラグインと設定方法

