原文(日本語)
設定ファイルがディスク上で変更された際に、古い権限ルールをクリアする処理を修正しました。
原文(英語)
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)この修正の利点
設定反映の迅速化
- ファイル編集が即座に反映される
- セッション再起動不要
- スムーズなワークフロー
予期しない動作の防止
- 古い権限ルールが残らない
- 設定と実際の動作が一致
- セキュリティポリシーの確実な適用
開発効率の向上
- 設定の試行錯誤が容易
- チーム設定の同期が簡単
- 環境切り替えがスムーズ
設定ファイルの監視
自動リロードのトリガー
以下の場合に設定が自動的にリロードされます:
~/.claude/settings.jsonの変更.claude/settings.json(プロジェクト固有)の変更- Git pullによる設定ファイル更新
- 外部エディタでの編集
リロード通知
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"
}