mcpField
L
ln-653-runtime-performance-auditor

ln-653-runtime-performance-auditor

github.com/levnikolaevichテスト・品質584371 回インストール2 日前に更新
リポジトリ

ln-653-runtime-performance-auditor について

ln-653-runtime-performance-auditor は、非同期コードおよび一般的なコードの実行時性能を監査するスキルです。6 種類のアンチパターンを調べ、重要度と作業量を添えて記録し、準拠スコアを算出します。

主な機能

  1. 01非同期コード内のブロッキング I/O 検出
  2. 02不要なリスト割り当ての発見
  3. 03非同期関数内の同期スリープ検出
  4. 04ループ内の文字列連結の確認
  5. 05CPU 負荷処理と冗長コピーの確認
  6. 06レポート生成とスコア算出

活用シーン

  1. 01非同期リクエスト処理コードのレビュー
  2. 02コードベースの性能アンチパターン特定
  3. 03実行時性能監査の構造化レポート作成

MCP 対応

利用可能な場合、ファイルの読み取り・検索・編集には hex-line MCP を優先し、監査結果の改善に有効な場合はホットスポット検出に hex-graph を優先します。

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/levnikolaevich/claude-code-skills --skill ln-653-runtime-performance-auditor

インストール後、Claude Code で/ln-653-runtime-performance-auditorを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

references/
audit_output_schema.md
audit_scoring.md
audit_summary_contract.md
audit_worker_core_contract.md
mcp_integration_patterns.md
mcp_tool_preferences.md
two_layer_detection.md
references/templates/
audit_worker_report_template.md

詳細

パス: ファイルパス(references/、../ln-*)は、このスキルディレクトリからの相対パスです。

ランタイムパフォーマンス監査(L3 ワーカー)

タイプ: L3 ワーカー

非同期コードおよび一般的なコードにおけるランタイムパフォーマンスのアンチパターンを監査する、専門ワーカーです。

目的と範囲

  • ランタイムパフォーマンスを監査します(優先度:中)
  • 非同期処理のアンチパターン、不要なメモリ割り当て、ブロッキング処理を確認します
  • 重要度、場所、作業量、推奨事項を含む構造化された指摘事項をファイルに書き込みます
  • ランタイムパフォーマンスカテゴリの適合スコア(X/10)を算出します

入力

必ず読み込む: references/audit_worker_core_contract.md および references/mcp_tool_preferences.md を読み込みます。 ツールポリシー:ホストの AGENTS.md が適用範囲外となる独立したサブエージェントとして実行される場合があるため、ファイルの読み取り、検索、編集にはまず hex-line MCP を使用してください。MCP の動作が不明な場合に限り、references/mcp_integration_patterns.md を読み込みます。

次の情報を含む contextStore を受け取ります:tech_stack、best_practices、codebase_root、output_dir。

ドメイン対応: domain_mode と current_domain をサポートします。

ホットスポットの検出によってランタイムに関する指摘事項の精度が大きく向上する場合は、まず hex-graph を使用してください。ローカルコードの読み取りには、利用可能であればまず hex-line を使用してください。MCP が利用できない、サポートされていない、またはインデックス化されていない場合は、組み込みの Read/Grep/Glob/Bash を使って続行し、レポートに代替手段を使用したことを記載してください。

ワークフロー

検出ポリシー:2 層の検出(候補のスキャン、その後のコンテキスト検証)を使用します。検証方法が曖昧な場合に限り、references/two_layer_detection.md を読み込みます。

  1. contextStore からコンテキストを解析

    • tech_stack、best_practices、output_dir を抽出します
    • scan_path を決定します
    • 非同期フレームワークを検出します:asyncio(Python)、Node.js async、Tokio(Rust)
  2. コードベースをスキャンして違反を検出

    • scan_path を対象にパターンを Grep します
    • ルール 1、3、5 では、まず async def ブロックを検出し、その内部に違反がないか確認します
  3. 重要度、場所、作業量、推奨事項とともに指摘事項を収集

  4. ペナルティアルゴリズムを使ってスコアを算出

  5. レポートを作成: references/templates/audit_worker_report_template.md に従って完全な Markdown レポートをメモリ上に作成し、単一の Write 呼び出しで {output_dir}/ln-653--global.md に書き込みます

  6. 概要を返す: コーディネーターに最小限の概要を返します(出力形式を参照)

