Skip to content

原文(日本語に翻訳)

シェルコマンド実行においてChildProcessとAbortControllerの参照がクリーンアップ後も保持されるメモリリークを修正しました。

原文(英語)

Fixed memory leak in shell command execution where ChildProcess and AbortController references were retained after cleanup

概要

Claude Codeがシェルコマンド(Bash、Python スクリプトなど)を実行する際に使用するChildProcess(子プロセス)とAbortController(中断制御)のオブジェクト参照が、コマンド完了後も解放されない問題が修正されました。多数のシェルコマンドを実行する長いセッションでは、これらの参照が蓄積しメモリ使用量が増加していました。

基本的な使い方

この修正は自動的に適用されます。Bashコマンドの実行が多いセッションで効果が現れます。

bash
# 多数のシェルコマンドを実行するセッション
claude

> npm install を実行して
# ChildProcess: npm install → 完了 → 参照解放(修正後)

> npm run build を実行して
# ChildProcess: npm run build → 完了 → 参照解放(修正後)

> npm test を実行して
# ChildProcess: npm test → 完了 → 参照解放(修正後)

# 修正前: 各コマンドのChildProcess参照がメモリに残り蓄積
# 修正後: コマンド完了後に参照が正しく解放

実践例

ユースケース1: 開発サイクルの自動化

ビルド・テスト・デプロイを繰り返す開発セッション。

bash
claude

# 開発サイクルを何度も繰り返す
> 修正を実施してビルドしてテストを実行して
# npm install → ビルド → テスト(3つのChildProcess) → 全て解放

> エラーを修正してリビルドしてテストを再実行して
# 再ビルド → 再テスト(2つのChildProcess) → 解放

# 10サイクル後もメモリが安定

ユースケース2: スクリプトの繰り返し実行

カスタムスクリプトを繰り返し実行する場合。

bash
claude

# データ処理スクリプトを繰り返し実行
> python process_data.py --input data1.csv を実行して結果を確認して
# Python ChildProcess → 完了 → 解放

> python process_data.py --input data2.csv を実行して
# Python ChildProcess → 完了 → 解放

> python process_data.py --input data3.csv を実行して
# 修正後: 累積したChildProcess参照がなく安定したメモリ使用量

ユースケース3: AbortController使用での中断が多い作業

長時間実行のコマンドを途中で中断する作業。

bash
claude

# 長いコマンドを実行して途中で中断
> 大きなデータセットを処理して(中断)
# AbortController → Ctrl+C → 中断 → 参照解放(修正後)

> 別のコマンドを実行して
# 新しいAbortController → 完了 → 解放

# 修正前: 中断されたAbortControllerの参照がメモリに残っていた
# 修正後: 中断後も参照が適切に解放される

注意点

  • ChildProcessはClaude Codeがシェルコマンドを実行する際に作成されるNode.jsのオブジェクトです。
  • AbortControllerはコマンドの実行を途中でキャンセルするために使用されるオブジェクトです。
  • この修正はコマンドが正常完了した場合と中断された場合の両方でメモリリークを修正します。
  • シェルコマンドを多用するセッション(CI/CDに近い自動化セッション)で最も効果が大きいです。
  • この修正はv2.1.50の多数のメモリリーク修正の1つで、全体としてメモリ効率が大幅に改善されています。

関連情報