Claude Codeの設定と権限を管理する

Claude Code エンジニアリング 6分で読めます

Claude Code の挙動は settings.json という設定ファイルと、ツール実行の許可・拒否を決める権限(permissions)の仕組みでカスタマイズできます。ここではプロジェクト単位・ユーザー単位の設定ファイルの階層と、安全に使うための権限ルールの書き方を解説します。これは Anthropic 公式の Claude Code に実在する機能です。

settings.jsonとは

settings.json は、Claude Code のふるまいを宣言的に設定するための JSON ファイルです。使うモデルや権限ルール、環境変数、フック(hooks)、状態行(status line)といった設定をここに書いておくと、起動のたびに手動で指定しなくても同じ設定でセッションを始められます。設定はチームで共有したり、プロジェクトごとに切り替えたりできます。

{
  "permissions": {
    "allow": ["Bash(npm run test:*)"],
    "deny": ["Read(./secrets/**)"]
  },
  "env": {
    "MY_FLAG": "1"
  }
}

設定ファイルの階層

設定はいくつかの場所に置け、より狭いスコープの設定が優先されます。代表的なものは次の3種類です。

同じ項目が複数の場所で指定された場合は、より狭い(ローカル → プロジェクト → ユーザー)スコープの値が優先されます。チーム共通のルールはプロジェクト設定に、自分だけの微調整はローカル設定に置くと管理しやすくなります。

権限(permissions)の仕組み

Claude Code は、ファイルの編集やコマンド実行など「副作用のある操作」を行う前に権限を確認します。既定では、変更を伴う操作や未許可のコマンドを実行しようとするたびに確認(プロンプト)が入ります。permissions 設定を使うと、どの操作を確認なしで許可し、どの操作を必ず拒否するかを事前に決められます。

権限ルールは ツール名(パターン) の形式で書きます。例えば Bash(npm run test:*) は「npm run test で始まる Bash コマンド」を、Read(./secrets/**) は「secrets ディレクトリ以下の読み取り」を表します。

allow・deny・askルールの書き方

権限は主に3つのリストで制御します。

{
  "permissions": {
    "allow": ["Bash(npm run lint:*)", "Bash(git status)"],
    "ask": ["Bash(git push:*)"],
    "deny": ["Read(./.env)", "Read(./secrets/**)"]
  }
}

パターンの末尾の :* は「その語で始まる任意の続き」を意味します。範囲を広げすぎると意図しないコマンドまで自動許可されるため、必要な範囲に絞るのが安全です。

安全に使うベストプラクティス

関連記事: フックで操作を自動化する / プランモードの使い方