Skip to content

原文(日本語に翻訳)

hook.timeoutの設定に関わらず、終了時にSessionEndフックが1.5秒後にキルされていた問題を修正 — CLAUDE_CODE_SESSIONEND_HOOKS_TIMEOUT_MS環境変数で設定可能になった

原文(英語)

Fixed SessionEnd hooks being killed after 1.5 s on exit regardless of hook.timeout — now configurable via CLAUDE_CODE_SESSIONEND_HOOKS_TIMEOUT_MS

概要

セッション終了時に実行されるSessionEndフックが、hook.timeoutで設定した値に関わらず常に1.5秒後にキルされていたバグが修正されました。修正後はCLAUDE_CODE_SESSIONEND_HOOKS_TIMEOUT_MS環境変数でタイムアウト時間を設定できるようになり、時間のかかるクリーンアップ処理や後処理が適切に完了できるようになります。

基本的な使い方

環境変数でタイムアウトを設定:

bash
# SessionEnd フックのタイムアウトを10秒に設定
export CLAUDE_CODE_SESSIONEND_HOOKS_TIMEOUT_MS=10000

# または一時的に設定
CLAUDE_CODE_SESSIONEND_HOOKS_TIMEOUT_MS=10000 claude

実践例

SessionEndフックの設定例

json
// settings.json
{
  "hooks": {
    "SessionEnd": [
      {
        "command": "bash -c 'echo \"セッション終了\" >> ~/claude-sessions.log'",
        "timeout": 5000
      }
    ]
  }
}

時間のかかるセッション終了処理

ログ送信や後処理に時間が必要な場合:

json
// settings.json
{
  "hooks": {
    "SessionEnd": [
      {
        "command": "python3 ~/scripts/upload-session-log.py",
        "timeout": 30000
      }
    ]
  }
}
bash
# 対応する環境変数も設定
export CLAUDE_CODE_SESSIONEND_HOOKS_TIMEOUT_MS=35000  # フック timeout + 余裕分

セッション完了後のGitコミット

json
// settings.json
{
  "hooks": {
    "SessionEnd": [
      {
        "command": "bash ~/scripts/auto-commit-session.sh",
        "timeout": 15000
      }
    ]
  }
}
bash
# ~/scripts/auto-commit-session.sh
#!/bin/bash
cd $CLAUDE_PROJECT_DIR || exit 0
if [ -n "$(git status --porcelain)" ]; then
  git add -A
  git commit -m "Claude session: $(date '+%Y-%m-%d %H:%M')"
  echo "Auto-committed session changes"
fi
bash
# 環境変数でタイムアウトを調整
export CLAUDE_CODE_SESSIONEND_HOOKS_TIMEOUT_MS=20000

タイムアウト設定のガイドライン

フック処理の種類推奨タイムアウト
ログ記録のみ3,000ms (3秒)
ファイル書き込み5,000ms (5秒)
ネットワークリクエスト10,000ms (10秒)
Gitコミット15,000ms (15秒)
複雑なスクリプト30,000ms (30秒)

注意点

  • CLAUDE_CODE_SESSIONEND_HOOKS_TIMEOUT_MSはミリ秒単位で設定します
  • 環境変数の値はhooks設定のtimeoutフィールドよりも優先されます
  • タイムアウトを長く設定しすぎると、Claude Codeの終了が遅延します
  • セッション終了フックは非同期に実行されますが、タイムアウト内に完了しない場合はキルされます
  • .envファイルや.bashrcに設定を追加することで恒久的に適用できます

関連情報