Claude-skill-registry ios-clean-architecture

iOSアプリのSPMパッケージ構成・レイヤー依存関係・設計原則を定義。iOS機能実装・コードレビュー時に参照。no problem製SPMパッケージの使用指針を含む。

install
source · Clone the upstream repo
git clone https://github.com/majiayu000/claude-skill-registry
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/majiayu000/claude-skill-registry "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/data/ios-clean-architecture" ~/.claude/skills/majiayu000-claude-skill-registry-ios-clean-architecture && rm -rf "$T"
manifest: skills/data/ios-clean-architecture/SKILL.md
source content

iOS Clean Architecture

iOSアプリのクリーンアーキテクチャに基づくパッケージ構成と設計原則。

パッケージ依存図

                    ┌─────────────────┐
                    │  Presentation   │  SwiftUI Views, Components
                    └────────┬────────┘
                             │
    ┌───────────┬────────────┼────────────┬───────────┐
    ▼           ▼            ▼            ▼           ▼
┌────────┐ ┌────────┐ ┌──────────┐ ┌──────────┐ ┌──────────────┐
│ State  │ │UseCases│ │Repository│ │ Services │ │  External    │
│        │ │        │ │          │ │          │ │  SPM (4)     │
└────┬───┘ └────┬───┘ └────┬─────┘ └────┬─────┘ └──────────────┘
     │          │    ↘     │      ↙     │
     │          └─────┬────┴──────┬─────┘
     │                ▼           │
     │       ┌──────────────┐     │
     └──────►│    Domain    │◄────┘
             └──────────────┘

: UseCasesはRepository・Servicesの両方に依存可能。ServicesはDomainのみに依存。

ローカルパッケージ(6つ)

パッケージ責務依存先
Domainドメインモデル・値オブジェクト・列挙型なし
Services再利用可能なアプリケーションサービス(外部SDK連携等)Domain のみ
RepositoryAPI通信・データ永続化Domain, APIClient
State@Observable状態管理Domain, Authentication
UseCasesビジネスロジック(Protocol定義)Domain, Repository, Services
PresentationSwiftUI View・コンポーネント全て

Services層の原則

  • Domainのみに依存: Repositoryや他のパッケージへの依存は禁止
  • 再利用可能: 複数のUseCaseから利用される共通機能を提供
  • 外部SDK連携: HealthKit, CoreLocation, Analytics等のラッパー

no problem製外部SPM(4つ)

パッケージモジュール名用途使用レイヤー
swift-design-system
DesignSystemテーマ・色・スペーシング・UIコンポーネントPresentation
swift-authentication
AuthenticationFirebase Auth統合(Google/Apple Sign-In)State, Presentation
swift-ui-routing
UIRouting型安全ナビゲーション(Router, TabPresenter)Presentation
swift-api-client
APIClientHTTP通信クライアントRepository

依存ルール(厳守)

許可される依存

// ✅ Presentation → 全て(最上層)
import Domain
import State
import UseCases
import Repository
import DesignSystem
import UIRouting
import Authentication

// ✅ UseCases → Domain + Repository + Services
import Domain
import Repository
import Services

// ✅ State → Domain + Authentication
import Domain
import Authentication

// ✅ Repository → Domain + APIClient
import Domain
import APIClient

// ✅ Services → Domain(外部サービス連携)
import Domain

// ✅ Domain → なし(最下層)
// 外部依存ゼロ(Foundationのみ許可)

禁止される依存

// ❌ Domain層での外部import
import Foundation  // ✅ OK(標準ライブラリ)
import UIKit       // ❌ 禁止
import SwiftUI     // ❌ 禁止
import DesignSystem // ❌ 禁止

// ❌ 下位レイヤーから上位への参照
import Presentation // ❌ 循環依存

// ❌ UseCases → State
import State // ❌ 状態管理は上位レイヤーの責務

// ❌ Services → Repository(Servicesは独立性を保つ)
import Repository // ❌ ServicesはDomainのみに依存

設計違反チェックリスト

実装前に確認:

  • Domain層にUI依存を追加していないか?
  • Repositoryから直接Viewを参照していないか?
  • UseCaseがStateを直接操作していないか?
  • ServicesがRepositoryに依存していないか?
  • 外部SPMを適切なレイヤーでのみ使用しているか?

詳細は REFERENCE.md を参照。