監査ルール(優先度:中)

1. 非同期処理内のブロッキング I/O

内容: 非同期関数内での同期ファイル/ネットワーク操作により、イベントループがブロックされます

検出(Python):

  • async def 関数を見つけます
  • 関数内でブロッキング呼び出しを Grep します:
    • ファイル:open(、.read_bytes()、.read_text()、.write_bytes()、.write_text()、Path(...).(read|write)
    • ネットワーク:requests.get、requests.post、urllib.request
    • サブプロセス:subprocess.run(、subprocess.call(
  • 除外:await asyncio.to_thread(...) または await loop.run_in_executor(...) でラップされた呼び出し

検出(Node.js):

  • async function または async アロー関数内で、fs.readFileSync、fs.writeFileSync、child_process.execSync を Grep します

重要度:

  • 高: API リクエストハンドラー内のブロッキング I/O(イベントループ全体をブロックします)
  • 中: バックグラウンドタスク/ワーカー内のブロッキング I/O
  • 重要度を下げる条件: __init__/セットアップ/ブートストラップ内(リクエスト処理経路外)のブロッキング I/O → 低。ホットパス以外での小さなファイル(1KB 未満)の読み取り → 対象外

推奨事項: ファイル操作には aiofiles、asyncio.to_thread()、または loop.run_in_executor() を使用し、requests の代わりに httpx.AsyncClient を使用します

作業量: S(to_thread でラップするか、非同期ライブラリに切り替えます)

2. 不要なリストの割り当て

内容: ジェネレーター式で十分な場合にリスト内包表記を使用しています

検出方法:

  • len([x for x in ...]) - カウントするだけなのにリストを割り当てています。sum(1 for ...) を使用してください
  • any([x for x in ...]) - 短絡評価のチェックにリストを割り当てています。any(x for x in ...) を使用してください
  • all([x for x in ...]) - 同じパターンです。all(x for x in ...) を使用してください
  • set([x for x in ...]) - 集合内包表記 {x for x in ...} を使用してください
  • "".join([x for x in ...]) - ジェネレーターを直接使用してください:"".join(x for x in ...)

重大度:

  • MEDIUM: ホットパス(API ハンドラー、ループ)での不要な割り当て
  • LOW: まれにしか実行されないコードでの不要な割り当て

推奨事項: [...] をジェネレーター (...) または集合内包表記 {...} に置き換えてください

作業量: S(構文の変更のみ)

3. 非同期処理内の同期スリープ

内容: 非同期関数内の time.sleep() がイベントループをブロックします

検出方法:

  • async def ブロック内にある time\.sleep を grep で検索します
  • パターン:await some_async_call() ... time.sleep(N) ... await another_call()

重大度:

  • HIGH: 非同期 API ハンドラー内の time.sleep()(同時実行中のすべてのリクエストを停止します)
  • MEDIUM: 非同期バックグラウンドタスク内の time.sleep()
  • 重大度を下げる条件: CLI/スクリプト内の time.sleep(非同期サーバーではない場合)は対象外とします

推奨事項: await asyncio.sleep(N) に置き換えてください

作業量: S(1 行の変更)

4. ループ内での文字列連結

内容: ループ内で += を使って文字列を構築しています(大きな文字列では O(n^2) になります)

検出方法:

  • for/while ループ内で += を使っている変数 result、output、html、text のパターン
  • grep で検索するパターン:ループ本体内で、文字列オペランドを含む += の前にある変数

重大度:

  • MEDIUM: 大きなデータ(100 回超の反復)を処理するループ内での文字列連結
  • LOW: 少ない反復(100 回未満)のループ内での文字列連結

推奨事項: list.append() と "".join()、または io.StringIO、あるいは "".join(generator) を使う f-string を使用してください

作業量: S(リストと join を使う形にリファクタリング)

5. CPU バウンド処理での to_thread の不足

内容: 非同期ハンドラー内の CPU 集約型の同期処理を、スレッドにオフロードしていません

検出方法:

  • async def 内で、CPU 集約型の処理を探します:
    • 大きなファイルの JSON 解析:json.loads(large_data)、json.load(file)
    • 画像処理:PIL.Image.open、cv2.imread
    • 暗号処理:hashlib、bcrypt.hashpw
    • XML/HTML 解析:lxml.etree.parse、BeautifulSoup(
    • await の箇所を挟まずに行う大規模なデータ変換
  • 除外対象:すでに asyncio.to_thread() または executor でラップされている処理

重大度:

  • MEDIUM: 非同期ハンドラー内の CPU バウンド処理(データサイズに応じてイベントループをブロックします)

推奨事項: await asyncio.to_thread(func, *args)(Python 3.9 以降)または loop.run_in_executor(None, func, *args) でラップしてください

作業量: S(to_thread でラップ)

6. 冗長なデータコピー

内容: データを変更せず読み取るだけなのに、不要な .copy()、list()、dict() を使っています

検出方法:

  • data = list(items) の後、data は反復処理にしか使われない(変更されない)
  • config = config_dict.copy() の後、config は読み取りにしか使われない
  • result = dict(original) の後、result は変更されずに返される

重大度:

  • LOW: 多くの状況での冗長なコピー(メモリーのわずかなオーバーヘッド)
  • MEDIUM: ホットパスでの大きなデータの冗長なコピー

推奨事項: 不要なコピーを削除してください。変更しない場合は元のデータを渡してください

作業量: S(コピー呼び出しを削除)

スコアリングアルゴリズム

必ずお読みください: references/audit_scoring.md を読み込んでください。

出力形式

必ずお読みください: references/templates/audit_worker_report_template.md を読み込んでください。

references/audit_summary_contract.md に従って JSON サマリーを記述してください。管理モードでは、呼び出し元から runId と summaryArtifactPath の両方が渡されます。スタンドアロンモードでは、ワーカーが共有コントラクトに従って、実行単位の成果物パスを独自に生成します。

レポートを {output_dir}/ln-653--global.md に、category: "Runtime Performance" とチェック項目 blocking_io_in_async、unnecessary_list_allocation、sync_sleep_in_async、string_concat_in_loop、missing_to_thread、redundant_data_copies を含めて出力してください。

references/audit_summary_contract.md に従ってサマリーを返してください。

summaryArtifactPath がない場合は、スタンドアロンのランタイムサマリーを .hex-skills/runtime-artifacts/runs/{run_id}/evaluation-worker/{worker}--{identifier}.json に書き込み、必要に応じて同じサマリーを構造化出力にも含めてください。

Report written: .hex-skills/runtime-artifacts/runs/{run_id}/audit-report/ln-653--global.md
Score: X.X/10 | Issues: N (C:N H:N M:N L:N)

重要なルール

読み込み済みの references/audit_worker_core_contract.md を適用してください。

  • 自動修正は禁止: 報告のみ行ってください
  • 非同期コンテキストが必要: ルール 1、3、5 は非同期関数内に限り適用します
  • ラッパーは除外: すでに to_thread/run_in_executor でラップされている呼び出しは指摘しないでください
  • コンテキストを考慮: 1 KB 未満の小さなファイルを同期的に読み込む場合は許容されることがあります
  • テストは除外: テストユーティリティやテストフィクスチャは指摘しないでください

完了条件

読み込み済みの references/audit_worker_core_contract.md を適用してください。

  • contextStore の解析が正常に完了している(output_dir を含む)
  • scan_path が決定されている
  • 非同期フレームワークが検出されている(asyncio/Node.js async/Tokio)
  • 6 つすべてのチェックが完了している:
    • ブロッキング I/O、不要な割り当て、同期スリープ、文字列連結、CPU 負荷の高い処理、冗長なコピー
  • 重大度、場所、工数、推奨事項を含む指摘事項が収集されている
  • ペナルティアルゴリズムを使用してスコアが計算されている
  • {output_dir}/ln-653--global.md にレポートが書き込まれている(アトミックな単一の Write 呼び出し)
  • コントラクトに従ってサマリーが書き込まれている

参照ファイル

  • 監査出力スキーマ: references/audit_output_schema.md

バージョン: 1.0.0 最終更新日: 2026-02-04

コメント