Claude Code の許可ルールで確認を減らす|allow・ask・deny の書き方

コース3 設定編 2 / 8・読む時間 約9分・最終確認日

このレッスンの要点

  • 許可のルールは3種類。allow(聞かずに使う)・ask(毎回聞く)・deny(使わせない)です
  • 調べる順番は deny → ask → allow。deny に当たったら、allow があっても止まります
  • 秘密のファイル(.env など)は deny で読ませない。いまのルールは /permissions で見られます

3種類のルールと、調べる順番

許可のルールは、settings.json の permissions に書きます。種類は3つです。allow は聞かずに使ってよいもの、ask は毎回聞いてほしいもの、deny は使わせないものです。

Claude Code は、deny → ask → allow の順にルールを調べて、最初に当たったもので決めます。なので、deny に当たったものは、allow に書いてあっても止まります。

1deny に当たる? → 止める
2ask に当たる? → 毎回聞く
3allow に当たる? → 聞かずに使う
4どれにも当たらない → いまのモードどおり
「止める」がいちばん強い。細かい allow を書いても、deny の例外にはなりません。

ルールの書き方

ルールは「道具の名前(中身)」の形で書きます。Bash はコマンド、Read はファイルを読むこと、WebFetch は Web のページを取ってくることです。* は「ここに何が入ってもよい」という意味です。

ルール当たるもの当たらないもの
Bash(npm run build)npm run build だけnpm run build --watch
Bash(npm run *)npm run build・npm run test などnpm install
Bash(ls *)ls・ls -lalsof
Read(./.env)このフォルダの .env を読むほかのファイル
WebFetch(domain:example.com)example.com のページほかのサイト
空白のあるなしで意味が変わります。Bash(ls ) は lsof に当たりませんが、Bash(ls) は当たります。

&& や | でつないだコマンドは、つないだそれぞれがルールに当たる必要があります。Bash(safe-cmd *) を許しても、safe-cmd && other-cmd までは許されません。

確認を減らして、秘密を守る設定

何度も「はい」を押しているコマンドは allow に、外に出したくない操作や秘密のファイルは deny に入れます。下の「やってみよう」の例は、テストなどの npm run とコミットは聞かずに、git push と .env を読むことは止める設定です。

allow(聞かずに使う)
Bash(npm run *)Bash(git commit *)
deny(使わせない)
Bash(git push )Read(./.env)Read(./.env.)
チームで決めるなら .claude/settings.json、自分だけなら .claude/settings.local.json に書きます。

Read の deny に当たったファイルは、Claude の読みこみだけでなく、検索の結果やコマンドの cat などからも外れます。ただし、ファイル名を書かずに中を探すコマンドや、プログラムを通した読みこみまでは止められません。確認の画面で「今後は聞かない」を選んだルールは、.claude/settings.local.json に保存されます。

/permissions と、最初のモード

/permissions と打つと、いまのルールと、それぞれがどの設定ファイルから来ているかの一覧が出ます。ここでルールを足したり消したりもできます。

defaultMode の値はじめのモード
"default"manual(読むことだけ聞かずに進む)
"acceptEdits"ファイルの編集も聞かずに進む
"plan"計画を立てるだけ
"auto"裏で安全を確かめながら進む
起動したときの(くわしくはコース2のレッスン5)は、permissions の defaultMode で決められます。

いつも manual で始めたいなら、ユーザー設定に "defaultMode": "default" を書きます。auto と、すべての確認をとばす bypassPermissions は、プロジェクトの設定(.claude/settings.json・.claude/settings.local.json)に書いても効きません。使うなら、ユーザー設定に書きます。deny のルールは、どのモードでも効きます。

よくある勘違い

「CLAUDE.md に『.env は読まないで』と書けば十分」ではありません

お願いを CLAUDE.md に書いておく
CLAUDE.md の指示では、許可される範囲は変わりません
確実に止めたいことは deny のルールに
許可のルールは、Claude ではなく Claude Code が守らせる仕組みです

やってみよう

  1. 練習用のフォルダで claude を起動し、/permissions でいまのルールを見ます(Esc で閉じる)
  2. 練習用に、中身が「TEST=1」だけの .env というファイルを作っておきます(本物の秘密は入れない)
  3. 下の依頼文を送って、このプロジェクトの自分用の設定にルールを足してもらいます
  4. 「.env の中身を見せて」と頼み、読むのが止められることを確かめます
  5. もう一度 /permissions を開いて、ルールが増えたことを見ます
このプロジェクトのルールの例(.claude/settings.local.json){ "permissions": { "allow": [ "Bash(npm run *)", "Bash(git commit *)" ], "deny": [ "Bash(git push *)", "Read(./.env)", "Read(./.env.*)" ] } }
Claude に足してもらう依頼文このプロジェクトの .claude/settings.local.json に、npm run と git commit は聞かずに使ってよい、git push と .env を読むのは使わせない、という許可のルールを足して。すでにある設定は消さないで

確認問題

Q1. allow に Bash(git *)、deny に Bash(git push *) があります。Claude が git push しようとすると?
Q2. Bash(ls *) のルールは、lsof というコマンドにも当たりますか?
今日の練習

今日の作業で何度も「はい」を押したコマンドを1つ書き出して、allow のルールの形(Bash(〜 *))にしてみましょう。

この記事の用語

コース3 設定編の目次

  1. 1設定ファイル(settings.json)の基本
  2. 2許可ルールを決めて確認を減らす
  3. 3CLAUDE.md の育て方
  4. 4自分用のコマンド・スキルを作る
  5. 5フックで自動チェック
  6. 6MCP で外部サービスとつなぐ
  7. 7サブエージェントの使い分け
  8. 8Git と GitHub で変更を守る