File is covered by a Read deny rule in your permission settings
権限設定の deny ルールが読み取りを拒否した状態。既定の .env 保護が主因。
エラー文字列
File is covered by a Read deny rule in your permission settings
何が起きているか
権限設定の deny ルールに一致したため、そのファイルの読み取りが拒否されました。
⚠️ これは安全機構です。 資格情報や鍵が会話に流れ込むのを防ぐために存在します。解除する前に、本当に読ませる必要があるかを考えてください。
実際によく当たるファイル
| ファイル | なぜ拒否されるか |
|---|---|
.env / .env.local |
API キー・DBパスワードが入っている典型 |
*.pem / *.key / id_rsa |
秘密鍵 |
credentials.json / service-account.json |
クラウドの資格情報 |
.aws/credentials |
AWS のアクセスキー |
| 自分で追加した deny ルール | 過去に設定したことを忘れている |
⭐ .env を読ませようとして当たるのが圧倒的多数です。 そして多くの場合、本当に必要なのは値ではなくキーの一覧です。
直し方
1. どのルールに当たったか確認する
/permissions
deny ルールの一覧が表示されます。どのパターンに一致したのかを特定してください。
設定ファイルからも確認できます。
grep -n -A5 '"deny"' ~/.claude/settings.json .claude/settings.json .claude/settings.local.json 2>/dev/null
Select-String -Path "$env:USERPROFILE\.claude\settings.json", ".claude\settings.json", ".claude\settings.local.json" -Pattern 'deny' -Context 0,5 -ErrorAction SilentlyContinue
2. ⭐ そもそも読ませずに済ませる(推奨)
多くの場合、これで用が足ります。
キーの一覧だけ渡す(値を伏せる)
# macOS / Linux
sed -E 's/=.*/=***/' .env
# Windows
(Get-Content .env -Encoding utf8) -replace '=.*', '=***'
⚠️ -Encoding utf8 を省くと日本語のコメントが化けます。 PowerShell 5.1 は BOM の無い UTF-8 を CP932 として読むためです。
.env.example を使う
値を伏せた雛形をリポジトリに置いておけば、そちらを読ませるだけで構造が伝わります。これはチーム開発の作法としても正しい形です。
DB_HOST=
DB_DATABASE=
DB_USERNAME=
DB_PASSWORD=
設定の「読み方」を聞く
「.env に何を書けばいいか」という相談なら、ファイルの中身は不要です。
3. 一時的に許可する(本当に必要な場合)
.claude/settings.local.json に、そのファイルだけを許可するルールを書きます。
⚠️ .gitignore に入っている settings.local.json に書いてください。 共有される設定に書くと、チーム全員の保護が外れます。
deny ルールのほうが優先される場合は、deny 側から該当パターンを外す必要があります。その場合、対象を最小限に絞ってください。
{
"permissions": {
"deny": [
"Read(./.env)",
"Read(./.env.*)"
]
}
}
「この1ファイルだけ」を通したいなら、deny の対象からそのパスだけを除いた書き方にします。deny を丸ごと消さないでください。
4. 作業が終わったら戻す
⭐ これを忘れる人が非常に多くあります。
一時的に外した保護は、作業が終わったら必ず元に戻してください。 外しっぱなしにすると、以降のすべてのセッションで資格情報が読まれうる状態が続きます。
/permissions
で、意図しない許可が残っていないか定期的に確認してください。
5. 組織の方針で制限されている場合
Team / Enterprise 組織では、管理者が権限ポリシーを設定していることがあります。その場合、手元の設定では変更できません。
- 何のために読む必要があるかを明確にして、管理者に相談する
- 多くの場合、手順 2 の方法で代替できます
再発防止
- ⭐
.envを読ませる運用をやめる。.env.exampleを整備しておけば、構造は伝わり、値は漏れません - 資格情報は環境変数やシークレット管理に置き、ファイルに平文で残さない
- deny ルールを外したら、その場でカレンダーに戻す予定を入れるくらいでちょうどいい。忘れます
- 個人的な許可は
.claude/settings.local.jsonに書き、.gitignoreに入れる。共有設定で保護を外すとチーム全体に影響します - このエラーが出たら「邪魔」ではなく「防いでくれた」と考える。会話に流れた資格情報は、あとから消せません