SwiftUI SSOT (Single Source of Truth)
SwiftUIにおける状態管理とSSOT原則の包括的ガイド。
ディレクトリ構成
swiftui-ssot/
├── SKILL.md (このファイル)
└── references/
└── ssot.md
リファレンスファイル
references/ssot.md
Single Source of Truth(SSOT)の包括的ガイド:
- SSOTの3つの柱: 唯一の情報源、導出状態、単方向データフロー
- Property Wrapper選択フローチャート: @State/@Binding/@StateObject/@ObservedObject/@EnvironmentObject
- パターン別ガイド:
- 状態重複の解消
- 導出状態(Computed Property)
- State Lifting(状態の持ち上げ)
- 兄弟View間通信
- EnvironmentObjectの適切な使用
- 違反検出方法: コードスメル、検索パターン
- iOS 17+ @ObservableでのSSO実装
- レビューチェックリスト
使用方法
状態設計時
references/ssot.mdのProperty Wrapper選択フローチャートを参照
- データの所有者を明確化
- 導出可能な状態は持たない
状態関連の問題発生時
references/ssot.mdの違反パターンを確認
- 該当するパターンの解決策を適用
PRレビュー時
references/ssot.mdのレビューチェックリストを使用
SSOT 3つの柱
- 唯一の情報源: 各データは1箇所でのみ管理
- 導出状態: 他の状態から計算可能なものは持たない
- 単方向データフロー: 親→子へデータを渡し、子→親へはアクション
Property Wrapper 選択ガイド
| 状況 |
推奨 |
| View内のローカル状態 |
@State |
| 親から受け取る値(読み書き) |
@Binding |
| Viewが所有するObservableObject |
@StateObject |
| 外部から注入されるObservableObject |
@ObservedObject |
| アプリ全体で共有 |
@EnvironmentObject |
| iOS 17+ |
@Observable + @Bindable |
関連スキル
- swiftui-coding-guidelines: 基本的なベストプラクティス
- swift-ios-migration: iOS 17 @Observable移行