Claude Code Plugins

Community-maintained marketplace

Feedback
0
0

Swiftコードの品質レビュー。Swift 6のStrict Concurrency対応、プロトコル指向設計、値型/参照型の使用、エラーハンドリングをチェック。「Swiftコードをレビューして」「Swift 6対応を確認して」で使用。

Install Skill

1Download skill
2Enable skills in Claude

Open claude.ai/settings/capabilities and find the "Skills" section

3Upload to Claude

Click "Upload skill" and select the downloaded ZIP file

Note: Please verify skill by going through its instructions before using it.

SKILL.md

name swift-code-review
description Swiftコードの品質レビュー。Swift 6のStrict Concurrency対応、プロトコル指向設計、値型/参照型の使用、エラーハンドリングをチェック。「Swiftコードをレビューして」「Swift 6対応を確認して」で使用。

Swift Code Review

Swiftコードの品質レビューを行い、Swift 6時代のベストプラクティスに基づく改善提案を行う。

概要

Swiftコードベースに対して以下の観点でレビューを実施:

  • Swift 6 Strict Concurrency対応
  • プロトコル指向設計の評価
  • 値型 vs 参照型の適切な使用
  • エラーハンドリングのベストプラクティス
  • Swiftイディオムの適用

実行条件

  • Swiftファイル(.swift)が対象
  • コードレビュー依頼時
  • Swift 6移行準備時
  • プルリクエストレビュー時

プロセス

Step 1: コード取得

対象のSwiftコードを取得:

  • ファイルパス指定
  • ディレクトリ全体
  • git diff
  • PR差分

Step 2: Swift 6 Strict Concurrency チェック

## Strict Concurrency 観点

### Sendable適合
- [ ] 共有される型にSendable適合があるか
- [ ] @unchecked Sendableの使用は適切か
- [ ] 暗黙的Sendable推論に依存していないか

### Actor分離
- [ ] 適切なActor境界が設定されているか
- [ ] @MainActorの過剰使用がないか
- [ ] nonisolatedの使用は適切か

### データ競合防止
- [ ] 可変状態の共有がないか
- [ ] Task間のデータ受け渡しは安全か
- [ ] クロージャのキャプチャは適切か

Step 3: プロトコル指向設計の評価

## プロトコル設計観点

### 適切な抽象化
- [ ] プロトコルが単一責任を持っているか
- [ ] 過度な抽象化になっていないか
- [ ] Protocol Extensionを活用しているか

### 関連型の設計
- [ ] Associated Typeの制約は適切か
- [ ] Primary Associated Typeを活用しているか(Swift 5.7+)
- [ ] where句による制約は明確か

### 依存性注入
- [ ] プロトコルによる依存性注入が可能か
- [ ] テスタビリティが確保されているか

Step 4: 値型 vs 参照型の評価

## 型の選択観点

### 値型(struct, enum)
- [ ] 不変性が活かされているか
- [ ] CoWの意識があるか
- [ ] 値の意味論が適切か

### 参照型(class)
- [ ] 参照型が本当に必要か
- [ ] 継承は適切に使用されているか
- [ ] finalキーワードが適切に付与されているか

### 型の選択基準
- [ ] 同一性(identity)vs 同等性(equality)
- [ ] 可変性の要件
- [ ] パフォーマンス要件

Step 5: エラーハンドリング評価

## エラーハンドリング観点

### Swift Error Handling
- [ ] throws/try/catchが適切に使用されているか
- [ ] Result型の使用は適切か
- [ ] エラー型は具体的か(Error vs 具体的なError型)

### Optional処理
- [ ] 強制アンラップ(!)の使用は安全か
- [ ] guard letの活用
- [ ] nil合体演算子(??)のデフォルト値は適切か

### 失敗ケース
- [ ] fatalError/preconditionの使用は適切か
- [ ] 回復可能なエラーと回復不能なエラーの区別

Step 6: Swiftイディオム評価

## イディオム観点

### モダンSwift構文
- [ ] if/switch式の活用(Swift 5.9+)
- [ ] 末尾クロージャの適切な使用
- [ ] キーパス(\.)の活用

### コレクション処理
- [ ] map/filter/reduceの適切な使用
- [ ] lazy評価の検討
- [ ] Sequenceプロトコルの活用

### 型安全性
- [ ] タグ付き型(Newtypes)の活用
- [ ] Phantom Typesの検討
- [ ] @frozen/@usableFromInlineの適切な使用

出力形式

# Swift Code Review Report

## 対象
- ファイル: `path/to/file.swift`
- Swift Version: 6.x

## サマリー
| カテゴリ | 問題数 | 重要度 |
|---------|--------|--------|
| Concurrency | 2 | 🔴 High |
| Protocol Design | 1 | 🟡 Medium |
| Type Choice | 0 | 🟢 OK |
| Error Handling | 1 | 🟡 Medium |

## 詳細

### 🔴 [Concurrency] データ競合リスク
**Location**: `UserManager.swift:45`

**Issue**:
クラスプロパティ`users`が複数のTaskからアクセス可能だが、Sendable適合がない。

**現状コード**:
```swift
class UserManager {
    var users: [User] = []  // 危険: 複数Taskからアクセス可能

    func addUser(_ user: User) {
        users.append(user)
    }
}

推奨修正:

actor UserManager {
    private var users: [User] = []

    func addUser(_ user: User) {
        users.append(user)
    }
}

理由: Swift 6のStrict Concurrencyでは、共有可変状態へのアクセスはコンパイルエラーになる。 Actorを使用することで、データ競合を防止できる。


🟡 [Protocol] 過度な抽象化

...


## ガードレール

### 必須チェック項目
- Swift 6コンパイラ警告の確認
- Sendable適合の検証
- 強制アンラップの使用箇所確認

### 自動修正の制限
- Actor導入は手動確認必須
- プロトコル設計変更は影響範囲を確認
- エラーハンドリング変更はテスト必須

### レビュー対象外
- 生成コード(SwiftGen等)
- 外部ライブラリ
- テストコード(別スキルで対応)

## 関連スキル

- `swift-concurrency`: 並行処理の詳細レビュー
- `swift-protocol`: プロトコル設計の詳細支援
- `swiftui-component`: SwiftUI固有のレビュー