修正:Windows でバックスラッシュやパス大文字小文字のパーミッションルールが一致しない問題
原文(日本語に翻訳)
Windows のパーミッションルールがバックスラッシュ(~\、\\server\share)や大文字小文字バリアントのパスで一致しない問題、および Read の deny ルールが Glob/Grep の結果からファイルを非表示にしない問題を修正しました。
原文(英語)
Fixed Windows permission rules never matching when spelled with backslashes (~\, \\server\share) or case-variant paths, and Read deny rules not hiding files from Glob/Grep results
概要
Windows 環境で Claude Code を使用する際、パーミッションルールでバックスラッシュを使ったパス(~\Documents\ など)や大文字小文字の違い(C:\Users\ vs c:\users\)があると、ルールが正しく適用されていませんでした。また、Read の deny ルールを設定しても、Glob や Grep の検索結果にファイルが表示されていました。v2.1.162 でこれらの問題が修正されました。
基本的な使い方
Windows 環境でのパーミッション設定例:
json
// .claude/settings.json(Windows 環境)
{
"permissions": {
"deny": [
"Read(~\\sensitive-data\\*)",
"Read(C:\\Users\\user\\private\\*)"
]
}
}修正後は、バックスラッシュ・フォワードスラッシュどちらで書いても正しく機能します:
json
{
"permissions": {
"deny": [
"Read(~/sensitive-data/*)",
"Read(~\\sensitive-data\\*)"
]
}
}実践例
ネットワーク共有へのアクセス制限
json
// UNC パス(\\server\share)のアクセスを制限
{
"permissions": {
"deny": [
"Read(\\\\server\\confidential\\*)",
"Bash(*\\\\server\\confidential\\*)"
]
}
}大文字小文字を区別しないパス設定
json
// Windows では C:\Users と c:\users は同じパスとして処理される
{
"permissions": {
"deny": [
"Read(C:\\Users\\Administrator\\*)"
]
}
}Glob/Grep 結果からの秘密ファイル除外(修正後)
json
// deny ルールを設定すると Glob/Grep 結果にも反映されるようになった
{
"permissions": {
"deny": [
"Read(**/.env)",
"Read(**/secrets.json)",
"Read(**/*.pem)"
]
}
}注意点
- この修正は Windows 環境特有の問題の修正です
- macOS/Linux では以前から正しく動作していました
- バックスラッシュを JSON で表記する場合は
\\とエスケープが必要です - Read の deny ルールが Glob/Grep にも適用されるようになったため、既存の設定の動作が変わる場合があります