Communityコーディング&開発github.com

メモリリークデバッグ

JavaScript/Node.jsアプリケーションにおけるメモリリークを診断・解決します。ユーザーが高いメモリ使用量、OOMエラーを報告した場合や、Chrome DevTools MCPメモリツールを使用してヒープスナップショットの取得・比較・検査を行いたい場合に使用します。

メモリリークデバッグ とは?

このスキルは、Chrome DevTools MCPツールを活用してJavaScriptおよびNode.jsアプリケーションのメモリリークを発見、診断、修正するための専門的なガイダンスとワークフローを提供します。対象プラットフォームは主にChrome DevTools MCP対応のフロントエンドWebアプリケーションとNode.jsサーバーですが、`--memoryDebugging`フラグを有効にしてサーバーを起動することで、`compare_heapsnapshots`や`get_heapsnapshot_details`などの高度なメモリデバッグツールが利用可能になります。このスキルは、生の`.heapsnapshot`ファイルを直接読み取るのではなく、MCPヒープスナップショットツールを使用してスナップショットの要約、比較、検査を行うことを優先します。また、切り離されたDOMノード、未処理のクロージャ、グローバル変数、イベントリスナーの未削除、無制限に増大するキャッシュなど、一般的なリーク原因を特定するためのワークフロー(スナップショットのキャプチャ、比較、保持者と支配連鎖の検査、高度な分析とフィルタリング)を提供します。ユーザーが実際にコードを変更する前に、MCPツールを使って保持チェーンと支配連鎖を調査することを推奨します。

対応~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/chromedevtools/chrome-devtools-mcp/tree/main/skills/memory-leak-debugging

Installed? Explore more コーディング&開発 skills: steipete/bluebubbles, steipete/eightctl, steipete/blucli · View all 6 →

お気に入りのAIに質問する

このエージェントスキルを事前に読み込んだ状態で新しいチャットを開きます。

ドキュメント

メモリリークデバッグ は何をしますか?

このスキルは、Chrome DevTools MCPツールを使用してJavaScriptおよびNode.jsアプリケーションのメモリリークを発見、診断、修正するための専門的なガイダンスとワークフローを提供します。

前提条件

高度なメモリデバッグツール(compare_heapsnapshots、get_heapsnapshot_detailsなど)は、サーバーが --memoryDebugging フラグを付けて起動された場合にのみ利用可能です。まずこれらのツールが利用可能かどうかを確認し、もし利用できない場合はMCP設定ファイルを読んで --memoryDebugging が有効になっているか確認してください。

基本原則

  • MCPメモリツールを優先する: 生の .heapsnapshot ファイルを直接読み取ろうとしないでください。非常に大きく、トークンを大量に消費します。Chrome DevTools MCPヒープスナップショットツールを使用して、スナップショットの要約、比較、検査を行ってください。
  • リークの隔離: リークがブラウザ(クライアントサイド)とNode.js(サーバーサイド)のどちらで発生しているかを特定します。
  • 一般的な原因: 切り離されたDOMノード、未処理のクロージャ、グローバル変数、削除されていないイベントリスナー、無制限に増大するキャッシュに注目してください。注:切り離されたDOMノードは意図的なキャッシュである場合があります。それらをnullにする前に常にユーザーに確認してください。
  • 読み込んだスナップショットを閉じる: ヒープスナップショットは大きくなる可能性があります。調査が完了したら、読み込んだ各スナップショットに対して close_heapsnapshot を使用してMCPサーバーが保持するメモリを解放してください。

ワークフロー

1. スナップショットのキャプチャ

フロントエンドWebアプリケーションのメモリリークを調査する際は、chrome-devtools-mcp ツールを使用してアプリケーションと対話し、スナップショットを取得します。

  • click、navigate_page、fill などのページスコープのツール(pageId を指定)を使用して、ページを目的の状態に操作します。
  • 操作後、ページを元の状態に戻してメモリが解放されるかどうかを確認します。
  • 同じユーザー操作を10回繰り返して、リークを増幅させます。
  • take_heapsnapshot(pageId を指定)を使用して、ベースライン、ターゲット(操作後)、最終(操作を元に戻した後)の各状態で .heapsnapshot ファイルをディスクに保存します。

