Skip to content

メモリリークをClaudeと調査する

メモリリークは「動いているのになぜか遅くなる」という厄介な問題です。原因特定に何時間も費やした経験がある方も多いでしょう。Claude Codeを活用すれば、診断から修正までのサイクルを大幅に短縮できます。

ヒープダンプをClaudeに渡して原因を特定する

Section titled “ヒープダンプをClaudeに渡して原因を特定する”

まず Node.js でヒープスナップショットを取得しましょう。

Terminal window
node --inspect your-app.js
# Chrome DevTools で "Take heap snapshot" を実行、または
node -e "
const v8 = require('v8');
const fs = require('fs');
const snap = v8.writeHeapSnapshot();
console.log('Snapshot written to:', snap);
"

取得した .heapsnapshot ファイルの内容、またはメモリ使用量のログをそのまま Claude Code に貼り付けて、次のように聞いてみてください。

このヒープスナップショットのサマリーです。
RetainedSize が大きいオブジェクトを中心に、
メモリリークの原因として疑わしい箇所を教えてください。
[ログやスナップショットの内容をここに貼る]

Claude は「どのオブジェクトが GC されずに残っているか」「どのクロージャが参照を保持しているか」を読み解いてくれます。

疑わしいコードを直接レビューさせる

Section titled “疑わしいコードを直接レビューさせる”

原因箇所が絞り込めたら、該当コードを Claude Code に渡してレビューを依頼します。たとえばイベントリスナーの解除漏れはよくある原因のひとつです。

// 問題のあるコード例
class DataPoller {
start() {
this.interval = setInterval(() => {
this.fetchData();
}, 1000);
window.addEventListener('resize', this.handleResize);
// ❌ stop() でリスナーを解除していない
}
stop() {
clearInterval(this.interval);
// window.removeEventListener が抜けている
}
}

このコードを貼り付けて「メモリリークの観点でレビューして、修正版を提示してください」と伝えるだけで、removeEventListener の追加や WeakRef の活用など、具体的な修正案を提案してくれます。

修正後の効果をモニタリングで確認する

Section titled “修正後の効果をモニタリングで確認する”

修正を適用したら、Claude Code に計測用のスクリプト作成も依頼しましょう。

// Claude が生成したメモリ監視スニペット例
const used = () => process.memoryUsage().heapUsed / 1024 / 1024;
const baseline = used();
setInterval(() => {
const current = used();
const diff = (current - baseline).toFixed(2);
console.log(`Heap: ${current.toFixed(2)} MB (diff: ${diff} MB)`);
}, 5000);

このスクリプトを実行しながらアプリを動かし、ヒープ使用量が横ばいで安定していれば修正成功です。まだ増加傾向が見られる場合は、ログをそのまま Claude に渡して次の仮説を立てましょう。「診断 → コードレビュー → 修正 → 計測」のサイクルを Claude と一緒に回すことで、メモリリーク調査の苦労を大きく減らせます。