Skip to content

原文(日本語)

設定ファイルがディスク上で変更された際に、古い権限ルールをクリアする処理を修正しました。

原文(英語)

Fixed clear stale permission rules when settings change on disk

概要

Claude Code v2.1.41では、設定ファイル(~/.claude/settings.json)がディスク上で直接編集された際に、古い権限ルールが正しくクリアされず、新しい設定が反映されない問題が修正されました。これにより、設定変更が即座に反映され、予期しない動作を防げるようになりました。

問題の背景

権限ルールとは

権限ルールは、Claude Codeがファイル操作やコマンド実行を行う際の承認ポリシーを定義します。例えば、特定のファイルへの自動承認や、危険なコマンドのブロックなどです。

発生していた問題

設定ファイルを外部エディタで編集した後、Claude Codeセッション内で古い権限ルールが残り続けていました。

修正前:

bash
# ~/.claude/settings.jsonを編集(外部エディタ)
{
  "permissions": {
    "autoAllow": {
      "Read": ["src/**/*.ts"]
    }
  }
}

# Claude Codeセッション内
> "src/auth.tsを読んでください"
⏸️  Permission required: Read src/auth.ts
# ← 設定で自動承認したはずなのに、承認を求められる

修正後:

bash
# ~/.claude/settings.jsonを編集(外部エディタ)
{
  "permissions": {
    "autoAllow": {
      "Read": ["src/**/*.ts"]
    }
  }
}

# Claude Codeが設定変更を検出し、ルールをリロード
Settings reloaded: New permission rules applied

# Claude Codeセッション内
> "src/auth.tsを読んでください"
 Reading src/auth.ts (auto-approved)
# ← 設定が即座に反映される

基本的な使い方

設定ファイルの編集と反映

修正後は、設定ファイルを編集すると自動的に反映されます。

bash
# ターミナル1: Claude Code実行中
claude
>

# ターミナル2: 設定を編集
vim ~/.claude/settings.json

# 設定を保存

# ターミナル1: 自動的に設定がリロードされる
⚙️  Settings file changed, reloading permissions...
 New permission rules applied

実践例

自動承認ルールの追加

開発中に、頻繁に使用するファイルを自動承認リストに追加します。

bash
# Claude Code実行中
> "tests/unit/auth.test.tsを読んでください"
⏸️  Permission required: Read tests/unit/auth.test.ts
[Approve]

# 設定ファイルを編集して自動承認を追加
# ~/.claude/settings.json
{
  "permissions": {
    "autoAllow": {
      "Read": ["tests/**/*.test.ts"]
    }
  }
}

# 修正後: 設定が即座に反映される
⚙️  Settings reloaded

# 次回から自動承認される
> "tests/unit/user.test.tsを読んでください"
 Reading tests/unit/user.test.ts (auto-approved)

コマンド実行ポリシーの変更

特定のコマンドを自動承認に追加します。

bash
# テストコマンドの実行
> "テストを実行してください"
⏸️  Permission required: Bash "npm test"
[Approve]

# 設定ファイルを編集
# ~/.claude/settings.json
{
  "permissions": {
    "autoAllow": {
      "Bash": ["npm test", "npm run build"]
    }
  }
}

# 修正後: 即座に反映される
⚙️  Settings reloaded

# 次回から自動承認される
> "テストを実行してください"
 Running: npm test (auto-approved)

セキュリティポリシーの更新

セキュリティ要件に応じて、危険なコマンドをブロックします。

bash
# 設定ファイルを編集
# ~/.claude/settings.json
{
  "permissions": {
    "deny": {
      "Bash": [
        "rm -rf /*",
        "dd if=*",
        "mkfs*",
        "format*"
      ]
    }
  }
}

# 修正後: 設定が即座に適用される
⚙️  Security rules updated

# 危険なコマンドがブロックされる
> bash -c "rm -rf /tmp/test"
 Blocked by security policy: rm -rf
💡 This operation is not allowed

プロジェクト固有の設定

プロジェクトごとに異なる権限ルールを設定します。

bash
# プロジェクトA用の設定
# ~/projects/projectA/.claude/settings.json
{
  "permissions": {
    "autoAllow": {
      "Read": ["src/**/*"],
      "Write": ["docs/**/*.md"]
    }
  }
}

# Claude Codeを起動
cd ~/projects/projectA
claude

# プロジェクト設定が読み込まれる
⚙️  Project settings loaded

# 設定を変更
vim .claude/settings.json

# 修正後: 即座に反映される
⚙️  Settings reloaded (project-specific)

チーム共有設定の同期

チームで共有する設定ファイルを同期します。

bash
# Git経由で最新の設定を取得
git pull origin main
# ← .claude/settings.jsonが更新される

# Claude Code実行中
# 修正後: 自動的に新しい設定を検出・適用
⚙️  Settings file changed on disk
⚙️  Reloading team permissions...
 Team permission rules applied

# 新しいルールが即座に有効になる

開発環境と本番環境の切り替え

環境ごとに異なる権限ルールを切り替えます。

bash
# 開発環境設定を適用
cp .claude/settings.dev.json .claude/settings.json

# 修正後: 即座に検出・適用
⚙️  Settings reloaded
 Development permissions active

# より緩い権限で作業可能

# 本番環境設定に切り替え
cp .claude/settings.prod.json .claude/settings.json

# 修正後: 即座に検出・適用
⚙️  Settings reloaded
 Production permissions active (restricted)

この修正の利点

設定反映の迅速化

  • ファイル編集が即座に反映される
  • セッション再起動不要
  • スムーズなワークフロー

予期しない動作の防止

  • 古い権限ルールが残らない
  • 設定と実際の動作が一致
  • セキュリティポリシーの確実な適用

開発効率の向上

  • 設定の試行錯誤が容易
  • チーム設定の同期が簡単
  • 環境切り替えがスムーズ

設定ファイルの監視

自動リロードのトリガー

以下の場合に設定が自動的にリロードされます:

  1. ~/.claude/settings.jsonの変更
  2. .claude/settings.json(プロジェクト固有)の変更
  3. Git pullによる設定ファイル更新
  4. 外部エディタでの編集

リロード通知

text
⚙️  Settings file changed, reloading...
✓ Permission rules updated
✓ [N] auto-allow rules loaded
✓ [M] deny rules loaded

注意点

  • 設定ファイルの構文エラーがある場合、リロードは失敗します
  • 失敗時は既存の設定が保持されます
  • 設定の変更は現在のセッションにのみ影響します(他のセッションには影響しません)
  • 複数の設定ファイルが存在する場合、優先順位は: プロジェクト固有 > グローバル

設定ファイルの例

基本的な権限設定

json
{
  "permissions": {
    "autoAllow": {
      "Read": [
        "src/**/*.ts",
        "tests/**/*.ts",
        "README.md"
      ],
      "Write": [
        "docs/**/*.md"
      ],
      "Bash": [
        "npm test",
        "npm run build",
        "git status"
      ]
    },
    "deny": {
      "Bash": [
        "rm -rf /*",
        "sudo *"
      ]
    }
  }
}

環境別設定

json
{
  "permissions": {
    "autoAllow": {
      "Read": ["**/*"],
      "Bash": ["npm *", "git *"]
    }
  },
  "environment": "development"
}

関連情報