Claude Code
Claude Code の権限: allow・ask・deny ルール、ルール構文、許可ツール
Claude Code の権限はどう動作し、特定のツールを許可またはブロックするにはどうすればよいですか?
Claude Code はすべてのツール呼び出しを settings ファイル内の権限ルールと照合します。ルールは permissions.allow、permissions.ask、permissions.deny に記述し、Tool または Tool(specifier) の形式を使います。評価順は deny、ask、allow の順です。/permissions を使うと、すべてのルールとその定義元ファイルを確認できます。1 セッションだけなら --allowedTools と --disallowedTools を渡します。
このページは英語版ガイドの翻訳です。コマンド、設定キー、コードは原文のままです。内容に差異がある場合は英語版が優先されます。 英語版を読む → · 他の言語: 简体中文 · 한국어 · Español · Português (Brasil)
設定の変更をいち早くチェック
これらのツールの設定、フラグ、権限ルールが変わったときに、週 1 回メール(英語)でお知らせします。内容は公式ドキュメントで確認済みです。
allow、ask、deny
- allow ルールに一致するツールは、確認なしで Claude Code が使用できます。
- ask ルールに一致するツールは、使用のたびに確認を求めます。
- deny ルールに一致するツールはブロックされます。
- 評価順は deny、ask、allow です。最初に一致したものが優先され、具体性で順序は変わりません。そのため Bash(aws *) のような広い deny は、Bash(aws s3 ls) のような狭い allow より優先されます。
- Bash のようにツール名だけの deny ルールは、そのツールを Claude のコンテキストから削除します。Bash(rm *) のようにスコープを絞った deny はツールを残し、一致する呼び出しだけをブロックします。
ルールを強制するのはモデルではなく Claude Code です。CLAUDE.md の指示は Claude が何をしようとするかに影響しますが、何が許可されるかは変わりません。
ツール別のルール構文
- ツール全体: 括弧なしの Bash、Read、WebFetch。Bash(*) は Bash と同じです。
- Bash: Bash(npm run build) はそのコマンドに完全一致します。Bash(npm run *) はすべての npm スクリプトに一致します。* はサブコマンドの後に置きます。Bash(git log *) は git log だけを許可し、Bash(git *) はすべての git コマンドを許可します。
- Bash(ls *) は ls の後にスペースが必要なので、lsof には一致しません。Bash(ls:*) は末尾ワイルドカードの同等の書き方です。
- Read と Edit は gitignore パターンを使います。Read(./.env) はカレントディレクトリの .env ファイルを、Read(./secrets/**) はフォルダをブロックします。どのツールにも変更させたくないパスには、Write ルールではなく Edit ルールを使います。
- パス: //path はファイルシステムのルートからの絶対パス、~/path はホームフォルダから、/path は settings ファイルのプロジェクトからの相対パス、path または ./path はカレントディレクトリからの相対パスです。
- WebFetch: WebFetch(domain:example.com) は example.com だけに一致します。サブドメインには WebFetch(domain:*.example.com) を追加します。
- MCP: mcp__github は github サーバーのすべてのツールに、mcp__github__get_* はその get_ ツールに、mcp__github__create_issue は 1 つのツールに一致します。
- サブエージェント: Agent(Explore) または Agent(my-custom-agent)。deny に入れると、Claude はそのサブエージェントを使えなくなります。
設定例
.claude/settings.json
{
"permissions": {
"allow": [
"Bash(npm run *)",
"Bash(git commit *)",
"WebFetch(domain:docs.example.com)",
"mcp__github__get_*"
],
"ask": ["Bash(git push *)"],
"deny": [
"Read(./.env)",
"Read(./secrets/**)",
"Bash(rm *)"
]
}
}プロジェクトの .claude/settings.json にある allow ルールと additionalDirectories は、そのフォルダのワークスペース信頼ダイアログを承認した後にのみ有効になります。deny と ask ルールはすぐに適用されます。
コマンドラインでの許可ツール
- --allowedTools(または --allowed-tools): 確認なしで実行するツール。同じルール構文を使います。
- --disallowedTools(または --disallowed-tools): このセッションの deny ルール。"mcp__*" はすべての MCP ツールを削除します。
- --tools: 存在する組み込みツール自体を制限します。例: "Bash,Edit,Read"。
- --add-dir: Claude が読み取り・編集できる作業ディレクトリを追加します。永続化するには permissions.additionalDirectories に保存します。
ターミナル
claude -p "summarize recent changes" \ --allowedTools "Bash(git log *)" "Bash(git diff *)" "Read" \ --disallowedTools "Edit"
デフォルトで確認されるもの、"don't ask again" で保存されるもの
- ファイル読み取りや Grep などの読み取り専用ツール: 作業ディレクトリと追加ディレクトリ内では確認なし。
- Bash コマンド: 組み込みの読み取り専用コマンドを除き確認あり。"Yes, and don't ask again" はそのリポジトリとコマンドについて永続的に保存されます。
- ファイルの編集と書き込み: 確認あり。"Don't ask again" はセッション終了までのみ有効で、ファイルには保存されません。
- WebFetch: 組み込みの事前承認済みドキュメントドメインを除き確認あり。承認はリポジトリとドメインごとに保存されます。
- WebSearch: 確認あり。承認はリポジトリごとに保存されます。
保存された承認は、git リポジトリのルート(worktree の場合はメインのチェックアウトに解決)にある .claude/settings.local.json にルールとして書き込まれるため、サブディレクトリや worktree でも適用されます。git status && npm test のような複合コマンドを承認すると、承認が必要だった各サブコマンドごとに別々のルールが保存されます(最大 5 ルール)。/permissions は Claude の作業中にも開けます。追加・削除したルールは Claude の次のツール呼び出しから適用されます。
確認されない Bash コマンドと、Claude Code が透過するラッパー
- 読み取り専用コマンドはどのモードでも確認なしで実行されます。組み込みセットには ls、cat、echo、pwd、head、tail、grep、find、wc、which、diff、stat、du、cd、および git の読み取り専用形式が含まれます。このセットは設定できません。確認させたい場合は ask または deny ルールを追加します。
- 一部の読み取り専用コマンドは Manual モードでは確認されます。例: クォートされていない glob を伴う find、sort、sed、git や、別ディレクトリへの cd と git の組み合わせ。
- 照合の前に、Claude Code は timeout、time、nice、nohup、stdbuf、command、builtin、zsh の noglob を取り除きます。そのため Bash(npm test *) は timeout 30 npm test にも一致します。フラグなしの xargs と、安全と分かっている環境変数の先頭代入も取り除きます。
- npx、docker exec、direnv exec、devbox run、mise exec などのランナーは取り除かれません。Bash(devbox run *) は run 以降の何にでも一致するため、Bash(devbox run npm test) のように内側のコマンドごとに完全一致ルールを書きます。
- プレフィックスルールでは、watch、setsid、ionice、flock などの exec ラッパーや、-exec、-delete、-fprint 付きの find を自動承認できません。コマンド全体の完全一致ルールか、PreToolUse hook を使います。
Bash の deny ルールで防げないもの
Bash ルールは Claude が書いたコマンドテキストと照合します。deny と ask ルールは、サブシェル、コマンド置換、for ループ内を含め、いずれかのサブコマンドが一致すれば適用されます。同じプログラムを別の方法で呼び出した場合は捕捉しません。
- Bash(curl *) は curl https://example.com を止めますが、/usr/bin/curl https://example.com や sh -c 'curl https://example.com' は止めません。
- Bash(rm *) は rm -rf build/ を止めますが、/bin/rm -rf build/ や bash -c 'rm -rf build/' は止めません。
- Bash(git push *) は git push origin main を止めますが、git -C . push origin main は止めません。
- Bash(curl http://github.com/ *) のように引数を制限しようとするパターンは、URL の前のフラグ、https、リダイレクト、変数を見逃します。
- 出力リダイレクト(>、>>、2>)と tee の出力先は Edit ルールと作業ディレクトリに照らしてチェックされます。そのため Bash(git commit *) はコマンドを許可しますが、出力の書き込み先までは許可しません。
コマンドテキストに関係なく有効な制限には、sandbox のネットワーク・ファイルシステムルールか、コマンド全体を検査する PreToolUse hook を使います。Web アクセスを制限するには、curl と wget を deny し、信頼するサイトに WebFetch(domain:...) を allow します。Bash が許可されている間は、WebFetch ルールだけではネットワークアクセスをブロックできません。
どの設定が優先されるか
- どのレベルの deny も、別のレベルで allow することはできません。ユーザー設定で許可しプロジェクト設定で拒否した場合は拒否され、逆も同様です。
- managed settings が最優先です。--allowedTools でも managed の deny は上書きできませんが、--disallowedTools で制限を追加することはできます。
- allowManagedPermissionRulesOnly を使うと、managed settings が権限ルールの唯一の定義元になります。
- permissions.disableBypassPermissionsMode または permissions.disableAutoMode を "disable" に設定すると、それらのモードをブロックできます。managed settings で使うと特に便利です。
権限モード
ルールはセッションの権限モードの上に適用されます: default(Manual)、acceptEdits、plan、auto、dontAsk、bypassPermissions。claude --permission-mode <mode> か、settings の permissions.defaultMode で設定します。dontAsk は、allow ルールで承認済みのツール以外で確認が必要なものをすべて拒否します。確認なしで実行するには、Claude Code ですべてのコマンドを許可するガイドを参照してください。
出典
このガイドで確認した公式ドキュメント(英語)です。 英語版の確認日: 2026-10-18
その他の日本語ガイド
- あらゆる AI コーディングエージェントで全コマンドを許可する方法:Cursor、Claude Code、Codex、Gemini CLI、Copilot CLI ほか 7 ツール(2026)
- あらゆる AI コーディングエージェントのルール・指示ファイル:.cursor/rules、CLAUDE.md、AGENTS.md、GEMINI.md、Copilot instructions など(2026)
- あらゆる AI コーディングエージェントの設定ファイルの場所:Claude Code、Cursor、Codex、Gemini CLI、OpenCode、Qwen Code、Amp、Factory Droid(2026)
- あらゆる AI コーディングエージェントに MCP サーバーを追加する方法:Claude Code、Cursor、Codex、Gemini CLI、VS Code ほか 8 ツール(2026)
- あらゆる AI コーディングエージェントの hook:Claude Code、Cursor、Gemini CLI、GitHub Copilot、Kiro、Factory Droid(2026)
- あらゆる AI コーディングエージェントの Agent Skills(SKILL.md):Claude Code、Codex、Cline、Amp、OpenHands(2026)
- Claude Code にすべてのコマンドを実行させる方法: 権限モード、allow ルール、権限スキップ
- Cursor にすべてのコマンドを実行させる方法: Run Everything、allowlist、sandbox
- Cursor ルールの設定: Project・User・Team Rules、.mdc frontmatter、globs、AGENTS.md
- Claude Code に MCP サーバーを追加する(claude mcp add、.mcp.json、スコープ)
- サブエージェントとカスタムエージェントの比較: Claude Code vs Codex vs Cursor vs Gemini CLI vs GitHub Copilot(2026)