Claude Code の許可ルールで確認を減らす|allow・ask・deny の書き方
このレッスンの要点
- 許可のルールは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 に書いてあっても止まります。
ルールの書き方
ルールは「道具の名前(中身)」の形で書きます。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 -la | lsof |
Read(./.env) | このフォルダの .env を読む | ほかのファイル |
WebFetch(domain:example.com) | example.com のページ | ほかのサイト |
&& や | でつないだコマンドは、つないだそれぞれがルールに当たる必要があります。Bash(safe-cmd *) を許しても、safe-cmd && other-cmd までは許されません。
確認を減らして、秘密を守る設定
何度も「はい」を押しているコマンドは allow に、外に出したくない操作や秘密のファイルは deny に入れます。下の「やってみよう」の例は、テストなどの npm run とコミットは聞かずに、git push と .env を読むことは止める設定です。
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を起動し、/permissionsでいまのルールを見ます(Esc で閉じる) - 練習用に、中身が「TEST=1」だけの
.envというファイルを作っておきます(本物の秘密は入れない) - 下の依頼文を送って、このプロジェクトの自分用の設定にルールを足してもらいます
- 「.env の中身を見せて」と頼み、読むのが止められることを確かめます
- もう一度
/permissionsを開いて、ルールが増えたことを見ます
確認問題
Bash(git *)、deny に Bash(git push *) があります。Claude が git push しようとすると?Bash(ls *) のルールは、lsof というコマンドにも当たりますか?今日の作業で何度も「はい」を押したコマンドを1つ書き出して、allow のルールの形(Bash(〜 *))にしてみましょう。
この記事の用語
コース3 設定編の目次
- 1設定ファイル(settings.json)の基本✓ できた
- 2許可ルールを決めて確認を減らす✓ できた
- 3CLAUDE.md の育て方✓ できた
- 4自分用のコマンド・スキルを作る✓ できた
- 5フックで自動チェック✓ できた
- 6MCP で外部サービスとつなぐ✓ できた
- 7サブエージェントの使い分け✓ できた
- 8Git と GitHub で変更を守る✓ できた