| name | ios-clean-architecture |
| description | iOSアプリのSPMパッケージ構成・レイヤー依存関係・設計原則を定義。iOS機能実装・コードレビュー時に参照。no problem製SPMパッケージの使用指針を含む。 |
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 のみ |
| Repository | API通信・データ永続化 | Domain, APIClient |
| State | @Observable状態管理 | Domain, Authentication |
| UseCases | ビジネスロジック(Protocol定義) | Domain, Repository, Services |
| Presentation | SwiftUI View・コンポーネント | 全て |
Services層の原則
- Domainのみに依存: Repositoryや他のパッケージへの依存は禁止
- 再利用可能: 複数のUseCaseから利用される共通機能を提供
- 外部SDK連携: HealthKit, CoreLocation, Analytics等のラッパー
no problem製外部SPM(4つ)
| パッケージ | モジュール名 | 用途 | 使用レイヤー |
|---|
swift-design-system | DesignSystem | テーマ・色・スペーシング・UIコンポーネント | Presentation |
swift-authentication | Authentication | Firebase Auth統合(Google/Apple Sign-In) | State, Presentation |
swift-ui-routing | UIRouting | 型安全ナビゲーション(Router, TabPresenter) | Presentation |
swift-api-client | APIClient | HTTP通信クライアント | Repository |
依存ルール(厳守)
許可される依存
import Domain
import State
import UseCases
import Repository
import DesignSystem
import UIRouting
import Authentication
import Domain
import Repository
import Services
import Domain
import Authentication
import Domain
import APIClient
import Domain
禁止される依存
import Foundation
import UIKit
import SwiftUI
import DesignSystem
import Presentation
import State
import Repository
設計違反チェックリスト
実装前に確認:
詳細は REFERENCE.md を参照。