Claude Code の権限設定(deny/ask/allow)の基本と、効く範囲・効かない範囲

結論

  • 権限ルールは deny(禁止)・ask(毎回確認)・allow(確認なしで許可)の3種類で、deny → ask → allow の順に評価されます。deny に当たった操作は、allow に書いても使えません。
  • deny は Claude の読み取りツールや cat、curl といった「ふつうに書く操作」を止めます。一方で、スクリプトが自分でファイルを開く読み方は止めません。
  • deny は「うっかり」を防ぐ網として使い、本物の秘密情報は作業フォルダに置かない運用と組み合わせます。

権限設定とは

Claude Code(Anthropic 社が提供する、ターミナルで動く AI コーディングエージェント)は、ファイルを読む・書く、コマンドを実行する、といった操作のたびに、設定ファイルに書かれた権限ルールを確かめます。ルールは JSON 形式の settings.json の permissions の中に書きます。

ルールの種類は次の3つです。

  • deny: その操作を禁止する
  • ask: 実行する前に毎回、利用者に確認を求める
  • allow: 確認なしで実行を許可する

公式ドキュメントでは、ルールは deny、ask、allow の順に評価され、最初に当たったものが結果を決めると説明されています。たとえば Bash(aws *) を deny にすると、より細かい Bash(aws s3 ls) を allow に書いても止まります。allow で deny に例外を作ることはできない、という点を押さえておくと、ルールを組み立てるときに迷いません。

CLAUDE.md(Claude Code が起動時に読む説明書きのファイル)に「.env を読まないこと」と書くのは AI へのお願いです。これに対して権限ルールは、Claude Code 本体が操作を止めます。守らせたいことは、文章ではなく権限ルールに書くのが基本です。

設定ファイルの置き場所と優先順位

設定ファイルは置き場所によって効く範囲が変わります。情シスが押さえておきたいのは次の4つです。

置き場所効く範囲・使いどころ
.claude/settings.json(作業フォルダの中)そのフォルダで使う全員。Git で共有すれば同じルールを配れる
.claude/settings.local.json自分だけ、そのフォルダだけ。個人の好みを書く
~/.claude/settings.json自分が使うすべてのプロジェクト
管理用設定(Windows では C:\Program Files\ClaudeCode\managed-settings.json など)その PC の利用者全員。利用者は上書きできない

同じ項目が複数の場所にあるときは、管理用設定 → コマンドライン → settings.local.json → プロジェクトの settings.json → ユーザーの settings.json の順に優先されます。社内で配るなら、まずプロジェクトの .claude/settings.json から始め、全員に強制したいルールが固まってから管理用設定を検討する流れが無理のない順番です。

ルールの書き方

ルールは「ツール名(対象)」の形で書きます。ファイルの読み取りは Read(パス)、コマンドは Bash(コマンド *) です。.env を読ませず、curl での外部送信を止め、git push は禁止する最小の例は次のとおりです。

{
  "permissions": {
    "deny": [
      "Read(./.env)",
      "Bash(curl *)",
      "Bash(git push *)"
    ]
  }
}

実データを置くフォルダも読ませたくない場合は、Read(./data/raw/**) のように ** を使ってフォルダの中身全体を指定します。書いたあとは、Claude Code の中で /permissions を実行し、ルールが読み込まれているかを確かめます。

deny で止まる操作

中小DXラボで、Windows 11、Git for Windows、Claude Code 2.1.296 の環境を使い、ダミーの .env(中身はテスト用の値)を置いたフォルダで上の設定を試しました(2026年10月)。結果は次のとおりです。

頼んだこと結果
Claude の読み取りツールで .env を読む止まった
cat .env を実行する止まった
curl で外部にアクセスする止まった
Python スクリプトの中で .env を開いて表示する読めてしまった

deny で止まらない操作

最後の行は不具合ではなく、公式ドキュメントに書かれた仕様どおりの動きです。執筆時点の公式ドキュメントでは、Read と Edit の deny は次のように説明されています(要約)。

  • Claude の組み込みのファイルツールには効く
  • cat、head、tail など、Claude Code がファイルを読むコマンドと認識できるものには効く
  • Python や Node のスクリプトが自分でファイルを開くような、間接的な読み書きには効かない

コマンドのルールも同じ考え方です。Bash(curl *) は curl https://… という書き方は止めますが、/usr/bin/curl のようにパスで呼ぶ書き方や、sh -c '…' で包む書き方には当たらないとされています。つまり deny は「どんな方法でも読ませない壁」ではなく、ふつうの操作を止める網です。

allow が効かないと感じたら

プロジェクトの .claude/settings.json に書いた allow は、そのフォルダで「信頼の確認(workspace trust)」を承認するまで使われません。deny と ask は制限する方向のルールなので、承認と関係なく効きます。配ったあと allow に入れたコマンドで確認が出る場合は、対話の画面で一度 claude を起動し、信頼の確認を承認してもらいます。

社内で使うときの考え方

  1. 本物の秘密情報を作業フォルダに置かない: API キーなどはフォルダの外で管理します。deny で守るより、そもそも置かないほうが確実です。
  2. deny は網として共有する: .env、secrets/、実データのフォルダ、外部送信のコマンドを deny に入れ、プロジェクトの設定として Git で配ります。
  3. 確実に止めたいなら別の仕組みを使う: 公式ドキュメントでは、OS のレベルでアクセスを止めるサンドボックスが案内されています。執筆時点では Windows ネイティブでは使えず、WSL 2 の中で Claude Code を動かすと使えるとされています。
  4. 配る前にダミーで確かめる: テスト用の値を入れたファイルを置き、読めないこと・送れないことを手元で一度確かめてから配ります。

よくある質問

deny と ask の両方に同じルールを書いたらどうなりますか

deny が先に評価されるため、禁止になります。確認を出したいだけのルールは ask にだけ書きます。

.gitignore に書いたファイルは読まれませんか

.gitignore は Git の管理から外す設定で、Claude Code に読ませない設定とは別です。読ませたくないものは deny にも書き、コミットしたくないものは .gitignore にも書きます。

ルールを書いたのに効いていないように見えます

置き場所やパスの書き方が違っていることがあります。/permissions でルールが読み込まれているかを見て、作業フォルダの .claude/settings.json に置いたかを確かめてください。

settings.json をチェックだけで作る

この記事のルールは、Claude Code 権限設定(settings.json)ジェネレーター で、チェックを付けるだけで出力できます。実機で止まると確かめたルールと、個別には確かめていないルールを分けて表示します。

参考(公式ドキュメント・執筆時点)

仕様や料金は変わることがあります。社内に配る前に、公式ドキュメントで最新の情報を確認してください。