swiftui-code-review について
swiftui-code-reviewは、チェックリストに沿ってSwiftUIコードをレビューするスキルです。指摘にはファイルと行番号の根拠を求め、ビュー構成、状態、性能、アクセシビリティの資料を参照します。
主な機能
- 01順序に沿ったレビュー手順
- 02ファイルと行番号付きの指摘
- 03ビュー構成の確認
- 04状態と性能の確認
- 05アクセシビリティのチェックリスト
活用シーン
- 01リポジトリ内のSwiftUI変更のレビュー
- 02状態所有権やビューIDの問題発見
- 03アクセシビリティとDynamic Typeの確認
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ existential-birds/ beagle --skill swiftui-code-reviewインストール後、Claude Code で/swiftui-code-reviewを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
references/accessibility.mdperformance.mdstate-management.mdview-composition.md詳細
SwiftUI コードレビュー
クイックリファレンス
| 問題の種類 | 参照先 |
|---|---|
| View の抽出、モディファイア、body の複雑さ | references/view-composition.md |
| @State、@Binding、@Observable、@Bindable | references/state-management.md |
| LazyStacks、AnyView、ForEach、識別性 | references/performance.md |
| VoiceOver、Dynamic Type、ラベル、特性 | references/accessibility.md |
ゲート(レビューのワークフロー)
順番に完了してください。先に進んではいけません。
- 対象範囲を明確にする — 合格条件:レビュー対象のすべてのファイルが、リポジトリ相対の
.swiftパスとして列挙されていること(または、理由とともに「開いたファイルなし/該当なし」と明記されていること)。 - 指摘の前に参照する — 合格条件:複雑な body、モディファイアチェーン、またはラッパーの所有権に関する質問について、上記の表にある該当する
references/*.mdを開いていること。または、理由を1行で添えて「不要」と明記していること。 - 根拠に基づく指摘 — 合格条件:実質的な問題には、推奨事項より前に
[FILE:LINE](または限定された行範囲)を含めること。シンボルやスニペットは補足として使用できますが、場所の明示に代えることはできません。このコードを示さず、「一般的な SwiftUI の慣習」だけに基づく指摘はしないでください。
レビューチェックリスト
- View の body が10個未満の構成要素である(サブビューを抽出する)
- モディファイアの順序が正しい(background の前に padding)
- View が所有するオブジェクトには @StateObject、渡されたオブジェクトには @ObservedObject を使用する
- @Observable への双方向バインディングには @Bindable を使用する(iOS 17 以降)
- 50個以上の項目を含むスクロールリストには LazyVStack/LazyHStack を使用する
- AnyView を使用していない(代わりに @ViewBuilder またはジェネリクスを使用する)
- ForEach で安定した Identifiable ID を使用している(配列のインデックスは使用しない)
- すべての画像/アイコンに accessibilityLabel がある
- カスタムコントロールに accessibilityAddTraits(.isButton) がある
- Dynamic Type に対応している(固定のフォントサイズを使用しない)
- 非同期処理には .task モディファイアを使用する(onAppear + Task は使用しない)
参照先を読み込むタイミング
- 複雑な View の body またはモディファイアチェーン -> view-composition.md
- プロパティラッパーの使用(@State、@Observable) -> state-management.md
- リストのパフォーマンスまたは View の識別性に関する問題 -> performance.md
- VoiceOver またはアクセシビリティの実装 -> accessibility.md
レビュー時の質問
- この大きな View の body を、より小さく再利用可能な View に分割できますか?
- モディファイアの順序は意図したものですか?(padding -> background -> frame)
- 所有権に対する @StateObject/@ObservedObject の使い方は正しいですか?
- この ScrollView のパフォーマンスは LazyVStack で改善できますか?
- VoiceOver のユーザーにこのインターフェースは理解できますか?
コメント
Markdown 対応