solid-swift について
solid-swiftは、Swift 6およびSwiftUIプロジェクト向けのコード構成・実装ガイドスキルです。機能別ディレクトリ、並行処理の規約、コードテンプレートを通じてSOLIDとDRYの実践を促します。
主な機能
- 01機能別のモジュールディレクトリ構成
- 02単一責任のファイルとプロトコル分離
- 03@ObservableのViewModelとSendableモデル
- 04すべてのViewに#Previewを必須化
- 05SOLID、並行処理、アンチパターンの資料
活用シーン
- 01SwiftUIプロジェクトの機能別構成
- 02SOLIDとDRYに沿ったコードの確認
- 03ViewModel、サービス、モデルの一貫した作成
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ fusengine/ claude-plugins --skill solid-swiftインストール後、Claude Code で/solid-swiftを入力して読み込まれたか確認します。
詳細
Swift 6 および SwiftUI(iOS 27 以降)プロジェクトで SOLID と DRY の原則を徹底します。必須の `Features/[Feature]/` モジュール型ディレクトリ構造(フラットな `Sources/` 構成は禁止)、1 ファイルにつき責務は 1 つとし、行数制限はフックの上限(`FUSE_SOLID_MAX_LINES`)のみとします。プロトコルは専用の `Protocols/` ディレクトリに分離し、ViewModel には @Observable と @MainActor を、モデルには Sendable 構造体を使用し、すべての View に #Preview を必須とします。
5 つすべての SOLID 原則を専用のリファレンス(SRP、OCP、LSP、ISP、DIP)で解説し、並行処理のパターン(actor、@MainActor、Sendable)、アンチパターンの一覧、View、ViewModel、サービス、プロトコル、モデルのコードテンプレートを掲載します。
新しいコードを書く前に、再利用可能なプロトコルやサービスがないかコードベースを grep することを必須とします。また、2 つ以上の機能で使用するロジックを重複させないよう、共有の場所(Core/Extensions/、Core/Utilities/、Core/Protocols/)を確認します。
SOLID Swift - Apple のベストプラクティス 2026
エージェントのワークフロー(必須)
実装の前に、name を指定して、それぞれ 1 回の Agent 呼び出しで 3 つのエージェントを並列で起動します。
- 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/ |
| ViewModels | Features/[Feature]/ViewModels/ |
| Services | Features/[Feature]/Services/ |
| Protocols | Features/[Feature]/Protocols/ |
| Shared | Core/{Models,Protocols,Services,Extensions,Utilities}/ |
ファイルサイズ:行数制限はフックの上限(FUSE_SOLID_MAX_LINES)のみです。上限に達する前に責務ごとに適切に分割してください。正当な修正が上限内に収まらない場合は報告し、フックを回避してはいけません。
フラットな Sources/ 構成は絶対に使用せず、必ず Features/[Feature]/ を使用してください。
重要なルール(必須)
| ルール | 値 |
|---|---|
| ファイル制限 | フックの上限 FUSE_SOLID_MAX_LINES のみ。1 ファイルにつき責務は 1 つ |
| ViewModel | @MainActor @Observable |
| プロトコル | Features/[Feature]/Protocols/ または Core/Protocols/ のみ |
| モデル | Sendable 構造体 |
| ドキュメント | すべての公開 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 | actor、@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 protocol、CQRS、Auth |
| model.md | Model、DTO、Error、Enum |
禁止事項
| アンチパターン | 対処法 |
|---|---|
| 複数の責務を持つファイル、またはフックの上限によりブロックされるファイル | 責務ごとに分割する |
| impl ファイル内の Protocol | Protocols/ ディレクトリに移動する |
ObservableObject | @Observable を使用する |
| Completion handler | async/await を使用する |
#Preview がない | すべての View にプレビューを追加する |
| async 内での非 Sendable | let を持つ struct を使用する |
フラットな Sources/ 構成 | Features/[Feature]/ を使用する |
コメント
Markdown 対応