原文(日本語に翻訳)
プラグインのアップデートをまたいで持続するプラグイン永続状態用の${CLAUDE_PLUGIN_DATA}変数を追加。/plugin uninstallコマンドはアンインストール前に削除確認を表示するようになりました
原文(英語)
Added ${CLAUDE_PLUGIN_DATA} variable for plugin persistent state that survives plugin updates; /plugin uninstall prompts before deleting it
概要
${CLAUDE_PLUGIN_DATA}は、プラグインがアップデートをまたいでデータを永続化するための専用ディレクトリを指す変数です。これまでの${CLAUDE_PLUGIN_ROOT}はプラグインのインストールパスを指すため、プラグインをアップデートすると変更されますが、${CLAUDE_PLUGIN_DATA}は常に同じ場所を指し続けます。node_modulesやPython仮想環境、キャッシュファイルなどをここに保存することで、プラグインのアップデート後も再インストール不要になります。
基本的な使い方
プラグインの設定ファイル(plugin.jsonまたはplugin.yaml)でこの変数を使用します:
yaml
# plugin.yaml
name: my-plugin
install:
command: "npm install --prefix ${CLAUDE_PLUGIN_DATA}/node_modules"
hooks:
PreToolUse:
- command: "node ${CLAUDE_PLUGIN_DATA}/node_modules/.bin/my-tool"スキルファイル内での使用例:
markdown
---
name: my-skill
description: My persistent skill
---
Run script from ${CLAUDE_PLUGIN_DATA}/scripts/run.sh実践例
Node.jsの依存関係を永続化する
yaml
# plugin.yaml
name: node-plugin
install:
command: "npm install --prefix ${CLAUDE_PLUGIN_DATA}"
mcp:
- name: my-mcp-server
command: "node"
args: ["${CLAUDE_PLUGIN_DATA}/node_modules/.bin/my-server"]アップデート後もnode_modulesが保持されるため、毎回npm installする必要がありません。
Python仮想環境を永続化する
yaml
# plugin.yaml
name: python-plugin
install:
command: |
python3 -m venv ${CLAUDE_PLUGIN_DATA}/venv && \
${CLAUDE_PLUGIN_DATA}/venv/bin/pip install -r ${CLAUDE_PLUGIN_ROOT}/requirements.txt
hooks:
PostToolUse:
- command: "${CLAUDE_PLUGIN_DATA}/venv/bin/python ${CLAUDE_PLUGIN_ROOT}/scripts/post-hook.py"キャッシュデータを保存する
yaml
# plugin.yaml
name: cache-plugin
hooks:
PreToolUse:
- command: |
mkdir -p ${CLAUDE_PLUGIN_DATA}/cache
# キャッシュファイルへのアクセス
cat ${CLAUDE_PLUGIN_DATA}/cache/last-result.json 2>/dev/null || echo '{}'${CLAUDE_PLUGIN_ROOT}との違い
| 変数 | 指す場所 | アップデート時の挙動 |
|---|---|---|
${CLAUDE_PLUGIN_ROOT} | プラグインのインストールパス | 変更される(バージョンごとに異なる) |
${CLAUDE_PLUGIN_DATA} | 永続データディレクトリ | 変更されない(常に同じ場所) |
注意点
${CLAUDE_PLUGIN_DATA}は初めて参照された際に自動的に作成されます/plugin uninstallコマンドを実行すると、このデータディレクトリを削除するかどうか確認が表示されます。データを保持したい場合は確認に対して「いいえ」を選択してください- 両変数はスキルのコンテンツ、エージェントのコンテンツ、フックコマンド、MCP/LSPサーバーの設定でインライン置換されます
- フックプロセスやサブプロセスには環境変数としてもエクスポートされます