Skip to content

原文(日本語に翻訳)

2つのプラグインが同じ ${CLAUDE_PLUGIN_ROOT}/... コマンドテンプレートを使用している場合に、プラグインフックが黙って破棄されていた問題を修正しました

原文(英語)

Fixed plugin hooks being silently dropped when two plugins use the same ${CLAUDE_PLUGIN_ROOT}/... command template

概要

複数のプラグインが ${CLAUDE_PLUGIN_ROOT}/... という変数展開を含む同じコマンドテンプレートでフックを定義している場合、どちらかのプラグインのフックが黙って(エラーなしに)破棄されてしまうバグがありました。これにより、特定のプラグインのフックが動作しない原因が特定困難になっていました。修正後は両方のプラグインのフックが正しく登録・実行されます。

基本的な使い方

この修正は自動的に適用されます。複数のプラグインが同じコマンドパターンを使用しても、すべてのフックが正常に動作するようになります。

bash
# 複数プラグインをインストールして使用
/plugin enable plugin-a
/plugin enable plugin-b
# → 両方のプラグインのフックが正常に動作する

実践例

問題が発生していたシナリオ

javascript
// plugin-a のフック定義
// ~/.claude/plugins/plugin-a/hooks.json
{
  "hooks": {
    "PostToolUse": {
      "command": "${CLAUDE_PLUGIN_ROOT}/handlers/post-tool.sh"
    }
  }
}

// plugin-b のフック定義
// ~/.claude/plugins/plugin-b/hooks.json
{
  "hooks": {
    "PostToolUse": {
      "command": "${CLAUDE_PLUGIN_ROOT}/handlers/post-tool.sh"
    }
  }
}
修正前:
CLAUDE_PLUGIN_ROOT が展開された後のコマンドが同じパターンになった場合
→ どちらかのフックが黙って破棄される

修正後:
プラグインごとに CLAUDE_PLUGIN_ROOT が正しく展開されるため
→ plugin-a のフックも plugin-b のフックも両方登録される

正しいフック登録の確認

bash
# 修正後はすべてのフックが登録されているか確認できる
/plugin list
# → 各プラグインのフック状態が表示される

# プラグインを再読み込みしてフックをリセット
/reload-plugins

影響を受けやすいプラグイン構成

影響を受けていた構成:
- 同じカテゴリの処理を行う複数のプラグイン(例: ロギング系プラグイン)
- テンプレートを共有している組織内プラグイン
- 同じ命名規則を使うプラグインセット

修正後:
- プラグインのルートパスが異なれば、同じテンプレート名でも区別される

注意点

  • ${CLAUDE_PLUGIN_ROOT} は各プラグインのインストールパスに展開される変数です
  • 同じコマンド名でも、プラグインのルートが異なれば別々のフックとして扱われます
  • このバグはエラーメッセージが出ないため(「黙って破棄」)、問題の特定が困難でした
  • 複数プラグインを使用している場合は、このバグの影響を受けていた可能性があります

関連情報