elixir-performance-review について
Elixirコードの性能を評価するレビュー用スキルです。GenServer、メモリ、並行処理、データベースのチェック項目を備え、報告前に具体的な根拠で検証する手順を示します。
主な機能
- 01GenServerのボトルネック確認
- 02メモリとバイナリ処理の確認
- 03並行処理とバックプレッシャーの確認
- 04データベースクエリのレビュー項目
- 05根拠と検証のゲート
活用シーン
- 01Elixirの変更にあるブロッキングコールバックの確認
- 02大規模データ処理とプロセス増加の点検
- 03報告前の性能上の指摘の検証
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ existential-birds/ beagle --skill elixir-performance-reviewインストール後、Claude Code で/elixir-performance-reviewを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
references/concurrency.mdets-patterns.mdgenserver-bottlenecks.mdmemory.md詳細
Elixir パフォーマンスレビュー
クイックリファレンス
| 問題の種類 | リファレンス |
|---|---|
| メールボックスのオーバーフロー、ブロッキング呼び出し | references/genserver-bottlenecks.md |
| ETS を使用するタイミング、読み取り/書き込みの並行性 | references/ets-patterns.md |
| バイナリの処理、大きなメッセージ | references/memory.md |
| Task のパターン、フロー制御 | references/concurrency.md |
レビューチェックリスト
GenServer
- すべてのリクエストに対する単一プロセスのボトルネックになっていない
- handle_call/cast 内にブロッキング操作がない
- タイムアウトが適切に設定されている
- 読み取りの多い状態には ETS の使用を検討している
メモリ
- 大きなバイナリがプロセス間でコピーされていない
- 大規模なデータ変換にストリームを使用している
- データが上限なく蓄積されない
並行処理
- 動的なタスクには Task.Supervisor を使用している(生の Task.async は使用しない)
- プロセスが上限なく生成されない
- メッセージ生成元に適切なバックプレッシャーがある
データベース
- N+1 クエリを避けるためにプリロードしている
- 大規模な結果セットにページネーションを使用している
- 頻繁に実行されるクエリにインデックスがある
有効なパターン(指摘しないこと)
- スループットが低い場合の単一 GenServer - すべての状態を水平スケーリングする必要があるわけではありません
- クリティカルパスでの同期呼び出し - 一貫性を保つために必要な場合があります
- ETS を使わないインメモリ状態 - 状態が小さい場合、ETS にはオーバーヘッドがあります
- 小さなコレクションでの Stream より Enum - 小規模な場合、Stream のオーバーヘッドに見合う価値はありません
コンテキストに応じたルール
| 問題 | 指摘するのは次の場合のみ |
|---|---|
| GenServer のボトルネック | 1 秒あたり 1000 件を超えるリクエストを処理する、またはコールバック内にブロッキング I/O がある |
| ストリームの使用 | 1 万件を超える項目を処理する、または大きなファイルを読み込む |
| ETS の使用 | 読み取りと書き込みの比率が 10:1 を超え、かつ並行アクセスがある |
ゲート — 報告する前に
パフォーマンスレビューでは、これらを順番に実施してください。各ステップに合格するまで、指摘事項を公開しないでください。
- プロトコルの読み込み — review-verification-protocol を読み、各指摘事項に対するチェック(ホットパス、並行処理、リソース使用量)を適用します。合格条件: 実質的な指摘事項ごとに、満たしたプロトコルのサブセクションを明示できるか、理由(例:このスキルの有効なパターンへの単なる言及)とともに N/A と記載できること。
- 根拠の特定 — 合格条件: 各指摘事項に、具体的な位置情報(
path:lineまたは行の範囲)、あるいはファイルからの短い引用を添えたModule.function/arityが含まれていること。 - パフォーマンスに関する主張 — コンテキストに応じたルールに該当するもの、またはボトルネック、N+1、上限のない増加、大きなメモリ/バイナリコストに関する主張については、合格条件: 「指摘するのは次の場合のみ」を満たす観測済みまたは測定済みの事実(例:レート、項目数、比率)を示すか、成果物(プロファイラーの出力、SQL/ログの抜粋、
grep/検索範囲)を添えること。そうでなければ、確認できなかった点を記載したうえで、質問/疑いありに格下げします。
指摘事項の提出前
まずゲート — 報告する前に(上記のセクション)を完了してください。検証プロトコルは、これらのゲートに必須の入力です。
コメント
Markdown 対応