Skip to content

修正: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 にも適用されるようになったため、既存の設定の動作が変わる場合があります

関連情報