11
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

許可ルールを settings.json に書いても効かなかった。分かれ目はフォルダを信頼したかどうか

11
Last updated at Posted at 2026-09-25

permissions.allow に書いたルールが効かないことがあります。
同じルールを --allowedTools で渡すと効きます。 56回測って、分かれ目が分かりました。

未信頼のフォルダ   .claude/settings.json に書いた許可ルール   0/4 実行(無視される)
未信頼のフォルダ   --allowedTools で渡した同じルール          4/4 実行
未信頼のフォルダ   --settings で渡した同じルール              4/4 実行

信頼済みにする     .claude/settings.json                      4/4 実行

Claude Code 2.1.281 と 2.1.282 で差は無し

検証環境: Windows 10 / Claude Code 2.1.281 と 2.1.282 を隔離導入 / claude -p / 測定は 2026-09-25


きっかけ: 承認が要るコマンドを探すところで詰まった

Claude Code 2.1.282(2026-09-24)の changelog にこうあります。

Fixed Bash permission rules with a mid-pattern :* being skipped in settings files while
--allowedTools honored them; they now work from every source, with a startup warning on
how they match

「設定ファイルに書くと飛ばされ、--allowedTools なら効く」と読めます。測ろうとして、
先にもっと手前で引っかかりました。


測り方: まず「承認が要るコマンド」を見つける

許可ルールの効果を測るには、ルールが無いと止まるコマンドが要ります。
最初 echo で組んだら、許可ルールが1行も無くても通ってしまい、測定になりませんでした。

許可ルールを空にして8個試した結果です。

コマンド 素で通るか
echo START MARKER END 通る
cat note.txt 通る
ls -la 通る
git status --short 通る
node -e "console.log(...)" 止まる
sh -c "echo ..." 止まる
curl --version 止まる
npm config get registry 止まる

npm config get registry を使いました。何も書き換えないのに承認が要ります。

ファイルに書くコマンドは避けました。 echo X > out.txt にしたら、
許可ルールとは別の「シェルでファイルを作るなら承認が要る」で止まり、
ルールの効き目が見えませんでした。


結果: 未信頼だと settings.json だけ無視される

Bash(npm config:*) という許可ルールを、3か所から渡して比べます。各2回。

状態 ルールの置き場所 Claude Code 2.1.281 2.1.282
未信頼 .claude/settings.json 0/2 実行 0/2 実行
未信頼 --allowedTools 2/2 実行 2/2 実行
未信頼 --settings <file> 2/2 実行 2/2 実行
信頼済み .claude/settings.json 2/2 実行 2/2 実行
信頼済み --allowedTools 2/2 実行 2/2 実行
信頼済み --settings <file> 2/2 実行 2/2 実行
(対照)ルール無し — 0/2 実行 0/2 実行

プロジェクトの settings.json だけが、信頼の有無で挙動を変えます。
コマンドラインから渡した同じルールは、信頼していなくても効きました。


理由は stderr に書いてありました

--output-format stream-json の JSON には出ません。標準エラーに出ます。

Ignoring 1 permissions.allow entry from .claude/settings.json: this workspace has not been
trusted. Run Claude Code interactively here once and accept the trust dialog, or set
projects["<パス>"].hasTrustDialogAccepted: true in ~/.claude.json

「無視した」と明言しています。 直し方も2つ書いてあります。

  • そのフォルダで対話セッションを1回開いて、信頼のダイアログを承諾する
  • ~/.claude.json の projects["<パス>"].hasTrustDialogAccepted を true にする

後者で28回ぶん測り直したところ、settings.json のルールが効くようになりました。
(未信頼の28回と合わせて56回です)


changelog の :* は再現できませんでした

本題だった「途中に :* があるルール」も測りました。
Bash(npm config:* registry) を3経路 × 2バージョン × 信頼あり/なしで回しています。

全部止まりました。 信頼済みでも、--allowedTools でも、2.1.282 でも変わりません。

この書き方がそもそもマッチしていないのか、claude -p から見えないのかは分かりません。
言えるのは「自分の書き方では差が出なかった」までです。


言えないこと

  • changelog の修正が無かったとは言えません。 自分のルールの書き方が悪い可能性が残ります
  • 測ったのは Claude Code 2.1.281 と 2.1.282 の2点。それ以前は未測定
  • claude -p での結果。 対話セッションでは信頼ダイアログが出るので、条件が違います
  • 各条件2回。回数は多くない
  • 信頼は ~/.claude.json を直接書いて与えました。ダイアログ経由と同じかは未確認
  • deny 側は測っていません。無視されるのが allow だけかは分かりません
  • 2.1.282 が出すという起動時の警告は確認していません
  • Windows 10 の環境です

まとめ

  • 未信頼のフォルダでは、.claude/settings.json の permissions.allow が丸ごと無視される
  • --allowedTools と --settings は、信頼していなくても効く。 同じルールでも結果が違う
  • 理由は stderr に明記されている。 stream-json の中には出てこない
  • 直し方は対話で1回信頼するか、hasTrustDialogAccepted: true を書く
  • Claude Code 2.1.281 と 2.1.282 でこの挙動に差は無かった
  • changelog の「途中に :*」は自分の書き方では再現できなかった

「ルールを書いたのに効かない」と思ったら、まず標準エラーを見てください。
-p や CI で回していると、JSON しか読まないので気づけません。


参考

関連記事


JQITのエンジニアの95%以上は未経験からの採用です。
よければコーポレートサイトにも遊びに来てください。

▶ コーポレートサイト

エンジニア採用も行っています。もしご興味あれば覗いてみてください。

▶ 採用サイト

11
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?