settings-configuration について
ユーザー、プロジェクト、ローカルの各スコープで Claude Code の設定と権限を扱うスキルです。優先順位、権限パターン、シェル演算子への対処、検証、トラブルシューティングを説明します。MCP サーバーの設定は対象外です。
主な機能
- 01ユーザー、プロジェクト、ローカル設定の優先順位を説明
- 02許可・拒否の権限パターンを設定
- 03コマンド単位のワイルドカード権限
- 04ラッパースクリプトによるシェル演算子への対処
- 05設定の検証と権限問題の調査
活用シーン
- 01よく使うコマンドにプロジェクト権限を設定する
- 02具体的な許可・拒否ルールでコマンドを制限する
- 03権限パターンが適用されない原因を調べる
- 04設定の統合結果を確認して検証する
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ laurigates/ claude-plugins --skill settings-configurationインストール後、Claude Code で/settings-configurationを入力して読み込まれたか確認します。
詳細
Claude Code の設定構成
Claude Code の設定と権限を構成するための専門知識です。
このスキルを使う場面
| このスキルを使う場面 | 別のものを使う場面 |
|---|---|
| プロジェクトの権限を設定するとき | プラグインレジストリの問題を修正するとき(plugin-registry スキルを使用) |
| 「permission denied」エラーをデバッグするとき | フックを構成するとき(hooks-configuration スキルを使用) |
| 設定の階層を理解するとき | MCP サーバーを設定するとき(mcp-configuration スキルを使用) |
| 許可/拒否パターンを作成するとき |
設定ファイルの階層
設定は次の順序で読み込まれ、マージされます(後の設定が前の設定を上書きします)。
| 優先度 | ファイル | 適用範囲 | Git にコミットするか |
|---|---|---|---|
| 1(最低) | ~/.claude/settings.json | ユーザーレベル(すべてのプロジェクト) | 該当なし |
| 2 | .claude/settings.json | プロジェクトレベル | はい |
| 3(最高) | .claude/settings.local.json | ローカルでの上書き | いいえ(gitignore) |
権限の構造
{
"permissions": {
"allow": [
"Bash(git status *)",
"Bash(npm run *)"
],
"deny": [
"Bash(rm -rf *)",
"Bash(sudo *)"
]
}
}
許可と拒否
allow:これらのパターンに一致するツールは、確認なしで実行されますdeny:これらのパターンに一致するツールは常にブロックされます- 拒否は許可より優先されます
ワイルドカード権限パターン
構文
ToolName(command prefix *)
ToolName()- ツール(通常はBash)command prefix- 一致させるコマンドと先頭の引数*- 残りの引数に一致するワイルドカード
パターンの例
| パターン | 一致するもの | 一致しないもの |
|---|---|---|
Bash(git *) | git status、git diff HEAD | git-lfs pull |
Bash(npm run *) | npm run test、npm run build | npm install |
Bash(gh pr *) | gh pr view 123、gh pr create | gh issue list |
Bash(./scripts/ *) | ./scripts/test.sh arg | /scripts/other.sh |
具体性
より具体的なパターンほど安全です。
{
"permissions": {
"allow": [
"Bash(git status *)",
"Bash(git diff *)",
"Bash(git log *)",
"Bash(git add *)",
"Bash(git commit *)"
]
}
}
一方、広すぎるパターンは次のとおりです。
{
"permissions": {
"allow": ["Bash(git *)"]
}
}
シェル演算子の保護
Claude Code 2.1.7 以降では、権限の照合において危険なシェル演算子がブロックされます。
保護対象の演算子
| 演算子 | リスク | ブロックされる例 |
|---|---|---|
&& | コマンドの連結 | ls && rm -rf / |
|| | 条件付き実行 | false || malicious |
; | コマンドの区切り | safe; dangerous |
| | パイプ処理 | cat /etc/passwd | curl |
> / >> | リダイレクト | echo x > /etc/passwd |
$() | コマンド置換 | $(curl evil) |
` | バッククォートによる置換 | `rm -rf /` |
動作
コマンドにシェル演算子が含まれている場合:
- 権限のワイルドカードは一致しません
- ユーザーに明示的な承認プロンプトが表示されます
- ブロックされた演算子について警告が表示されます
安全な代替方法
正当な複合コマンドには、ラッパースクリプトを使用します。
#!/bin/bash
# scripts/test-and-build.sh
npm test && npm run build
次に、スクリプトを許可します。
{
"permissions": {
"allow": ["Bash(./scripts/test-and-build.sh *)"]
}
}
よく使われる権限セット
Git 操作
{
"permissions": {
"allow": [
"Bash(git status *)",
"Bash(git diff *)",
"Bash(git log *)",
"Bash(git branch *)",
"Bash(git add *)",
"Bash(git commit *)",
"Bash(git push *)",
"Bash(git pull *)",
"Bash(git fetch *)",
"Bash(git checkout *)"
]
}
}
GitHub CLI
{
"permissions": {
"allow": [
"Bash(gh pr *)",
"Bash(gh run *)",
"Bash(gh issue *)",
"Bash(gh workflow *)"
]
}
}
テストとリンティング
{
"permissions": {
"allow": [
"Bash(npm test *)",
"Bash(bun test *)",
"Bash(vitest *)",
"Bash(biome *)",
"Bash(eslint *)",
"Bash(prettier *)"
]
}
}
セキュリティスキャン
{
"permissions": {
"allow": [
"Bash(pre-commit *)",
"Bash(gitleaks *)",
"Bash(trivy *)"
]
}
}
MCP ツール
{
"permissions": {
"allow": [
"mcp__context7",
"mcp__sequential-thinking"
]
}
}
プロジェクトの設定
1. 設定ディレクトリを作成する
mkdir -p .claude
2. プロジェクト設定を作成する
cat > .claude/settings.json << 'EOF'
{
"permissions": {
"allow": [
"Bash(git status *)",
"Bash(git diff *)",
"Bash(npm run *)"
]
}
}
EOF
3. ローカル設定を Gitignore に追加する
echo ".claude/settings.local.json" >> .gitignore
4. ローカルでの上書きを作成する(任意)
cat > .claude/settings.local.json << 'EOF'
{
"permissions": {
"allow": [
"Bash(docker *)"
]
}
}
EOF
設定の検証
JSON 構文を確認する
cat .claude/settings.json | jq .
権限を表示する
cat .claude/settings.json | jq '.permissions'
マージ結果のプレビュー
配列の設定は追加的にマージされます。有効な権限を確認するには、すべてのファイルを確認します。
echo "=== User ===" && cat ~/.claude/settings.json 2>/dev/null | jq '.permissions // empty'
echo "=== Project ===" && cat .claude/settings.json 2>/dev/null | jq '.permissions // empty'
echo "=== Local ===" && cat .claude/settings.local.json 2>/dev/null | jq '.permissions // empty'
トラブルシューティング
| 症状 | 原因 | 対処方法 |
|---|---|---|
| Permission denied | パターンが一致していません | より具体的なパターンを追加します |
| シェル演算子がブロックされる | &&、| などが含まれています | ラッパースクリプトを使用します |
| 設定が適用されない | ファイルパスが正しくありません | .claude/ ディレクトリが存在することを確認します |
| JSON の解析エラー | JSON 構文が無効です | jq . で検証します |
| 権限が無視される | ファイルを読み取れません | ファイルの権限を確認します |
Agentic Optimizations
| Context | Command |
|---|---|
| View project perms | cat .claude/settings.json | jq -c '.permissions' |
| View user perms | cat ~/.claude/settings.json | jq -c '.permissions' |
| Validate JSON | cat .claude/settings.json | jq . |
| Count patterns | cat .claude/settings.json | jq '.permissions.allow | length' |
Quick Reference
File Locations
| Scope | Path |
|---|---|
| User | ~/.claude/settings.json |
| Project | .claude/settings.json |
| Local | .claude/settings.local.json |
Permission Syntax
Bash(command prefix *)
mcp__server_name
Priority
Local > Project > User (highest to lowest) Deny > Allow (deny always wins)
コメント
Markdown 対応