Skip to content

原文(日本語に翻訳)

フックにargs: string[]フィールド(execフォーム)を追加。シェルを介さずにコマンドを直接起動するため、パスのプレースホルダーをクォートする必要がなくなります

原文(英語)

Added hook args: string[] field (exec form) that spawns the command directly without a shell, so path placeholders never need quoting

概要

フック設定にargsフィールドを追加することで、シェルを介さずにコマンドを直接実行できるexecフォームが利用できるようになりました。シェルフォームでは${CLAUDE_PLUGIN_ROOT}などのパスプレースホルダーにクォートが必要でしたが、execフォームでは各引数が個別のパラメータとして渡されるため、スペースを含むパスでも確実に動作します。

基本的な使い方

シェルフォーム(従来):

json
{
  "hooks": {
    "PostToolUse": [
      {
        "matcher": "Bash",
        "hooks": [
          {
            "type": "command",
            "command": "/path/to/my-hook.sh \"${CLAUDE_PLUGIN_ROOT}/config\""
          }
        ]
      }
    ]
  }
}

execフォーム(新機能):

json
{
  "hooks": {
    "PostToolUse": [
      {
        "matcher": "Bash",
        "hooks": [
          {
            "type": "command",
            "command": "/path/to/my-hook.sh",
            "args": ["${CLAUDE_PLUGIN_ROOT}/config"]
          }
        ]
      }
    ]
  }
}

実践例

スペースを含むパスでの安全な実行

json
{
  "hooks": {
    "PreToolUse": [
      {
        "matcher": "Write",
        "hooks": [
          {
            "type": "command",
            "command": "/usr/local/bin/validate-file",
            "args": [
              "--config",
              "${CLAUDE_PROJECT_DIR}/.validation-rules.json",
              "--file",
              "${TOOL_INPUT_FILE_PATH}"
            ]
          }
        ]
      }
    ]
  }
}

プラグインのフックでexecフォームを使用

json
{
  "hooks": {
    "Stop": [
      {
        "hooks": [
          {
            "type": "command",
            "command": "node",
            "args": [
              "${CLAUDE_PLUGIN_ROOT}/hooks/on-stop.js",
              "--session-id",
              "${CLAUDE_SESSION_ID}"
            ]
          }
        ]
      }
    ]
  }
}

注意点

  • argsフィールドがある場合はexecフォーム(シェルなし)で実行されます
  • argsフィールドがない場合は従来通りシェルフォームで実行されます
  • execフォームではシェル展開(*グロブ、パイプ|など)は使用できません
  • パスにスペースが含まれる環境(macOSのアプリケーションフォルダなど)で特に効果的です
  • ${CLAUDE_PROJECT_DIR}${CLAUDE_PLUGIN_ROOT}などのプレースホルダーはexecフォームでも展開されます

関連情報