😽

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 *)"
    ]
  }
}

設定が反映されない場合のトラブルシューティング

1. /permissionsコマンドを使用

インタラクティブな権限管理UIを使用することで、構文エラーを避けることができます:

/permissions

2. 設定ファイルの構文チェック

JSONファイルの構文が正しいかチェックしてください。カンマの位置や括弧の対応に注意。

3. Claude Codeの再起動

設定変更後は、Claude Codeを再起動して変更を確実に反映させましょう:

# 現在のセッションを終了
exit

# 新しいセッションを開始
claude

Discussion