solid-swift について
solid-swiftは、Swift 6とSwiftUIのプロジェクト向けコーディングスキルです。モジュール構成の規則、SOLID・DRYの指針、コードテンプレートにより、統一した設計と並行処理の規約を支援します。
主な機能
- 01機能単位のモジュール構成を必須化
- 02SOLID原則のリファレンス
- 03ファイルサイズと層ごとの上限
- 04Swiftの並行処理パターン
- 05一般的なコードテンプレート
- 06共有コードの再利用確認
活用シーン
- 01SwiftUI機能のディレクトリ設計
- 02大きなViewやViewModelの分割
- 03並行処理規約に沿った実装
- 04機能追加前の再利用可能な要素の確認
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ fusengine/ agents --skill solid-swiftインストール後、Claude Code で/solid-swiftを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
references/anti-patterns.mdconcurrency-patterns.mddependency-inversion.mdinterface-segregation.mdliskov-substitution.mdopen-closed.mdsingle-responsibility.mdsolid-principles.mdreferences/templates/model.mdprotocol.mdservice.mdview.mdviewmodel.md詳細
Swift 6 および SwiftUI(iOS 27 以降)プロジェクトにおいて SOLID 原則と DRY 原則を徹底します。必須の Features/[Feature]/ モジュール型ディレクトリ構造(フラットな Sources/ レイアウトは不可)、厳格なファイルサイズ制限(100 行、90 行で分割、Views/ViewModels/Services/Protocols のレイヤーごとの予算付き)、プロトコルを専用の Protocols/ ディレクトリに分離、ViewModel には @Observable + @MainActor、モデルには Sendable 構造体、そしてすべての View に必須の #Preview を採用します。
5 つすべての SOLID 原則を専用のリファレンス(SRP、OCP、LSP、ISP、DIP)でカバーし、並行処理パターン(アクター、@MainActor、Sendable)、アンチパターンカタログ、および View、ViewModel、Service、プロトコル、モデルのコードテンプレートを提供します。
新しいコードを書く前にコードベースを grep して再利用可能なプロトコルやサービスを探すこと、また 2 つ以上の機能で使われるロジックを重複させる前に共有の場所(Core/Extensions/、Core/Utilities/、Core/Protocols/)を確認することを必須とします。
SOLID Swift - Apple ベストプラクティス 2026
エージェントワークフロー(必須)
いかなる実装の前にも、3 つのエージェントを並列で起動します。それぞれ name を指定した 1 回の Agent 呼び出しです。
- fuse-ai-pilot:explore-codebase - 既存アーキテクチャを分析
- fuse-ai-pilot:research-expert - Apple Docs MCP + Context7 で Swift/Apple ドキュメントを検証
- XcodeBuildMCP - コード変更後のビルド検証。その後 fuse-ai-pilot:sniper を実行。
DRY - 作成する前に再利用(必須)
新しいコードを書く前に:
- 類似のプロトコル、サービス、ロジックがないかコードベースを grep する
- 共有の場所を確認する:
Core/Extensions/、Core/Utilities/、Core/Protocols/ - 類似のコードが存在する場合 -> 重複させずに拡張・再利用する
- 2 つ以上の機能で使われるコードの場合 -> 直接
Core/に作成する
アーキテクチャ(モジュール型 Features は必須)
| レイヤー | 場所 | 最大行数 |
|---|---|---|
| Views | Features/[Feature]/Views/ | 80 |
| ViewModels | Features/[Feature]/ViewModels/ | 100 |
| Services | Features/[Feature]/Services/ | 100 |
| Protocols | Features/[Feature]/Protocols/ | 30 |
| Shared | Core/{Models,Protocols,Services,Extensions,Utilities}/ | - |
フラットな Sources/ 構造は決して使わない - 常に Features/[Feature]/
重要なルール(必須)
| ルール | 値 |
|---|---|
| ファイル制限 | 100 行(90 行で分割) |
| ViewModels | @MainActor @Observable |
| プロトコル | Features/[Feature]/Protocols/ または Core/Protocols/ のみ |
| モデル | Sendable 構造体 |
| ドキュメント | すべての public API に /// |
| プレビュー | すべての View に #Preview が必須 |
リファレンスガイド
概念
| トピック | リファレンス | 参照すべきとき |
|---|---|---|
| SOLID 概要 | solid-principles.md | すべての原則のクイックリファレンス |
| SRP | single-responsibility.md | 肥大化した View/VM、ファイルの分割 |
| OCP | open-closed.md | プロバイダの追加、拡張性 |
| LSP | liskov-substitution.md | プロトコル契約、テスト |
| ISP | interface-segregation.md | 肥大化したプロトコル、分割 |
| DIP | dependency-inversion.md | 注入、テスト、モック |
| 並行処理 | concurrency-patterns.md | アクター、@MainActor、Sendable |
| アンチパターン | anti-patterns.md | コードスメルの検出 |
テンプレート
| テンプレート | 使用する場面 |
|---|---|
| view.md | サブビューと #Preview を備えた SwiftUI View |
| viewmodel.md | @MainActor を付けた @Observable ViewModel |
| service.md | API Service、Mock、Cache actor |
| protocol.md | Service プロトコル、CQRS、Auth |
| model.md | Model、DTO、Error、Enum |
禁止事項
| アンチパターン | 修正方法 |
|---|---|
| 100 行を超えるファイル | 90 行で分割する |
| 実装ファイル内のプロトコル | Protocols/ ディレクトリに移動する |
ObservableObject | @Observable を使用する |
| コールバックハンドラー | async/await を使用する |
#Preview の欠落 | すべての View にプレビューを追加する |
| 非同期処理における非 Sendable | let を付けた struct を使用する |
フラットな Sources/ 構造 | Features/[Feature]/ を使用する |
コメント
Markdown 対応