Skip to content

原文(日本語に翻訳)

Bashツールのサブプロセス環境に、フックに渡される session_id と一致する CLAUDE_CODE_SESSION_ID 環境変数を追加しました。

原文(英語)

Added CLAUDE_CODE_SESSION_ID environment variable to the Bash tool subprocess environment, matching the session_id passed to hooks

概要

CLAUDE_CODE_SESSION_ID は、Bashツールが実行するすべてのサブプロセスに自動的に設定される環境変数です。この値はフックシステムに渡される session_id と同一であり、スクリプトやツールがセッションを識別・追跡できるようになります。これにより、BashツールとフックシステムでセッションIDを一貫して参照できるようになります。

基本的な使い方

Bashツール内で実行されるスクリプトから、セッションIDを取得できます。

bash
# Bashツールのサブプロセス内でセッションIDを確認
echo $CLAUDE_CODE_SESSION_ID
# 例: session_abc123def456

フックスクリプト側では同じ session_id が渡されるため、両者を照合できます。

bash
# フックスクリプト例(PreToolUseフックなど)
#!/bin/bash
SESSION_ID="$CLAUDE_CODE_SESSION_ID"
echo "現在のセッション: $SESSION_ID" >> /tmp/claude-session.log

実践例

セッション別ログの記録

Bashツールを通じて実行される操作をセッションIDで区別してログに記録できます。

bash
#!/bin/bash
# セッション固有のログファイルに書き込む
LOG_FILE="/tmp/claude-logs/${CLAUDE_CODE_SESSION_ID}.log"
mkdir -p /tmp/claude-logs
echo "[$(date)] コマンド実行: $@" >> "$LOG_FILE"

セッションをまたいだ一時ファイルの管理

セッションIDを使って一時ファイルやキャッシュをセッション単位で分離できます。

bash
#!/bin/bash
# セッション固有の作業ディレクトリを作成
WORK_DIR="/tmp/claude-work/${CLAUDE_CODE_SESSION_ID}"
mkdir -p "$WORK_DIR"

# セッション終了時にクリーンアップするトラップを設定
trap "rm -rf $WORK_DIR" EXIT

# 作業ディレクトリを利用
cd "$WORK_DIR"
echo "作業ディレクトリ: $WORK_DIR"

フックとBashツールの連携

フックとBashツールの両方でセッションIDを使って状態を共有できます。

bash
# PreToolUseフック(settings.jsonで設定)
#!/bin/bash
# フックに渡されるsession_idとBashツールのCLAUDE_CODE_SESSION_IDは同一
SESSION_STATE_FILE="/tmp/claude-state-${session_id}.json"
echo '{"started": true}' > "$SESSION_STATE_FILE"

# Bashツール内のスクリプト
STATE_FILE="/tmp/claude-state-${CLAUDE_CODE_SESSION_ID}.json"
cat "$STATE_FILE"  # フックが書き込んだ状態を読み込める

注意点

  • CLAUDE_CODE_SESSION_ID はBashツールのサブプロセス環境にのみ自動設定されます。通常のターミナルセッションでは利用できません。
  • セッションIDはClaude Codeの各セッション(起動)ごとに一意です。--resume で再開した場合は同じセッションIDが引き継がれます。
  • セッションIDはフックの session_id フィールドと完全に一致するため、フックとBashツールのスクリプト間でシームレスに連携できます。
  • セッションIDを含むログや一時ファイルは、ディスク容量の観点から定期的にクリーンアップすることを推奨します。

関連情報