Skip to content

原文(日本語訳)

ヘッドレスストリーミングセッションが終了した際に、保留中の非同期フックがキャンセルされなかった問題を修正しました

原文(英語)

Fixed pending async hooks not being cancelled when headless streaming sessions ended

概要

ヘッドレスモード(非対話モード)でストリーミングセッションが終了した際に、バックグラウンドで実行中の非同期フックが適切にキャンセルされず、プロセスが残り続ける問題が修正されました。

修正された問題

以前は、ヘッドレスモードで実行中の非同期フック(async: true のフック)がセッション終了時にキャンセルされず、以下の問題が発生していました:

  • プロセスが終了せず残り続ける
  • リソースのリーク
  • CI/CD パイプラインでのタイムアウト
  • 予期しないフックの実行

非同期フックとは

非同期フックは、Claude Code の実行をブロックせずにバックグラウンドで実行されるフックです。

json
{
  "hooks": [
    {
      "name": "log-tool-use",
      "event": "PostToolUse",
      "command": "node scripts/log.js",
      "async": true
    }
  ]
}

async: true を設定することで、ロギング、通知、分析などの副作用をメイン処理をブロックせずに実行できます。

注意点

  • ヘッドレスモード: -p フラグや --print を使用したヘッドレスモードで特に重要な修正です
  • プロセス終了: セッション終了時に非同期フックが適切にキャンセルされ、クリーンに終了します
  • CI/CD 統合: 自動化されたワークフローでの安定性が向上しました
  • リソース管理: 不要なプロセスが残らないため、リソースの無駄がなくなります
  • フック設計: 非同期フックは中断可能な設計にすることを推奨します
  • タイムアウト: フックにタイムアウトを設定している場合、キャンセル処理が優先されます

ヘッドレスモードでの使用例(簡潔版)

bash
# 非同期フックを使用したヘッドレス実行
claude -p "Analyze this codebase" --output-format=stream-json

セッションが終了すると、実行中の非同期フックは自動的にキャンセルされます。

関連情報