Skip to content

原文(日本語に翻訳)

配信後にLSP診断データがクリーンアップされず、長いセッションでメモリが無制限に増加するメモリリークを修正しました。

原文(英語)

Fixed a memory leak where LSP diagnostic data was never cleaned up after delivery, causing unbounded memory growth in long sessions

概要

LSP(Language Server Protocol)から送られてくる診断情報(エラー・警告・情報メッセージなど)のデータが、Claudeに配信された後もメモリから解放されない問題が修正されました。コードを継続的に編集するような長いセッションでは、診断データが際限なく蓄積し続けていました。修正後は診断データが配信後に適切にクリーンアップされます。

基本的な使い方

この修正は自動的に適用されます。LSPを使用する環境(TypeScript、Python、Rustなどの言語サーバーが設定されている場合)で効果が現れます。

bash
# LSPが設定されたプロジェクトで長時間作業するセッション
claude

> TypeScriptのコードを修正して(LSPからエラー診断が配信される)
> 修正したコードをさらに改善して(追加の診断が配信される)
> テストを実行して問題を修正して(さらに診断が配信される)

# v2.1.50以降: 各診断データが処理後にクリーンアップされる
# メモリが蓄積せず安定動作

実践例

ユースケース1: TypeScript開発での長時間セッション

TypeScriptプロジェクトで多数のファイルを編集する場合。

bash
# typescript-language-server が設定されたプロジェクト
claude

> src/auth.ts の型エラーを修正して
# LSPが型エラー診断を送信 → 処理 → 診断データ解放

> src/api.ts の全ての型エラーを修正して
# 新しい診断が送信 → 処理 → 解放

> src/utils.ts と src/helpers.ts の問題を修正して
# ... 何十ファイルも修正 ...

# 修正前: 診断データが積み重なりメモリが増加
# 修正後: 各診断が処理後に解放され安定

ユースケース2: Rustプロジェクトでの継続的開発

rust-analyzerを使用したRust開発での長時間作業。

bash
# rust-analyzer が設定されたプロジェクト
claude

> Cargo.tomlの依存関係を更新して、それに伴うコードの変更もして
# rust-analyzerから大量の診断が送られる

> 警告をすべて修正して
# 警告診断が送信される → 修正ごとに診断が更新される

# メモリ使用量が安定(診断データが解放されるため)

ユースケース3: 大規模なリファクタリング作業

多数のファイルにわたるリファクタリングでLSP診断が大量に発生する場合。

bash
claude

> 関数名をgetUser → fetchUserに一括リネームして
# LSPがすべての参照箇所でエラー診断を送信

> すべてのインポートを更新して
# 更新するたびに診断が変化

> 型定義を修正して型エラーを解消して
# 型エラーの診断が解消・更新される

# 修正後は診断データが積み重ならないため安定して作業継続可能

注意点

  • この問題はLSPが有効な環境でのみ発生していました。LSPを使用しない場合は影響を受けていません。
  • 診断データのクリーンアップはデータがClaudeに配信された後に行われます。LSPサーバー自体の動作には影響しません。
  • 長時間の開発セッションほど、この修正の恩恵が大きくなります。
  • この修正と合わせてv2.1.50では多数のメモリリーク修正が行われており、全体として長時間セッションの安定性が大幅に向上しています。

関連情報