mcpField
C
combine-code-review

combine-code-review

github.com/existential-birdsテスト・品質85118 回インストール11 週間前に更新
リポジトリ

combine-code-review について

combine-code-reviewは、Swift Combineのコードを審査する開発者向けのレビュー用スキルです。購読のライフタイム、参照サイクル、オペレーター、エラー処理、UIのスレッド制御を確認し、指摘前の検証ゲートを設けています。

主な機能

  1. 01購読とAnyCancellableの保持確認
  2. 02クロージャーの循環参照リスク検出
  3. 03Publisherオペレーターの用法確認
  4. 04チェーン内のエラー処理確認
  5. 05UI更新のメインスレッド制御確認

活用シーン

  1. 01sinkとassignのライフタイム管理のレビュー
  2. 02Combineチェーンのメモリ問題の調査
  3. 03検索処理でのflatMapとswitchToLatestの評価
  4. 04UI向けPublisherチェーンのスレッド制御確認

インストール

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

$npx skills add https://github.com/existential-birds/beagle --skill combine-code-review

インストール後、Claude Code で/combine-code-reviewを入力して読み込まれたか確認します。

同梱ファイル

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

references/
error-handling.md
memory.md
operators.md
publishers.md

詳細

Combine のコードレビュー

クイックリファレンス

問題の種類リファレンス
Publisher、Subject、AnyPublisherreferences/publishers.md
map、flatMap、combineLatest、switchToLatestreferences/operators.md
AnyCancellable、循環参照、[weak self]references/memory.md
tryMap、catch、replaceError、Neverreferences/error-handling.md

レビューチェックリスト

  • sink クロージャで、self が cancellable を所有している場合は [weak self] を使用している
  • assign(to:on:self) を使用していない(assign(to: &$property) または sink を使用する)
  • すべての AnyCancellable を Set またはプロパティに保持している(破棄していない)
  • Subject を eraseToAnyPublisher() で AnyPublisher として公開している
  • flatMap を適切に使用している(map + switchToLatest が必要な場合に使用していない)
  • メインチェーンを維持するため、エラーハンドリングを flatMap 内で行っている
  • エラー型を元に戻すため、tryMap の後に mapError を使用している
  • UI を更新する前に receive(on: DispatchQueue.main) を使用している
  • イベントには PassthroughSubject、状態には CurrentValueSubject を使用している
  • retry と併用する場合、Future を Deferred でラップしている

リファレンスを読み込むタイミング

  • Subject または publisher の選択をレビューする → publishers.md
  • オペレーターのチェーンまたは publisher の結合をレビューする → operators.md
  • サブスクリプションまたはメモリの問題をレビューする → memory.md
  • エラーハンドリングまたは try* オペレーターをレビューする → error-handling.md

ハードゲート(指摘を報告する前に)

順番に完了してください。前のゲートが未完了のまま先に進まないでください。

  1. スコープ — 合格: レビュー対象のうち、Combine をインポートしているファイルまたは型、あるいはクイックリファレンスの API(例:AnyPublisher、@Published、PassthroughSubject)を使用しているファイルまたは型を、少なくとも 1 つ挙げてください。該当するものがなければ、「対象外」として終了してください。
  2. サブスクリプションの保持 — 合格: スコープ内の各 sink、assign、store(in:) について、AnyCancellable がどこに保持されているか(プロパティ、Set、タスクの存続期間)を明記するか、1 行の理由(例:呼び出し元より長く存続しない、同期的な 1 回限りの処理)を添えて 一時的 と示してください。コードの断片から判断できない場合は 不明 とし、安全だと決めつけず、周辺の保持方法を確認してください。
  3. 循環参照の主張 — 合格: リークが確認されたという指摘では、キャプチャの連鎖(例:self → 保持された cancellable → self を強くキャプチャするクロージャ)を明示してください。疑いのあるケースは、リークが確認されたとせず、リスク/要確認 としてください。安全性を述べる場合は、根拠とした [weak self]、[unowned self]、またはキャプチャを行わないパターンを示してください。
  4. UI/メインスレッド — 合格: チェーンから UIKit/SwiftUI を更新する場合、UI 処理の前に receive(on: DispatchQueue.main)、@MainActor、または同等の指定があることを示すか、スケジューリングの欠落を ファイル名:行番号 で指摘してください。
  5. 重要度とチェックリスト — 合格: 高または重大の各項目には ファイル名:行番号(または貼り付けられたコードの正確な行)を含め、違反しているレビューチェックリストの項目を明示してください。重要度の低い指摘では行番号を省略できますが、名前を挙げたファイルから再現できる必要があります。

レビュー時の質問

  1. すべてのサブスクリプションが保持されていますか?(破棄された AnyCancellable がないか確認してください)
  2. sink または assign が self との循環参照を作る可能性はありますか?
  3. 検索/オートコンプリートでは、flatMap の代わりに switchToLatest が必要ですか?
  4. この publisher が失敗した場合、どうなりますか?(メインチェーンが終了しませんか?)
  5. try* オペレーターの後で、エラー型は保持されているか、適切に変換されていますか?

コメント