urlsession-code-review について
URLSessionを使うSwiftのネットワークコード向けレビュー技能です。レスポンス検証、セッションのライフサイクル、設定、転送、安全性を順に確認し、指摘には根拠を求めます。
主な機能
- 01URLSessionレビュー項目
- 02HTTPと通信エラーの確認
- 03セッションとリソースの確認
- 04バックグラウンド転送の確認
- 05手順付きのセキュリティ確認
活用シーン
- 01Swiftのネットワーク変更のレビュー
- 02HTTPステータスとエラー処理の確認
- 03バックグラウンド処理とファイル転送の監査
- 04ファイルと行番号を伴う指摘の作成
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ existential-birds/ beagle --skill urlsession-code-reviewインストール後、Claude Code で/urlsession-code-reviewを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
references/async-networking.mdcaching.mderror-handling.mdrequest-building.md詳細
URLSession のコードレビュー
クイックリファレンス
| トピック | リファレンス |
|---|---|
| 非同期処理/Await | async-networking.md |
| リクエスト | request-building.md |
| エラー | error-handling.md |
| キャッシュ | caching.md |
レビューチェックリスト
レスポンスの検証
- HTTP ステータスコードを検証している — URLSession は 404/500 でもエラーをスローしません
- ステータスの確認前に、レスポンスを HTTPURLResponse にキャストしている
- トランスポートエラー(URLError)と HTTP エラーの両方を処理している
メモリとリソース
- ダウンロードしたファイルを移動または削除している(非同期 API は自動で削除しません)
- デリゲートを使用するセッションで
finishTasksAndInvalidate()を呼び出している - 長時間実行するタスクで
[weak self]を使用している - 保持している Task の参照を、必要に応じてキャンセルしている
設定
-
timeoutIntervalForResourceを設定している(デフォルトは 7 日です!) - URLCache を十分なサイズに設定している(デフォルトの 512KB は小さすぎます)
- コネクションプーリングのためにセッションを再利用している
バックグラウンドセッション
- 一意の識別子を使用している(特にアプリ拡張機能の場合)
- ファイルベースのアップロードを使用している(データベースではなく)
- 完了ハンドラーではなく、デリゲートメソッドを使用している
セキュリティ
- シークレットをハードコードしていない(Keychain を使用する)
- CRLF インジェクションを防ぐため、ヘッダー値をサニタイズしている
- クエリパラメーターに URLComponents を使用している(文字列連結ではなく)
ハードゲート(指摘事項を報告する前に)
順番に完了してください。前のゲートが未完了の間は先に進まないでください。
- 対象範囲 — 合格: ネットワーク処理の経路で
URLSession、URLRequest、HTTPURLResponse/URLResponse、URLCache、またはURLErrorが現れる、レビュー対象のファイルを少なくとも 1 つ挙げます。該当するものがなければ、「対象範囲外」として終了します。 - HTTP とトランスポート — 合格: HTTP ステータスの処理漏れや「404 が成功として扱われる」ことを指摘する前に、
responseを受け取る completion/async/for awaitの経路についてfile:lineを示し、HTTPURLResponseにキャストしているか、statusCodeを確認しているかを明記します(または、それらを処理するヘルパーを示します)。ハンドラーを確認できない場合は、推測せず 不明 と伝えて、その提示を求めます。 - セッションのライフサイクル — 合格: デリゲートを持つ独自の
URLSessionについては、finishTasksAndInvalidate()または根拠とする、文書化された長期利用/シングルトンのパターンを示します。指摘が設定に依存する場合は、.sharedについてその旨を明記します。デリゲートの問題がない、単発のURLSession.sharedのみを使用するケースは省略します。 - バックグラウンド処理またはファイル転送(該当する場合) — 合格:
URLSessionConfiguration.background、downloadTask、またはアプリ拡張機能のスコープに限定されたセッションが登場する場合、指摘では必要に応じて識別子の一意性、デリゲートと完了ハンドラーの使い分け、またはファイル URL を示します。これらの API が登場しない場合は 該当なし として続行します。 - 重要度とチェックリスト — 合格: すべての 重大 項目に
file:lineを記載し、違反する レビューチェックリスト の小項目(例:レスポンスの検証、バックグラウンドセッション)を明記します。重要度の低い項目についても、根拠とするファイル名を示します。
出力形式
### Critical
1. [FILE:LINE] Missing HTTP status validation
- Issue: 404/500 responses not treated as errors
- Fix: Check `httpResponse.statusCode` is 200-299
コメント
Markdown 対応