2. スナップショットの比較

take_heapsnapshot を使用して .heapsnapshot ファイルを生成したら、Chrome DevTools MCPメモリツールで比較します。

  • まず各スナップショットに対して get_heapsnapshot_summary を実行し、ファイルが読み込まれることを確認し、大まかな合計を比較します。
  • compare_heapsnapshots を使用してベースラインとターゲットのスナップショットを比較します。概要の差分を取得するには classIndex なしで開始し、不審な成長が見られる場合にのみ classIndex を指定して詳細なクラス差分を要求します。
  • 特定のノードIDに掘り下げる前に、compare_heapsnapshots の概要出力を使用します。

3. 保持者と支配連鎖の検査

クラスやオブジェクトタイプが予想外に増加した場合、コードを変更する前にMCPツールを使用して保持連鎖と支配連鎖を調査します。

  • get_heapsnapshot_class_nodes を使用して、不審なクラスのインスタンスを一覧表示します。
  • get_heapsnapshot_retainers、get_heapsnapshot_retaining_paths、get_heapsnapshot_dominators、get_heapsnapshot_edges を使用して、代表的なノードがまだ到達可能である理由を理解します。
  • 特定の nodeId を指定して get_heapsnapshot_object_details を使用し、詳細なオブジェクトメタデータ(サイズ、タイプ、距離、DOM切り離し状態)を取得します。
  • 文字列の成長が差分で支配的な場合は、get_heapsnapshot_duplicate_strings を使用します。
  • references/common-leaks.md を参照して、一般的なメモリリークの例と、保持パスがアプリケーションコードを指した後の修正方法を確認してください。

4. 高度な分析とカテゴリ別フィルター

組み込みのMCPメモリツールとフィルターを使用して、外部ツールを使わずに特定のリークカテゴリを直接特定します。

  • filterName を指定して get_heapsnapshot_details または get_heapsnapshot_class_nodes を使用し、一般的なリーク原因をターゲットにします:
    • objectsRetainedByDetachedDomNodes: メモリ内に保持されている切り離されたDOM要素を特定します。
    • objectsRetainedByEventHandlers: 削除されていないイベントリスナーによって生存し続けているオブジェクトを特定します。
    • objectsRetainedByContexts: クロージャまたは実行コンテキストに閉じ込められているオブジェクトを特定します。
    • objectsRetainedByConsole: コンソールログによって保持されているオブジェクトを特定します。

Individual skills in this repo

This repo contains 6 individual skills — each has its own dedicated page.

chromedevtools/a11y-debugging

Uses Chrome DevTools MCP for accessibility (a11y) debugging and auditing based on web.dev guidelines. Use when testing semantic HTML, ARIA labels, focus states, keyboard navigation, tap targets, and color contrast.

chromedevtools/chrome-devtools

Uses Chrome DevTools via MCP for efficient debugging, troubleshooting and browser automation. Use when debugging web pages, automating browser interactions, analyzing performance, or inspecting network requests. This skill does not apply to `--slim` mode (MCP configuration).

chromedevtools/chrome-devtools-cli

Use this skill to write shell scripts or run shell commands to automate tasks in the browser or otherwise use Chrome DevTools via CLI.

chromedevtools/cookie-debugging

Uses Chrome DevTools MCP for inspecting, debugging, and testing cookies, session state, authentication issues, and cookie consent compliance. Use when diagnosing 401/403 errors, authentication redirects, session expiration, Cookie/Set-Cookie header issues, cookie banner consent conformance, or third-party cookie/SameSite/Partitioned cookie warnings.

chromedevtools/debug-optimize-lcp

Guides debugging and optimizing Largest Contentful Paint (LCP) using Chrome DevTools MCP tools. Use this skill whenever the user asks about LCP performance, slow page loads, Core Web Vitals optimization, or wants to understand why their page's main content takes too long to appear. Also use when the user mentions "largest contentful paint", "page load speed", "CWV", or wants to improve how fast their hero image or main content renders.

chromedevtools/troubleshooting

Uses Chrome DevTools MCP and documentation to troubleshoot connection and target issues. Trigger this skill when list_pages, new_page, or navigate_page fail, or when the server initialization fails.

関連スキル