Skip to content

原文(日本語に翻訳)

インタラクティブモードでフックイベントが長いセッション中に無制限に蓄積していたメモリリークを修正しました

原文(英語)

Fixed a memory leak in interactive mode where hook events could accumulate unboundedly during long sessions

概要

Claude Code のインタラクティブモード(通常の対話型 CLI セッション)において、フックシステムが発火させるイベント(PostToolUse、PreToolUse、Stop など)のオブジェクトが処理後も解放されずに蓄積し続けるメモリリークがありました。ツールの使用が多いセッション(多数のファイル編集やコマンド実行など)ほど影響が大きくなっていました。修正後はフックイベントが処理後に適切に解放されます。

基本的な使い方

この修正は自動的に適用されます。フックを使用する長時間セッションでのメモリ効率が向上します。

bash
# フックが設定されている環境でも長いセッションでメモリが安定
claude
# → ツール使用ごとにフックイベントが発火しても、処理後に解放される

実践例

フックイベントとは

bash
# ~/.claude/settings.json でフックを設定する例
{
  "hooks": {
    "PostToolUse": [
      {
        "matcher": "Bash",
        "hooks": [
          {
            "type": "command",
            "command": "logger 'Bash コマンドが実行されました'"
          }
        ]
      }
    ]
  }
}
フックが発火するタイミング:
- PreToolUse: ツール実行前
- PostToolUse: ツール実行後
- Stop: セッション停止時
- SessionStart: セッション開始時

これらのイベントオブジェクトが修正前は解放されなかった

メモリリークの影響規模

修正前(フックが設定された環境での長いセッション):

100回のツール実行:
→ フックイベント 100個 × イベントオブジェクト = 数MB が蓄積

大規模リファクタリング(1000回のファイル編集):
→ Edit ツール + PostToolUse フック = 1000個のイベント
→ 数十MB が解放されずに蓄積

修正後: 各フックイベントは処理後に解放
→ ツール使用数によらずメモリが安定

フックを多用するシナリオでの改善

bash
# 自動ログ記録フックを設定した大規模リファクタリング
# フックが各ファイル編集後に発火

# 修正前: 1000ファイル編集 → 1000個のフックイベントが蓄積
# 修正後: 各フックイベントは処理後に解放、安定したメモリ消費

注意点

  • この問題はフックが設定されている環境でのみ発生していました
  • フックを設定していない場合は影響がありません
  • PostToolUse フックが多く発火するシナリオ(多数のファイル編集など)ほど影響が大きかったです
  • 修正は他のメモリリーク修正と合わせて 2.1.69 で適用されています

関連情報