😽
Claude Codeで設定が/permissions に反映しなくて困った件
Claude Code権限設定で躓かないための書き方完全ガイド
Claude Codeを使っていて、.claude/settings.local.json
の権限設定がうまく反映されずに困った。
❌ 間違った書き方
{
"permissions": {
"deny": [
"Read(.env:*)",
"Read(id_rsa)",
"Read(id_ed25519)",
"Read(**/*token*)",
"Read(**/*key*)",
"Write(.env:*)",
"Write(**/secrets/**)"
]
}
}
✅ 正しい書き方
{
"permissions": {
"deny": [
"Read(./.env)",
"Read(./.env.*)",
"Read(~/.ssh/id_rsa)",
"Read(~/.ssh/id_ed25519)",
"Read(./*token*)",
"Read(./*key*)",
"Read(./secrets/**)",
"Write(./.env)",
"Write(./.env.*)",
"Write(./secrets/**)"
]
}
}
修正ポイント詳細解説
1. .envファイルの指定方法
間違い: "Read(.env:*)"
正解: "Read(./.env)"
+ "Read(./.env.*)"
Claude Codeでは:*
という記法は認識されません。.env
関連のファイルすべてを対象にしたい場合は、以下のように分けて記述する必要があります:
-
(./.env)
- 現在階層の.env
ファイル -
(./.env.*)
- 現在階層の.env.local
、.env.development
などのファイル
2. パスの明示的な指定
間違い: "Read(id_rsa)"
正解: "Read(~/.ssh/id_rsa)"
Claude Codeでは相対パスや絶対パスを明示的に指定する必要があります:
-
~/.ssh/
- ホームディレクトリのSSHフォルダ -
./
- 現在の作業ディレクトリ -
../
- 一つ上の階層
3. ワイルドカードパターンの書き方
間違い: "Read(**/*token*)"
正解: "Read(./*token*)"
または必要に応じて "Read(**/*token*)"
Claude Codeのワイルドカードパターン:
-
*
- 単一の階層内でのマッチング -
**
- 複数階層にわたるマッチング -
.
- カレントディレクトリの明示
実践的な設定例
開発環境での推奨設定
{
"permissions": {
"allow": [
"Read",
"Write(./src/**)",
"Write(./docs/**)",
"Bash(git *)",
"Bash(npm *)",
"Bash(yarn *)"
],
"deny": [
"Read(./.env)",
"Read(./.env.*)",
"Read(~/.ssh/id_rsa)",
"Read(~/.ssh/id_ed25519)",
"Read(./*token*)",
"Read(./*key*)",
"Read(./secrets/**)",
"Write(./.env.*)",
"Write(./config/production.*)",
"Bash(rm -rf *)",
"Bash(sudo *)"
]
}
}
設定が反映されない場合のトラブルシューティング
/permissions
コマンドを使用
1. インタラクティブな権限管理UIを使用することで、構文エラーを避けることができます:
/permissions
2. 設定ファイルの構文チェック
JSONファイルの構文が正しいかチェックしてください。カンマの位置や括弧の対応に注意。
3. Claude Codeの再起動
設定変更後は、Claude Codeを再起動して変更を確実に反映させましょう:
# 現在のセッションを終了
exit
# 新しいセッションを開始
claude
Discussion