Agent Skills by ALSEL
汎用ソフトウェア開発⭐ リポ 0品質スコア 60/100

mv-architecture

iOSアプリケーションのコード設計パターンを定義します。iOSプロジェクトで新しいコードを実装する際に使用してください。

description の原文を見る

Defines the iOS application's code architectural pattern. Use when implementing new code in an iOS project.

SKILL.md 本文

注記: ProjectName の使用は実際のプロジェクト名に置き換えられることを想定しています。

アーキテクチャ: MV (Model-View)

このプロジェクトは Model-View アーキテクチャを使用しています。ViewModel は存在しません。ビジネスロジックは Presentation オブジェクトに存在し、SwiftUI 環境に注入され、ビューから直接アクセスされます。機能は SwiftUI ビューと環境変数を組み合わせた自己完結型の形で実装されます。

中央となるファイル ProjectNameApp はアプリのエントリーポイントであり、UI/ProjectNameApp.swift の下に配置されます。このエントリーポイントビューは、UI/Modules/Main/MainView.swift の下に配置された別のビュー MainView をラップします。

エントリーポイントクラス ProjectNameApp の目的は、アプリレベルの UI イベントとシステム通知を処理するための一元化された場所を提供することです。

プロジェクト構造

新しいプロジェクトを作成する際は、以下のフォルダ構造を使用してファイルを整理してください。

ProjectName/
├── Models/              # アプリ全体で使用されるデータモデル。平純なオブジェクト
├── Presentation/        # 機能ビューで使用する機能オブジェクト。@Observable を使用
├── Services/            # 非同期操作を実行、またはビジネスロジックを管理できるオブジェクト。SwiftUI なし
├── Extensions/          # 型拡張の定義。例:文字列拡張用の `String+Extension.swift`
├── Resources/           # サウンドやビデオなどのアセット型ファイル
└── UI/                  # すべての SwiftUI コード
    ├── Environment/     # 各 Presentation オブジェクトの EnvironmentKey 定義
    ├── Modules/         # アプリ内の機能ビュー
    ├── Views/           # 再利用可能な UI コンポーネント(List、Picker など)。特定の機能に紐づかない
    ├── ViewModifiers/   # 再利用可能なビュー修飾子。例:液体ガラス互換性
    ├── PreferenceKeys/  # プリファレンスキーの定義ファイル
    ├── Router/          # アプリのルーティングを制御する特殊な Presentation オブジェクト
    └── Theme.swift      # 使用するすべての色の定義ファイル

コンポーネント

レイヤーパス役割
ModelsProjectName/Models/平純なデータ型。ロジックやサイドエフェクトはない。
PresentationProjectName/Presentation/ステートフルな @Observable オブジェクト。ビジネスロジック、状態管理、サービス間の調整。
ServicesProjectName/Services/低レベルインフラストラクチャ(オーディオ、パーミッション、ロギング)。SwiftUI への依存関係なし。
UIProjectName/UI/すべての SwiftUI ビュー、環境キー、修飾子、および再利用可能なコンポーネント。
ResourcesProjectName/Resources/アセット、オーディオファイル、MIDI エクササイズ、シェーダー。
ExtensionsProjectName/Extensions/Swift/SwiftUI/AVKit の拡張。

機能ビュー

FeatureView には、UI/Views/ フォルダ下のシステム SwiftUI ビューまたはカスタムビューへの参照が含まれます。FeatureView は UI イベントを適切な Presentation オブジェクトに通信し、その状態を観察します。./examples/feature-view.md を参照してください。

Presentation オブジェクト

Presentation/ 下で定義されたクラスは、機能サービスまたは抽象化を表し、@Observable public final class 型である必要があります。これらのオブジェクトは EnvironmentKey を介して定義され、SwiftUI 環境を通じて利用可能にされます。./examples/presentation.md を参照してください。

Environment

SwiftUI 環境は、SwiftUI ビューの依存性注入を処理します。環境を通じて Presentation オブジェクトを定義することで、任意のビューから参照可能になります。値は .environment(_:) ビュー修飾子を通じて異なるオブジェクトを渡すことでオーバーライドできます。./examples/environment.md を参照してください。

Services

これらのオブジェクトは、Presentation オブジェクトの論理的なバックエンドコンポーネントとして機能します。一般的に、ロジックはより単純なリアクティブな状態のために Presentation オブジェクトに近い場所に存在すべきです。Services は Presentation オブジェクトが仕事の一部を委譲するためのものです。./examples/service.md を参照してください。

Router

Router という特殊な環境オブジェクトが存在し、これはタブビューなどのもののために表示するビューを管理し、各種モーダルの表示とトップバーの高さを制御する責任があります。./examples/router.md を参照してください。

コード設計の哲学

大きなモノリシックビューより、小さく最小限のコードビューを優先してください。左ボタン、右ボタン、中央ラベルを 1 つにしたボタンコントロールの代わりに、3 つの異なる機能ビューに分けてください。それらは汎用コンポーネントではなく、IncrementPitchButtonView のような機能駆動型にしてください。

すべてのビュー(純粋な UI コンポーネントを除く)は機能であり、独自の機能を所有しています。

  • ビューは自身の外観と、それが開始するアクション(例:ファイルピッカーを開くボタンはファイルピッカー提示ロジックを所有)をトリガーする責任があります
  • ビューは環境を通じて Presentation オブジェクトから読み取り、書き込みます。親ビューに対してアクションを実行するよう委譲しません
  • 純粋な UI コンポーネント(例:再利用可能なリスト行、UI/Views/ 内のピッカー)はダムであってもよい — データとコールバックを受け取ります。機能ビューはそうではありません

規約

ビューの種類命名規則
ボタンMyCustomButton
リスト項目または行MyCustomRow
リストセクション(タイトルと行)MyCustomSection
汎用機能ビューMyCustomView
テキストラベルMyCustomLabel

ライセンス: Apache-2.0(寛容ライセンスのため全文を引用しています) · 原本リポジトリ

詳細情報

作者
ajohnson388
リポジトリ
ajohnson388/Skills
ライセンス
Apache-2.0
最終更新
2026/3/27

Source: https://github.com/ajohnson388/Skills / ライセンス: Apache-2.0

本サイトは GitHub 上で公開されているオープンソースの SKILL.md ファイルをクロール・インデックス化したものです。 各スキルの著作権は原作者に帰属します。掲載に問題がある場合は info@alsel.co.jp または /takedown フォームよりご連絡ください。
原作者: ajohnson388 · ajohnson388/Skills · ライセンス: Apache-2.0