📋

Claude Codeのpermissions設定を整理して、自走する環境を作る!

に公開

はじめに

Claude Codeの以下のpermission promptが毎回出て面倒。そんな方に向けた記事です。

alt text

後回しにしていたり、一度も見直していないという方もいると思うpermissions設定ですが、見直すことでいろんなリポジトリで作業する時により快適にClaude Codeを動かすことができます。

この記事で伝えたいこと

  • 各プロジェクトのsettings.local.jsonのpermissionsには許可したいコマンドが詰まっている
  • 定期的に棚卸しして、Claude Codeが自走しやすい環境を作ろう

settings.jsonとpermissionsの説明

settings.jsonについては、公式Docsが分かりやすかったです。

https://code.claude.com/docs/ja/settings

以下は、Claude Codeのsettings.jsonに関するファイル群の説明抜粋です。

  • ~/.claude/settings.json: すべてのプロジェクトに適用されるユーザ設定
  • .claude/settings.json: ソース管理の対象、チームと共有される設定
  • .claude/settings.local.json: ソース管理対象外、.gitignoreの対象、個人的な設定と実験

またsettings.jsonのpermissionsの構造は以下の通りです。

{
  "permissions": {
    "allow": [
      "Bash(npm run lint)",
      "Bash(npm run test:*)",
      "Read(~/.zshrc)"
    ],
    "deny": [
      "Bash(curl:*)",
      "Read(./.env)",
      "Read(./.env.*)",
      "Read(./secrets/**)"
    ]
  }
}

allowとdenyで、コマンドの権限管理が可能となっており、allowに登録されているコマンドはユーザへの確認なくClaudeが自動実行できます。

settings.local.jsonのpermissionsがautoで作成される仕組み

いつものようにClaude Codeを使っていると次の画面がよく表示されると思います。

alt text

2番目を選択すると、.claude/settings.local.jsonのpermissionsにコマンドが登録されます。

.claude/settings.local.jsonのpermissionsには、Claude Codeを利用しているとコマンドがたくさん登録されていますが、一時的なシェルの実行などもコマンドごと登録されており、煩雑になっているケースがあります。よく利用するコマンドも登録されるため、定期的に見直す対象と考えています。

~/.claude/settings.jsonはその端末で作業する時のすべての作業に有効な設定ファイルとなるため、本来READ系のコマンドはここにpermissions設定をすれば、他プロジェクトで確認されることはないのですが、意識的にメンテナンスする必要があります。

.claude/settings.jsonは、該当プロジェクト固有のコマンドのみをpermissions設定に登録して、プロジェクトで共有すると、自分以外も効率的にClaude Codeを利用することができるため、リポジトリへの登録が推奨されています。

permissionのワイルドカード設定

以下の設定が対象バージョンで追加となっています。これにより、従来のコマンドを個別に登録する書き方もより簡潔に記載できるようになりました。

*は**任意の文字列(0文字以上)**にマッチするワイルドカードです。配置位置によりマッチの種類が変わります。

種別 パターン マッチ種別 説明 バージョン
Bashコマンド Bash(npm *) 前方一致 npmで始まる任意のコマンド 2.1.0 (2026年1月7日)
Bashコマンド Bash(* install) 後方一致 installで終わる任意のコマンド 2.1.0 (2026年1月7日)
Bashコマンド Bash(git * main) 前方+後方 gitで始まりmainで終わるコマンド 2.1.0 (2026年1月7日)
Bashコマンド Bash(*-h*) 部分一致 -hを含む任意のコマンド 2.1.0 (2026年1月7日)
MCPツール mcp__server__* 前方一致 特定サーバー配下の全ツール 2.0.70

https://github.com/anthropics/claude-code/blob/main/CHANGELOG.md

やりたいこと

以下の流れで、3ファイルを定期的に棚卸しすれば、permission設定を常に最適に保つことができそうです。

  • 該当プロジェクトのsettings.local.jsonの特定とpermissionsの棚卸し
    • 棚卸し観点
      • 他プロジェクトで利用するread系のコマンド、該当プロジェクトに特化したコマンド、一時的なコマンド
  • 3ファイルの見直し
    • ~/.claude/settings.json
      • allowには、汎用的な読み込み系コマンド
      • denyには、どのプロジェクトでも禁止したいコマンド
    • .claude/settings.json
      • allowには、このプロジェクト特有のコマンド
      • denyには、このプロジェクトに特化して禁止したいコマンド
    • .claude/settings.local.json
      • 基本permissions設定はここにはない
      • 一時的なコマンドだけ溜まってる状態。削除しても問題ないのが理想

ただこれを手動で全プロジェクト分実施するのは大変です。そんなときに役立つSkillを紹介します。

作ったSkill

この棚卸し作業を自動化するSkillを作成したので、コマンドの内容は以下を参照してください。

リポジトリ:
https://github.com/makikub/claude-code-plugin/tree/main/permissions-audit

インストール方法

# Add marketplace
claude plugin marketplace add https://github.com/makikub/claude-code-plugin

# Install plugin
claude plugin install permissions-audit@makikub-plugins

トリガーとしては、 /permissions-auditを直接呼び出し、もしくは「permissionを整理したい」とClaudeに伝えれば起動するはずです。

これを使うと、該当プロジェクトのsettings.local.jsonを読み込み、さきほどの流れでお掃除してくれます。

複数プロジェクトを指定すれば、端末の全プロジェクトに対して棚卸しが実行されます。
定期的に実行すれば、今後どんどんClaude Codeが自走して動作するはず。

終わりに

今までやってこなかったのですが、お掃除やってみると自分の~/.claude/settings.jsonが育つ気がして、~/.claudeのdotfiles管理もはじめました。どこでも快適に動かしたい気持ち。

定期的に.claude/settings.local.jsonを棚卸しして、快適なClaude Codeライフを送ってみませんか?

Rehab Tech Blog

Discussion