🔓

私が使っているClaude Code パーミッション設定を公開(settings.json)

に公開

こんにちは、とまだです。

「Claude Codeのパーミッション設定、どのくらい緩めていいのかわからない」という方に向けて、私が個人開発で実際に使っている設定を共有します。

前提

このパーミッション設定は、以下のような環境を想定しています。

  • 個人開発が中心
  • Git管理が前提(失敗してもrevertできる)
  • Node.jsの開発がメイン
  • 承認待ちの時間を減らしてスピード重視で開発したい

チーム開発や本番環境に近いマシンで作業する場合は、より保守的な設定をおすすめします。

設定の全体像

私が使っている~/.claude/settings.jsonの設定です。

{
  "permissions": {
    "defaultMode": "acceptEdits",
    "allow": [
      "Bash(mkdir *)",
      "Bash(touch *)",
      "Bash(ls *)",
      "Bash(tree *)",
      "Bash(mv *)",
      "Bash(cp *)",
      "Bash(cat *)",
      "Bash(grep *)",
      "Bash(find *)",
      "Bash(echo *)",
      "Bash(npm *)",
      "Write(*)",
      "Bash(git add *)",
      "Bash(git commit *)",
      "Bash(git push *)",
      "Bash(git pull *)",
      "Bash(git branch *)",
      "Bash(git checkout *)",
      "Bash(git status *)",
      "Bash(git log *)",
      "Bash(git diff *)",
      "Bash(git fetch *)",
      "Bash(gh pr *)",
      "WebFetch(domain:github.com)",
      "WebFetch(domain:npmjs.org)"
    ],
    "deny": [
      "Bash(sudo *)",
      "Bash(git reset *)",
      "Bash(git rebase *)",
      "Read(id_rsa)",
      "Read(id_ed25519)",
      "Read(**/*token*)",
      "Read(**/*key*)",
      "Bash(rm -rf *)",
      "Bash(rm -rf /)",
      "Bash(rm -rf ~)",
      "Bash(rm -rf ~/*)",
      "Bash(rm -rf /*)",
      "Read(.env)",
      "Read(.env.local)",
      "Read(.env.development)",
      "Read(.env.production)",
      "Read(**/.env)",
      "Read(**/.env.local)",
      "Read(**/.env.development)",
      "Read(**/.env.production)",
      "Read(**/*secret*)",
      "Write(.env)",
      "Write(.env.local)",
      "Write(.env.development)",
      "Write(.env.production)",
      "Write(**/.env)",
      "Write(**/.env.local)",
      "Write(**/.env.development)",
      "Write(**/.env.production)",
      "Write(**/*secret*)"
    ],
    "ask": [
      "Bash(rm *)",
      "Bash(chmod *)",
      "Bash(wget *)",
      "Bash(curl *)",
      "Bash(git merge *)"
    ]
  }
}

設定のポイント

この設定で意識しているポイントを解説します。

defaultMode: acceptEdits

"defaultMode": "acceptEdits"

ファイルの読み取りと編集を自動承認します。
コードを読んで編集するという基本動作のたびに承認を求められると、開発フローが分断されてしまうためです。

ファイル操作は基本的にallow

"Bash(mkdir *)",
"Bash(touch *)",
"Bash(ls *)",
"Bash(mv *)",
"Bash(cp *)",

これらは参照や軽微な操作が中心です。
毎回確認を挟む必要性を感じないため、全て許可しています。

開発ツールもallow

"Bash(npm *)",

npm installnpm run testなど、開発中に頻繁に使うコマンドは許可しています。

なお、npxはあえて含めていません。任意のnpmパッケージをダウンロードして即座に実行できるため、意図しないコードが実行されるリスクがあるためです。

Git操作もallow(ただし履歴書き換えはdeny)

"Bash(git add *)",
"Bash(git commit *)",
"Bash(git push *)",

一般的な記事ではgit pushgit commitaskに入れることを推奨していますが、私はallowにしています。
Claude Codeにdiffやlogの確認を任せているためです。

一方で、履歴を書き換える操作はdenyでブロックしています。

"Bash(git reset *)",
"Bash(git rebase *)",

機密ファイルはdenyで保護

"Read(.env)",
"Read(**/*secret*)",
"Read(**/*token*)",
"Read(**/*key*)",

環境変数ファイルやAPIキーを含む可能性のあるファイルは、読み取り・書き込みの両方をブロックしています。

ポイントは、.env.example.env.sampledenyに含めていないことです。
これらはテンプレートファイルであり、機密情報は含まれていないためです。

rm -rfは複数パターンでブロック

"Bash(rm -rf *)",
"Bash(rm -rf /)",
"Bash(rm -rf ~)",
"Bash(rm -rf ~/*)",
"Bash(rm -rf /*)",

ディレクトリごと強制削除するコマンドは、複数パターンでブロックしています。

askで確認を挟む操作

"ask": [
  "Bash(rm *)",
  "Bash(chmod *)",
  "Bash(wget *)",
  "Bash(curl *)",
  "Bash(git merge *)"
]
  • rmrm -rfdenyでブロックしていますが、通常の削除は確認を挟んで許可
  • chmod:実行権限の付与は意図しないスクリプト実行につながる可能性がある
  • wget / curl:外部からのダウンロードは確認してから実行したい
  • git merge:マージは意図しない変更を取り込むリスクがあるため確認

この設定が適さないケース

以下のケースでは、より保守的な設定をおすすめします。

  • チーム開発:メンバー間で設定を統一する必要がある
  • 高セキュリティ環境:金融系や医療系など、コンプライアンス要件が厳しい環境
  • 本番環境に近いマシン:本番データベースへの接続情報がある環境
  • 初心者:Claude Codeの動作をまだ把握していない段階

初心者の方はdefaultMode: defaultで全ての操作に確認を入れて、何が起きているか理解してから徐々に緩めていくのが安全です。

汎用設定との比較

パーミッションの基本的な概念や汎用的な設定例については、別記事で詳しく解説しています。

https://zenn.dev/tmasuyama1114/books/claude_code_basic/viewer/permission-optimization

上記の記事では「バランス型」の設定を推奨していますが、本記事は「開発効率優先型」です。
ご自身の状況に合わせて参考にしてください。

Discussion