Skip to content

原文(日本語に翻訳)

フックが effort.level JSONフィールドと $CLAUDE_EFFORT 環境変数を通じてアクティブなエフォートレベルを受け取れるようになりました。BashツールのコマンドもClaude Codeのエフォートレベルを $CLAUDE_EFFORT で読み取れます

原文(英語)

Hooks now receive the active effort level via the effort.level JSON input field and the $CLAUDE_EFFORT environment variable, and Bash tool commands can read $CLAUDE_EFFORT

概要

Claude Codeのフックシステムが、現在のエフォートレベル(lowmediumhighxhighmax)を受け取れるようになりました。フックスクリプトでは $CLAUDE_EFFORT 環境変数で参照するか、フックへの入力JSONの effort.level フィールドを読み取ることができます。また、Bashツールで実行されるコマンドも $CLAUDE_EFFORT にアクセスできます。これにより、エフォートレベルに応じて処理を変えるスマートなフックやスクリプトが作成できます。

基本的な使い方

フックスクリプト内で $CLAUDE_EFFORT 環境変数を使用します。

bash
#!/bin/bash
# フックスクリプトでエフォートレベルを取得
echo "現在のエフォートレベル: $CLAUDE_EFFORT"

JSONフィールドから取得する場合:

bash
#!/bin/bash
# 標準入力からJSONを読み取る
INPUT=$(cat)
EFFORT=$(echo "$INPUT" | jq -r '.effort.level // "medium"')
echo "エフォートレベル: $EFFORT"

実践例

エフォートレベルに応じてテストの深さを変える

bash
#!/bin/bash
# .claude/hooks/post-tool-use.sh

case "$CLAUDE_EFFORT" in
  "max"|"xhigh")
    echo "高エフォート: 全テストスイートを実行します"
    npm run test:full
    ;;
  "high")
    echo "中高エフォート: 統合テストを実行します"
    npm run test:integration
    ;;
  "medium")
    echo "中エフォート: ユニットテストのみ実行します"
    npm run test:unit
    ;;
  "low")
    echo "低エフォート: テストをスキップします"
    ;;
esac

コード品質チェックのレベル調整

bash
#!/bin/bash
# 高エフォートの場合のみ詳細な静的解析を実行

if [ "$CLAUDE_EFFORT" = "max" ] || [ "$CLAUDE_EFFORT" = "xhigh" ]; then
  echo "詳細な静的解析を実行中..."
  npx eslint . --rule 'no-console: error' --rule 'complexity: [error, 5]'
  npx tsc --strict --noEmit
else
  echo "基本的なlintのみ実行中..."
  npx eslint . --fix
fi

ログの詳細度をエフォートレベルで制御

bash
#!/bin/bash
# PreToolUse フックでのログ設定

EFFORT="${CLAUDE_EFFORT:-medium}"

if [ "$EFFORT" = "max" ] || [ "$EFFORT" = "xhigh" ]; then
  export LOG_LEVEL="debug"
  export VERBOSE=1
else
  export LOG_LEVEL="warn"
  export VERBOSE=0
fi

echo "ログレベル: $LOG_LEVEL (エフォート: $EFFORT)"

settings.json でのフック設定

json
{
  "hooks": {
    "PostToolUse": [
      {
        "matcher": "Bash",
        "hooks": [
          {
            "type": "command",
            "command": "/path/to/scripts/post-bash-hook.sh"
          }
        ]
      }
    ],
    "Stop": [
      {
        "hooks": [
          {
            "type": "command",
            "command": "/path/to/scripts/session-end.sh"
          }
        ]
      }
    ]
  }
}

Bashツールから $CLAUDE_EFFORT を読む

フックだけでなく、Bashツールで実行されるコマンドでも $CLAUDE_EFFORT が利用できます。

# Claude Code プロンプトで実行されるBashコマンド
> echo $CLAUDE_EFFORT でビルドスクリプトを実行してください
bash
# build.sh
#!/bin/bash
echo "エフォートレベル: $CLAUDE_EFFORT"

if [ "$CLAUDE_EFFORT" = "max" ]; then
  npm run build:production -- --analyze
else
  npm run build:development
fi

注意点

  • effort.level の値は "low""medium"(デフォルト)、"high""xhigh""max" の5段階です
  • $CLAUDE_EFFORT が未設定の場合(エフォートレベルが不明な状況)に備えて、デフォルト値を設定しておくことを推奨します:EFFORT="${CLAUDE_EFFORT:-medium}"
  • フックが実行されるイベントによっては effort.level が利用できない場合があります(セッション開始時など)
  • エフォートレベルは /effort コマンドや --effort フラグで変更できます
  • $CLAUDE_EFFORT はBashツールで実行されるシェルコマンドでのみ有効です。外部プロセスや子プロセスには自動的には引き継がれません

関連情報