mcpField
S
swift-ui-architect

swift-ui-architect

github.com/pproenca開発218270 回インストール11 週間前に更新
リポジトリ

swift-ui-architect について

swift-ui-architectは、iOS 26とSwift 6.2を使うクリニック向けSwiftUIアプリのモジュラーMVVM-C指針をまとめたスキルです。レイヤー、状態、ナビゲーション、依存性注入、データフローの規則を示し、機能の開発やレビューに役立ちます。

主な機能

  1. 01モジュラーMVVM-Cのレイヤー規則
  2. 02ビュー識別と状態の指針
  3. 03コーディネーターによるナビゲーション規則
  4. 04依存性注入のパターン
  5. 05非同期データフローの推奨事項

活用シーン

  1. 01ローカルSPM機能モジュールの設計
  2. 02コーディネーターとルートシェルの接続
  3. 03データとエラー処理の境界のレビュー

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/pproenca/dot-skills --skill swift-ui-architect

インストール後、Claude Code で/swift-ui-architectを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

metadata.json
assets/templates/
_template.md
references/
_sections.md
data-async-init.md
data-cancellation.md
data-combine-avoid.md
data-error-loadable.md
data-task-modifier.md
di-container-composition.md
di-environment-injection.md
di-mock-testing.md
di-protocol-abstraction.md
diff-avoid-anyview.md
diff-closure-skip.md
diff-equatable-views.md
diff-identity-stability.md
diff-printchanges-debug.md
diff-reference-types.md
layer-dependency-rule.md
layer-model-value-types.md
layer-no-view-repository.md
layer-repository-protocol.md
layer-usecase-protocol.md
layer-viewmodel-boundary.md
list-constant-viewcount.md
list-filter-in-model.md
list-id-keypath.md
list-lazy-stacks.md
nav-coordinator-pattern.md
nav-deeplink-support.md

詳細

SwiftUI Modular MVVM-C Architecture

SwiftUI のクリニック形式アプリ向けに、アーキテクチャを適用するための指針です。このスキルは、iOS 26/Swift 6.2 のクリニックアーキテクチャに沿っています。ローカルの SPM パッケージによるモジュール化された MVVM-C、App ターゲットに配置する具象コーディネーターとルートシェル、純粋な Domain プロトコル、唯一の I/O レイヤーである Data で構成されます。

必須のアーキテクチャスタック

┌───────────────────────────────────────────────────────────────┐
│ App target: DependencyContainer, Coordinators, Route Shells   │
├───────────────┬───────────────┬───────────────┬──────────────┤
│ Feature* SPM  │ Feature* SPM  │ Feature* SPM  │ Feature* SPM │
│ View + VM     │ View + VM     │ View + VM     │ View + VM    │
├───────────────────────────────────────────────────────────────┤
│ Data SPM: repository impls, remote/local, retry, sync queue   │
├───────────────────────────────────────────────────────────────┤
│ Domain SPM: models, repository protocols, coordinator protocols│
│ and ErrorRouting/AppError                                      │
├───────────────────────────────────────────────────────────────┤
│ Shared SPMs: DesignSystem, SharedKit                           │
└───────────────────────────────────────────────────────────────┘

依存関係のルール:Feature モジュールがインポートできるのは Domain と DesignSystem のみです。Feature は Data や他の Feature をインポートしてはなりません。App ターゲットのみが依存関係の合流点となります。

クリニックアーキテクチャの契約(iOS 26/Swift 6.2)

このスキルのすべてのガイダンスは、クリニックのモジュール化された MVVM-C アーキテクチャを前提としています。

  • Feature モジュールがインポートできるのは Domain と DesignSystem のみです(Data や兄弟 Feature はインポートしません)。
  • App ターゲットが合流点となり、DependencyContainer、具象コーディネーター、Route Shell の配線を所有します。
  • Domain は純粋な Swift を維持し、モデルに加えて、リポジトリ、*Coordinating、ErrorRouting、AppError の契約を定義します。
  • Data は SwiftData/ネットワーク/同期/リトライ/バックグラウンド I/O を所有し、Domain プロトコルを実装します。
  • 読み取り/書き込みフローでは、古いデータを表示しながら再検証する読み取りと、キューに入れて楽観的に処理する書き込みをデフォルトとします。
  • ViewModel はリポジトリプロトコルを直接呼び出します(ユースケース/インタラクター層はデフォルトでは設けません)。

適用する場面

