Skip to content

原文(日本語に翻訳)

プラグインのアップデートをまたいで持続するプラグイン永続状態用の${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サーバーの設定でインライン置換されます
  • フックプロセスやサブプロセスには環境変数としてもエクスポートされます

関連情報