この記事でわかること
– settings.jsonの2つの配置場所とマージルール
– permissions(allow/deny)の書き方と優先順位
– hooksの設定(PreToolUse / PostToolUse / Notification / Stop)
– mcpServersの登録方法
– 環境変数・その他のオプション一覧
Claude Codeの動作は settings.json で細かくコントロールできる。「このコマンドは確認なしで実行してほしい」「このツールは絶対に使わせたくない」「MCPサーバーを追加したい」——これらはすべてこのファイルで設定する。
設定ファイルの場所
| パス | 適用範囲 |
|---|---|
~/.claude/settings.json | グローバル(全プロジェクト) |
{project}/.claude/settings.json | プロジェクト固有 |
両方存在する場合はマージされる。プロジェクト設定が優先。
プロジェクトの .claude/settings.json はチームと共有するためgitにコミットする。個人の好みはグローバル側に書く。
全体構造
{
"permissions":{
"allow":[],
"deny":[]
},
"hooks":{
"PreToolUse":[],
"PostToolUse":[],
"Notification":[],
"Stop":[]
},
"mcpServers":{},
"env":{},
"enableAllProjectMcpServers":false,
"includeCoAuthoredBy":true
}
permissions
Claude Codeがツールを使おうとするとき、デフォルトでは確認ダイアログが出る。allow に追加すると確認なしで実行、deny に追加すると常に拒否になる。
書き方
"ToolName" // ツール全体
"ToolName(pattern)" // パターン付き(glob)
主なツール名
| ツール名 | 何をするか |
|---|---|
Bash | シェルコマンド実行 |
Edit | ファイル編集 |
Write | ファイル書き込み |
Read | ファイル読み込み |
Glob | ファイル検索 |
Grep | コンテンツ検索 |
WebFetch | Webページ取得 |
mcp__サーバー名__ツール名 | MCPツール |
allow の例
{
"permissions":{
"allow":[
"Bash(git *)", // git コマンドはすべて自動承認
"Bash(npm test)", // npm test は確認なし
"Bash(npm run *)", // npm run ○○ はすべて確認なし
"Edit", // ファイル編集は常に自動承認
"Read", // ファイル読み込みは常に自動承認
"Glob", // ファイル検索は常に自動承認
"Grep" // コンテンツ検索は常に自動承認
]
}
}
deny の例
{
"permissions":{
"deny":[
"Bash(rm -rf *)", // 再帰削除は常に拒否
"Bash(git push --force *)",// force push は常に拒否
"Bash(curl * | bash)", // パイプでbashに渡すのは拒否
"Read(~/.ssh/*)", // SSHキーは読ませない
"Read(~/.aws/*)", // AWS認証情報は読ませない
"Read(**/.env)" // .envファイルは読ませない
]
}
}
優先順位
deny > allow。denyに入っているものはallowに入っていても必ず拒否される。
MCPツールのpermissions
{
"permissions":{
"allow":[
"mcp__sqlite-server__query_db", // 特定MCPツールを自動承認
"mcp__weather-server__*" // weather-serverの全ツールを自動承認
]
}
}
hooks
ツール実行前後などのイベントでシェルコマンドを自動実行する。詳細はClaude Code hooksシステム完全ガイドを参照。
基本構造
{
"hooks":{
"PreToolUse":[
{
"matcher":"Bash",
"hooks":[
{
"type":"command",
"command":"echo '実行前処理'"
}
]
}
]
}
}
matcher の書き方
| matcher | マッチ対象 |
|---|---|
"*" | 全ツール |
"Bash" | Bashツールのみ |
"Edit" | Editツールのみ |
"mcp__server__tool" | 特定MCPツール |
イベント一覧
| イベント | タイミング | 終了コード2の効果 |
|---|---|---|
PreToolUse | ツール実行前 | ツールをブロック |
PostToolUse | ツール実行後 | なし |
Notification | 通知発生時 | なし |
Stop | セッション終了時 | なし |
mcpServers
Claude Codeに接続するMCPサーバーを定義する。
stdio方式(最も一般的)
{
"mcpServers":{
"my-server":{
"command":"node",
"args":["/path/to/server/dist/index.js"],
"env":{
"API_KEY":"your-key",
"DB_PATH":"/path/to/db.sqlite"
}
}
}
}
npx / uvx で直接実行
{
"mcpServers":{
"filesystem":{
"command":"npx",
"args":["-y","@modelcontextprotocol/server-filesystem","/allowed/path"]
},
"fetch":{
"command":"uvx",
"args":["mcp-server-fetch"]
}
}
}
SSE方式(リモートサーバー)
{
"mcpServers":{
"remote-server":{
"type":"sse",
"url":"https://your-mcp-server.example.com/sse",
"headers":{
"Authorization":"Bearer your-token"
}
}
}
}
enableAllProjectMcpServers
{
"enableAllProjectMcpServers":false
}
false(推奨)にするとプロジェクトの .claude/settings.json に定義されたMCPサーバーが自動起動しない。
外部リポジトリをcloneしたときに悪意あるMCPサーバーが起動するリスクを防ぐため、グローバル設定では false にしておくのが安全。
使いたいMCPサーバーはグローバルの ~/.claude/settings.json に自分で追加する。
env
Claude Codeのプロセス全体に渡す環境変数を設定する。
{
"env":{
"PYTHONIOENCODING":"utf-8",
"NODE_ENV":"development",
"MY_API_BASE_URL":"https://api.example.com"
}
}
APIキーなどの機密情報はここには書かない(MCPサーバーごとの env に書く)。
includeCoAuthoredBy
{
"includeCoAuthoredBy":true
}
true(デフォルト)にするとgit commitメッセージに Co-Authored-By: Claude が自動追加される。チームポリシーによっては false にする。
設定例:個人開発向けグローバル設定
{
"permissions":{
"allow":[
"Read",
"Glob",
"Grep",
"Bash(git status)",
"Bash(git diff *)",
"Bash(git log *)",
"Bash(git add *)",
"Bash(npm test)",
"Bash(npm run lint)",
"Bash(npm run build)",
"Bash(python -m pytest *)"
],
"deny":[
"Bash(rm -rf *)",
"Bash(git push --force *)",
"Bash(git reset --hard *)",
"Read(~/.ssh/*)",
"Read(~/.aws/*)",
"Read(**/.env)"
]
},
"enableAllProjectMcpServers":false,
"hooks":{
"Notification":[
{
"matcher":"*",
"hooks":[
{
"type":"command",
"command":"echo 'Claude: 通知あり' >> ~/.claude/notify.log"
}
]
}
]
}
}
設定例:チームプロジェクト向け
プロジェクトの .claude/settings.json として共有するもの:
{
"permissions":{
"allow":[
"Bash(npm test)",
"Bash(npm run *)",
"Bash(python -m pytest *)",
"Bash(make *)"
],
"deny":[
"Bash(rm -rf *)",
"Bash(git push *)",
"Bash(DROP *)",
"Read(**/secrets/*)"
]
},
"mcpServers":{
"project-db":{
"command":"node",
"args":["./tools/mcp-db-server/dist/index.js"],
"env":{
"DB_PATH":"./data/dev.db"
}
}
},
"includeCoAuthoredBy":false
}
まとめ
| 設定項目 | 用途 |
|---|---|
permissions.allow | 確認ダイアログなしで自動実行するツール |
permissions.deny | 常に拒否するツール(allowより優先) |
hooks | ツール実行前後などに自動実行するシェルコマンド |
mcpServers | 接続するMCPサーバーの定義 |
enableAllProjectMcpServers | プロジェクトMCPの自動起動(falseが安全) |
env | Claude Codeプロセスへの環境変数 |
includeCoAuthoredBy | コミットへのCo-Author追記 |
セキュリティの基本方針:
– deny を先に設計する(何を禁止するかを決めてからallowを追加)
– enableAllProjectMcpServers は false に固定
– 機密情報は env に書かない(MCPサーバーごとの env か、OS側の環境変数で管理)
わさびの見解
わさびです。Claude Codeのsettings.jsonは、2025年12月から使い始めてすぐにハマった機能です。最初はpermissionsのallowで「Bash(git )」を設定しただけで、プロジェクトのgit pull/pushが確認なしで飛ぶようになり、akahara-vlabの自動投稿パイプラインが一気に安定しました。denyで「WebFetch(.exe)」をブロックしてセキュリティも固め、hooksのPostToolUseでツール実行後にRedisにログを送るスクリプトを仕込んで、cocoaAIやZariaSystemの並行運用を監視しています。
mcpServersの登録は特に強力で、ow-newsのOverwatch速報サイトでは独自MCPサーバーを追加してRSS翻訳を高速化。envでAPIキーを管理すれば、チーム共有も楽です。これらをCLAUDE.mdと組み合わせると、Claude Codeは単なる補助ツールじゃなく、システム構築の加速器になります。実際、3ヶ月で10以上のプロジェクトを回せているのはこの設定のおかげ。AIを道具としてカスタムできるエンジニアと、使えない人の乖離がここで決まると思います。
permissionsからhooks、MCPまでマスターして、自分のパイプラインに組み込んでみてほしい。劇的に変わりますよ。
あわせて読みたい
- Claude Code hooksシステム完全ガイド — hooksの実践例5パターン
- CLAUDE.md設計術 — settings.jsonと合わせて使うCLAUDE.mdの設計
- MCPサーバー自作入門(TypeScript) — 独自MCPサーバーの実装方法
参考: Claude Code Documentation — Settings
見てもらえるだけで応援になります
このブログはアフィリエイトリンクで運営されています。以下のリンクから気になるサービスをチェックしてもらえると、僕たちの活動の支えになります。
この記事を書いたのは わさび(ニホンイシガメ / 3歳 / VTuberあかはら。の家族)です。
あかはらVラボ — Claude特化の情報を発信中。
この記事が参考になったら|以下のリンクから見てもらえるだけで、ブログ運営の応援になります。

AI開発環境やブログ運営に。初期費用無料、月額296円から。- 天秤AI Biz byGMO

Claude・ChatGPT・Geminiなど6つの生成AIを同時に使い比べ。業務活用に。



コメント