次のような場合に、これらのガイドラインを参照してください。

  • ローカルの SPM パッケージにある Feature モジュールを構築またはリファクタリングするとき
  • コーディネーター、ルートシェル、依存関係コンテナのファクトリーを接続するとき
  • リポジトリ、コーディネーター、エラー処理の Domain プロトコルを定義するとき
  • ネットワーク通信、永続化、同期の所有範囲を Data のみに限定するとき
  • 古いデータを表示しながら再検証する読み取りと、キューに入れて楽観的に処理する書き込みをレビューするとき

必須制約(iOS 26/Swift 6.2)

  • ViewModel/コーディネーターには @Observable を使用し、ObservableObject/@Published は使用しません。
  • 専用のユースケース/インタラクター層は設けません。ViewModel が Domain のリポジトリプロトコルを直接呼び出します。
  • コーディネータープロトコルは Domain に配置し、具象コーディネーターは App ターゲットで NavigationPath を所有します。
  • ルートシェルは App ターゲットに配置し、.navigationDestination のマッピングを所有します。
  • 表示ポリシーは AppError と ErrorRouting によって制御します。ViewModel にグローバルなエラー UI をハードコードしません。
  • SwiftData/URLSession/リトライ/同期キューのロジックは Data パッケージのみに配置します。

優先度別のルールカテゴリ

優先度カテゴリ影響度プレフィックスルール
1View のアイデンティティと差分検出重大diff-6
2状態アーキテクチャ重大state-7
3View の構成高view-6
4ナビゲーションとコーディネーション高nav-5
5レイヤーアーキテクチャ高layer-6
6依存性注入中〜高di-4
7リストとコレクションのパフォーマンス中list-4
8非同期処理とデータフロー中data-5

クイックリファレンス

1. View のアイデンティティと差分検出(重大)
2. 状態アーキテクチャ(重大)
3. View の構成(高)
4. ナビゲーションと調整(高)
  • nav-coordinator-pattern - すべての機能に、NavigationStack を所有するコーディネーターを設けます
  • nav-routes-enum - すべてのルートを Hashable な enum として定義します
  • nav-deeplink-support - コーディネーターは URL ベースのディープリンクに対応する必要があります
  • nav-modal-sheets - モーダルはインラインではなく、コーディネーター経由で表示します
  • nav-no-navigationlink - NavigationLink(destination:) は使用せず、navigationDestination(for:) を使用します
5. レイヤーアーキテクチャ(高)
  • layer-dependency-rule - Domain レイヤーではフレームワークを一切インポートしません
  • layer-usecase-protocol - ユースケースレイヤーを追加せず、ViewModel とリポジトリプロトコルにオーケストレーションを保持します
  • layer-repository-protocol - リポジトリプロトコルは Domain に、実装は Data に配置します
  • layer-model-value-types - Domain モデルは構造体とし、クラスは使用しません
  • layer-no-view-repository - View からリポジトリに直接アクセスせず、ViewModel からリポジトリプロトコルを呼び出します
  • layer-viewmodel-boundary - ViewModel が公開する状態は、表示用に整えたものだけにします
6. 依存性注入(中〜高)
  • di-environment-injection - コンテナが管理するプロトコル依存関係は @Environment 経由で注入します
  • di-protocol-abstraction - 注入する依存関係はすべてプロトコル型にします
  • di-container-composition - App ターゲットで DependencyContainer を構成し、VM ファクトリーを公開します
  • di-mock-testing - すべてのプロトコル依存関係に、テスト用のモックを用意します
7. リストとコレクションのパフォーマンス(中)
  • list-constant-viewcount - ForEach は要素ごとに一定数の View を生成する必要があります
  • list-filter-in-model - フィルタリングやソートは ViewModel で行い、ForEach 内では行いません
  • list-lazy-stacks - 上限のないコンテンツには LazyVStack/LazyHStack を使用します
  • list-id-keypath - 明示的な id keyPath を指定し、暗黙の識別性に依存しません
8. 非同期処理とデータフロー(中)
  • data-task-modifier - .task(id:) を機能のデータ読み込みの主なトリガーとして使用します
  • data-async-init - init 内で非同期処理を実行しないでください
  • data-error-loadable - 読み込み状態はブール値ではなく enum としてモデル化します
  • data-combine-avoid - 新しいコードでは Combine より async/await を優先します
  • data-cancellation - .task による自動キャンセルを使用し、Task を手動で管理しないでください

使用方法

詳しい説明とコード例については、個別のリファレンスファイルをお読みください。

リファレンスファイル

ファイル説明
references/_sections.mdカテゴリーの定義と順序
assets/templates/_template.md新しいルールのテンプレート
metadata.jsonバージョンとリファレンス情報

コメント