Skip to content

原文(日本語に翻訳)

インタラクティブな /resume でセッションを切り替えた際に SessionEnd フックが発火しない問題を修正しました

原文(英語)

Fixed SessionEnd hooks not firing when using interactive /resume to switch sessions

概要

Claude Codeのライフサイクルフックの一つである SessionEnd は、セッションが終了するときに実行されるフックです。しかし、/resume コマンドで別のセッションにインタラクティブに切り替えた場合、現在のセッションが終了しているにもかかわらず SessionEnd フックが実行されない問題がありました。この修正により、セッション切り替え時も SessionEnd フックが確実に発火するようになります。

基本的な使い方

SessionEnd フックが正しく発火するようになったため、セッション終了時の後処理(ログ記録、クリーンアップ処理など)が /resume での切り替え時にも確実に実行されます。

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

実践例

セッション終了ログの記録

json
// settings.json でSessionEndフックを設定
{
  "hooks": {
    "SessionEnd": [
      {
        "matcher": "",
        "hooks": [
          {
            "type": "command",
            "command": "echo \"$(date): セッション終了\" >> ~/claude-session-log.txt"
          }
        ]
      }
    ]
  }
}
bash
# /resume でセッションを切り替える場合
/resume

# セッション選択画面で別のセッションを選択
# 修正後: 前のセッションの SessionEnd フックが確実に実行される
# ~/claude-session-log.txt にログが記録される

セッション切り替え時のクリーンアップ

json
{
  "hooks": {
    "SessionEnd": [
      {
        "matcher": "",
        "hooks": [
          {
            "type": "command",
            "command": "/path/to/cleanup-script.sh"
          }
        ]
      }
    ]
  }
}
bash
#!/bin/bash
# cleanup-script.sh
# セッション終了時に一時ファイルを削除
rm -rf /tmp/claude-work-*
echo "クリーンアップ完了: $(date)"

セッション統計の収集

json
{
  "hooks": {
    "SessionEnd": [
      {
        "matcher": "",
        "hooks": [
          {
            "type": "command",
            "command": "python3 ~/scripts/record-session-stats.py"
          }
        ]
      }
    ]
  }
}

注意点

  • 影響を受ける操作: インタラクティブな /resume コマンドでのセッション切り替え時のみ問題が発生していました。通常のセッション終了(Ctrl+Dやexitなど)では正しく動作していました
  • フックの実行順序: SessionEnd フックはセッションが終了した直後に実行されます。次のセッションが開始する前に実行されることが保証されます
  • エラーハンドリング: フック内でエラーが発生した場合、セッション切り替えには影響しません
  • 他のライフサイクルフック: PreToolUsePostToolUseStop などの他のフックは影響を受けていませんでした

関連情報