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.mdsource 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 のみ |
| 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つ)
| パッケージ | モジュール名 | 用途 | 使用レイヤー |
|---|---|---|---|
| DesignSystem | テーマ・色・スペーシング・UIコンポーネント | Presentation |
| Authentication | Firebase Auth統合(Google/Apple Sign-In) | State, Presentation |
| UIRouting | 型安全ナビゲーション(Router, TabPresenter) | Presentation |
| APIClient | HTTP通信クライアント | 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 を参照。