Skip to content

Bash(cmd:*)やBash(git commit *)などワイルドカード権限ルールがスペースやタブを含むコマンドにマッチしなかった問題の修正

原文(日本語に翻訳)

Bash(cmd:*)Bash(git commit *) などのワイルドカード権限ルールが、余分なスペースやタブを含むコマンドにマッチしなかった問題を修正しました。

原文(英語)

Fixed Bash(cmd:*) and Bash(git commit *) wildcard permission rules failing to match commands with extra spaces or tabs

概要

Claude Codeの権限設定では Bash(git commit *) のようなワイルドカードルールを使用して、特定のコマンドパターンを自動許可できます。このバグでは、コマンドに余分なスペースやタブが含まれている場合(例:git commit -m "message" のようなダブルスペース)、設定したワイルドカードルールがマッチせず、不必要に権限プロンプトが表示されていました。v2.1.98でこの問題が修正され、空白文字の違いを吸収してルールが正しくマッチするようになりました。

基本的な使い方

修正前の動作(問題のある挙動)

json
// .claude/settings.json
{
  "permissions": {
    "allow": [
      "Bash(git commit *)",
      "Bash(npm run *)"
    ]
  }
}
bash
# 修正前:余分なスペースがあるとルールにマッチしない
git commit -m "fix: bug fix"      # → 自動許可(正常)
git  commit -m "fix: bug fix"     # → 権限プロンプト(ダブルスペース)
git	commit -m "fix: bug fix"     # → 権限プロンプト(タブ区切り)

npm run build                      # → 自動許可(正常)
npm  run  build                   # → 権限プロンプト(余分なスペース)

修正後の動作(v2.1.98以降)

bash
# 修正後:余分なスペースやタブも吸収してルールがマッチする
git commit -m "fix: bug fix"      # → 自動許可 ✓
git  commit -m "fix: bug fix"     # → 自動許可 ✓(余分なスペースを吸収)
git	commit -m "fix: bug fix"     # → 自動許可 ✓(タブも吸収)

npm run build                      # → 自動許可 ✓
npm  run  build                   # → 自動許可 ✓(余分なスペースを吸収)

実践例

シナリオ1:Gitコマンドの権限設定(修正後)

Gitコマンドの権限ルールが、スペースの違いに関わらず正しく機能します。

json
// .claude/settings.json
{
  "permissions": {
    "allow": [
      "Bash(git add *)",
      "Bash(git commit *)",
      "Bash(git push origin *)",
      "Bash(git pull *)"
    ]
  }
}
bash
# コマンドを生成するスクリプトやエディタの補完機能が余分なスペースを入れても
# 修正後は正しく許可される

git  add  .                        # → 自動許可 ✓
git commit  -m "feat: new feature" # → 自動許可 ✓
git push  origin  main             # → 自動許可 ✓

シナリオ2:npmスクリプトの権限設定(修正後)

スクリプトランナーや補完ツールが生成するコマンドのスペース差異を吸収します。

json
{
  "permissions": {
    "allow": [
      "Bash(npm run *)",
      "Bash(npm install *)",
      "Bash(yarn add *)"
    ]
  }
}
bash
# エイリアスや補完機能が余分なスペースを入れる場合でも正常動作
npm  run  test                     # → 自動許可 ✓
npm  run  build:production        # → 自動許可 ✓
yarn  add  --dev  jest            # → 自動許可 ✓

シナリオ3:カスタムコマンドのワイルドカードルール(修正後)

json
{
  "permissions": {
    "allow": [
      "Bash(make *)",
      "Bash(docker compose *)",
      "Bash(kubectl apply *)"
    ]
  }
}
bash
# コマンドにスペースの違いがあっても適切にマッチ
make  clean                        # → 自動許可 ✓
make  install                      # → 自動許可 ✓
docker  compose  up  -d            # → 自動許可 ✓
kubectl  apply  -f  deployment.yaml # → 自動許可 ✓

シナリオ4:タブ区切りが発生するケース(修正後)

スクリプトやプログラムが生成するコマンドでタブが使われる場合も対応します。

bash
# シェルスクリプトや自動化ツールが生成するコマンドに
# タブが含まれる場合(HEREDOCなど)

# 例:変数展開後にタブが含まれる場合
CMD="git\tcommit -m 'update'"
eval $CMD  # タブ文字が含まれる

# 修正後:このようなケースも設定されたルールにマッチする

注意点

  • この修正は、ワイルドカードルールのマッチング精度を向上させるものです。既存の設定への変更は不要です。
  • セキュリティの観点から、権限ルールはできるだけ具体的に設定することを推奨します。過度に広いワイルドカード(例:Bash(*))は避けてください。
  • コマンドにスペースやタブが正規化されてマッチングが行われるようになりましたが、権限ルール自体の記述は変わりません。
  • この修正により不必要だった権限プロンプトが減少し、自動化フローの中断が少なくなります。

関連情報