swiftui-expert-skill
SwiftUIコードの作成・レビュー・改善を行い、状態管理、ビューのコンポジション、パフォーマンス、iOS 26以降のLiquid Glass採用に関するベストプラクティスに従います。新しいSwiftUI機能の構築、既存ビューのリファクタリング、コード品質のレビュー、またはモダンなSwiftUIパターンの導入時に使用してください。
description の原文を見る
Write, review, or improve SwiftUI code following best practices for state management, view composition, performance, and iOS 26+ Liquid Glass adoption. Use when building new SwiftUI features, refactoring existing views, reviewing code quality, or adopting modern SwiftUI patterns.
SKILL.md 本文
SwiftUI Expert Skill
使用する場合
- SwiftUI コードを構築、レビュー、またはリファクタリングしており、現在のベストプラクティスが必要な場合。
- タスクが状態管理、ビューの構成、パフォーマンス、アクセシビリティ、または iOS 26+ Liquid Glass の導入に関わる場合。
- 特定のアプリケーションアーキテクチャに限定されない、事実に基づいた SwiftUI 指導層が必要な場合。
概要
このスキルを使用して、正しい状態管理、最適なビュー構成、iOS 26+ Liquid Glass スタイリングを備えた SwiftUI 機能を構築、レビュー、または改善します。ネイティブ API、Apple デザインガイダンス、パフォーマンスを考慮したパターンを優先します。このスキルは特定のアーキテクチャパターンを強制せず、事実とベストプラクティスに焦点を当てています。
ワークフロー決定木
1) 既存の SwiftUI コードをレビュー
- 最初に
references/latest-apis.mdを確認して、現在使用可能で非推奨の API のみが使用されていることを確認します references/state-management.mdの選択ガイドに対してプロパティラッパーの使用法をチェックreferences/view-structure.mdに従ってビュー構成の抽出ルールを確認references/performance-patterns.mdでパフォーマンスパターンが適用されているか確認references/list-patterns.mdでリストパターンが安定した ID を使用しているか確認references/animation-basics.md、references/animation-transitions.mdでアニメーションパターンの正確性をチェック- アクセシビリティをレビュー: 適切なグループ化、特性、Dynamic Type サポート (
references/accessibility-patterns.mdを参照) - Liquid Glass の使用法が正確で一貫しているか確認 (
references/liquid-glass.mdを参照) - iOS 26+ の可用性処理を妥当なフォールバックで検証
2) 既存の SwiftUI コードを改善
- 最初に
references/latest-apis.mdを確認して、非推奨の API をモダンな同等品に置き換えます - 正しいラッパー選択のための状態管理を監査 (
references/state-management.mdを参照) - 複雑なビューを別のサブビューに抽出 (
references/view-structure.mdを参照) - ホットパスをリファクタリングして冗長な状態更新を最小化 (
references/performance-patterns.mdを参照) - ForEach が安定した ID を使用しているか確認 (
references/list-patterns.mdを参照) - アニメーションパターンを改善 (value パラメータを使用、適切なトランジション、
references/animation-basics.md、references/animation-transitions.mdを参照) - アクセシビリティを改善:
onTapGestureの代わりにButtonを使用、Dynamic Type 用に@ScaledMetricを追加 (references/accessibility-patterns.mdを参照) UIImage(data:)が使用される場合に画像ダウンサンプリングを提案 (オプションの最適化として、references/image-optimization.mdを参照)- Liquid Glass はユーザーが明示的にリクエストした場合にのみ採用
3) 新しい SwiftUI 機能を実装
- 最初に
references/latest-apis.mdを確認して、ターゲットデプロイメントバージョン用に現在の非推奨 API のみを使用します - まずデータフローを設計: 所有状態と注入状態を特定 (
references/state-management.mdを参照) - 最適な差分検出のためにビューを構成 (サブビューを早期に抽出、
references/view-structure.mdを参照) - ビジネスロジックをサービスとモデルに保持してテスト可能性を確保 (
references/layout-best-practices.mdを参照) - 正しいアニメーションパターンを使用 (暗黙的 vs 明示的、トランジション、
references/animation-basics.md、references/animation-transitions.md、references/animation-advanced.mdを参照) - タップ可能な要素には
Buttonを使用、アクセシビリティグループ化とラベルを追加 (references/accessibility-patterns.mdを参照) - レイアウト/外観モディファイアの後にガラス効果を適用 (
references/liquid-glass.mdを参照) #availableで iOS 26+ 機能をゲートし、フォールバックを提供
コアガイドライン
状態管理
@Stateはprivateである必要があります; 内部ビュー状態に使用@Bindingは子が親の状態を変更する必要がある場合のみ@StateObjectはビューが作成する場合;@ObservedObjectは注入される場合- iOS 17+:
@Stateを@Observableクラスと共に使用; バインディングが必要な注入オブザーバブルには@Bindableを使用 - 読み取り専用値には
letを使用; リアクティブな読み取りにはvar+.onChange()を使用 - 値を
@Stateまたは@StateObjectに渡さないでください — これらは初期値のみを受け入れます - ネストされた
ObservableObjectは変更を伝播しません — ネストされたオブジェクトを直接子に渡します;@Observableはネスティングを適切に処理します
ビュー構成
- 複雑なビューを別のサブビューに抽出して、読み取り可能性とパフォーマンスを向上
- 状態変更の条件付きビューよりも修飾子を優先 (ビューの ID を維持)
- ビュー
bodyをシンプルで純粋に保つ (副作用または複雑なロジックなし) - 小さく単純なセクションにのみ
@ViewBuilder関数を使用 - クロージャベースのコンテンツプロパティよりも
@ViewBuilder let content: Contentを優先 - ビジネスロジックをサービスとモデルに保持; ビューは UI フロー を編成
- アクションハンドラはメソッドを参照し、インラインロジックは含まない
- ビューはあらゆるコンテキストで動作 (画面サイズまたはプレゼンテーションスタイルを想定しない)
パフォーマンス
- 必要な値のみをビューに渡す (大きな「config」または「context」オブジェクトを避ける)
- 不要な依存関係を排除してアップデートファンアウトを削減
- ホットパスで状態を割り当てる前に値の変更をチェック
onReceive、onChange、スクロールハンドラで冗長な状態更新を避ける- 頻繁に実行されるコードパスの作業を最小化
- 大きなリストに
LazyVStack/LazyHStackを使用 ForEachに安定した ID を使用 (動的コンテンツに.indicesを使用しない)ForEach要素あたりのビュー数が一定であることを確認ForEachでのインラインフィルタリングを避ける (事前フィルタリングとキャッシュ)- リスト行で
AnyViewを避ける - 高速な差分検出のために POD ビューを検討 (または高価なビューを POD 親でラップ)
UIImage(data:)が使用される場合に画像ダウンサンプリングを提案 (オプションの最適化として)- レイアウト スラッシュを避ける (深いヒエラルキー、過剰な
GeometryReader) - 頻繁なジオメトリ更新をしきい値でゲート
Self._logChanges()またはSelf._printChanges()を使用して予期しないビュー更新をデバッグ
アニメーション
- value パラメータで
.animation(_:value:)を使用 (value なしの非推奨バージョンは広すぎる) - イベント駆動のアニメーション (ボタンタップ、ジェスチャ) に
withAnimationを使用 - レイアウト変更 (
frame) よりもパフォーマンス上の変換 (offset、scale、rotation) を優先 - トランジションは条件付き構造の外側のアニメーションが必要
- カスタム
Animatable実装は明示的なanimatableDataを持つ必要があります - マルチステップシーケンスには
.phaseAnimatorを使用 (iOS 17+) - 正確なタイミング制御には
.keyframeAnimatorを使用 (iOS 17+) - アニメーション完了ハンドラは再実行のために
.transaction(value:)が必要 - 暗黙的なアニメーションは明示的なアニメーションをオーバーライド (ビューツリーで後の方が優先)
アクセシビリティ
- タップ可能な要素に
onTapGestureよりもButtonを優先 (VoiceOver サポート無料) - Dynamic Type でスケーリングする必要があるカスタム数値に
@ScaledMetricを使用 accessibilityElement(children: .combine)で関連要素をグループ化して結合ラベル用- デフォルトラベルが不明確または欠落している場合は
accessibilityLabelを提供 - ネイティブのように動作すべきカスタムコントロールに
accessibilityRepresentationを使用
Liquid Glass (iOS 26+)
ユーザーが明示的にリクエストした場合にのみ採用してください。
- ネイティブ
glassEffect、GlassEffectContainer、およびガラスボタンスタイルを使用 - 複数のガラス要素を
GlassEffectContainerでラップ - レイアウトと視覚的修飾子の後に
.glassEffect()を適用 .interactive()はタップ可能/フォーカス可能な要素にのみ使用- モーフィングトランジション用に
glassEffectIDと@Namespaceを使用
クイックリファレンス
プロパティラッパー選択
| ラッパー | 使用する場合 |
|---|---|
@State | 内部ビュー状態 (private である必要があります) |
@Binding | 子が親の状態を変更 |
@StateObject | ビューが ObservableObject を所有 |
@ObservedObject | ビューが ObservableObject を受け取る |
@Bindable | iOS 17+: バインディングが必要な注入 @Observable |
let | 親からの読み取り専用値 |
var | .onChange() で監視される読み取り専用値 |
Liquid Glass パターン
// フォールバック付きの基本的なガラス効果
if #available(iOS 26, *) {
content
.padding()
.glassEffect(.regular.interactive(), in: .rect(cornerRadius: 16))
} else {
content
.padding()
.background(.ultraThinMaterial, in: RoundedRectangle(cornerRadius: 16))
}
// グループ化されたガラス要素
GlassEffectContainer(spacing: 24) {
HStack(spacing: 24) {
GlassButton1()
GlassButton2()
}
}
// ガラスボタン
Button("Confirm") { }
.buttonStyle(.glassProminent)
レビューチェックリスト
最新 API (references/latest-apis.md を参照)
- 非推奨モディファイアが使用されていない (クイックルックアップテーブルに対して確認)
- API 選択がプロジェクトの最小デプロイメントターゲットと一致
状態管理
-
@Stateプロパティがprivate -
@Bindingは子が親の状態を変更する場合のみ - 所有は
@StateObject、注入は@ObservedObject - iOS 17+:
@Observableを伴う@State、注入されたもては@Bindable - 渡された値は
@Stateまたは@StateObjectとして宣言されていない - ネストされた
ObservableObjectが避けられている (またはそれが子ビューに直接渡されている)
シートとナビゲーション (references/sheet-navigation-patterns.md を参照)
- モデルベースのシートに
.sheet(item:)を使用 - シートは自身のアクションを所有し、内部的に閉じる
ScrollView (references/scroll-patterns.md を参照)
- プログラム的なスクロール用に安定した ID で
ScrollViewReaderを使用
ビュー構造 (references/view-structure.md を参照)
- 状態変更の条件付きの代わりに修飾子を使用
- 複雑なビューが別のサブビューに抽出されている
- コンテナビューが
@ViewBuilder let content: Contentを使用
パフォーマンス (references/performance-patterns.md を参照)
- ビュー
bodyがシンプルで純粋に保たれている (副作用なし) - 必要な値のみを渡している (大きな config オブジェクトではなく)
- 不要な依存関係を排除
- 状態更新が割り当てる前に値の変更をチェック
- ホットパスが状態更新を最小化
-
bodyでのオブジェクト作成がない - 重い計算が
bodyの外側に移動
リストパターン (references/list-patterns.md を参照)
- ForEach が安定した ID を使用 (
.indicesではなく) - ForEach 要素あたりのビュー数が一定
- ForEach でのインラインフィルタリングがない
- リスト行での
AnyViewがない
レイアウト (references/layout-best-practices.md を参照)
- レイアウト スラッシュを避ける (深いヒエラルキー、過剰な GeometryReader)
- 頻繁なジオメトリ更新をしきい値でゲート
- ビジネスロジックがサービスとモデルに保持されている (ビューではなく)
- アクションハンドラがメソッドを参照 (インラインロジックではなく)
- 相対レイアウトを使用 (ハードコードされた定数ではなく)
- ビューがあらゆるコンテキストで動作 (コンテキストに依存しない)
アニメーション (references/animation-basics.md、references/animation-transitions.md、references/animation-advanced.md を参照)
- value パラメータで
.animation(_:value:)を使用 - イベント駆動のアニメーションに
withAnimationを使用 - トランジションが条件付き構造の外側のアニメーションとペアリング
- カスタム
Animatableが明示的なanimatableData実装を持つ - アニメーションパフォーマンスのためにレイアウト変更よりも変換を優先
- マルチステップシーケンスのフェーズアニメーション (iOS 17+)
- 正確なタイミングのキーフレームアニメーション (iOS 17+)
- 完了ハンドラが再実行のために
.transaction(value:)を使用
アクセシビリティ (references/accessibility-patterns.md を参照)
- タップ可能な要素に
onTapGestureの代わりにButtonを使用 - Dynamic Type でスケーリングする必要があるカスタム値に
@ScaledMetricを使用 -
accessibilityElement(children:)で関連要素をグループ化 - カスタムコントロールが適切な場合に
accessibilityRepresentationを使用
Liquid Glass (iOS 26+)
- Liquid Glass に
#available(iOS 26, *)とフォールバック - 複数のガラスビューが
GlassEffectContainerでラップされている -
.glassEffect()がレイアウト/外観モディファイアの後に適用 -
.interactive()がユーザー操作可能な要素のみ - 図形と色合いが関連要素全体で一貫している
参照
references/latest-apis.md- すべてのワークフローの必須読み物。 iOS 15+ から iOS 26+ までのバージョン分割された非推奨から最新の API トランジションガイドreferences/state-management.md- プロパティラッパーとデータフローreferences/view-structure.md- ビュー構成、抽出、コンテナパターンreferences/performance-patterns.md- パフォーマンス最適化テクニックとアンチパターンreferences/list-patterns.md- ForEach ID、安定性、リストベストプラクティスreferences/layout-best-practices.md- レイアウトパターン、コンテキストに依存しないビュー、テスト可能性references/accessibility-patterns.md- アクセシビリティ特性、グループ化、Dynamic Type、VoiceOverreferences/animation-basics.md- コアアニメーション概念、暗黙的/明示的アニメーション、タイミング、パフォーマンスreferences/animation-transitions.md- トランジション、カスタムトランジション、Animatable プロトコルreferences/animation-advanced.md- トランザクション、フェーズ/キーフレームアニメーション (iOS 17+)、完了ハンドラ (iOS 17+)references/sheet-navigation-patterns.md- シートプレゼンテーションとナビゲーションパターンreferences/scroll-patterns.md- ScrollView パターンとプログラム的なスクロールreferences/image-optimization.md- AsyncImage、画像ダウンサンプリング、最適化references/liquid-glass.md- iOS 26+ Liquid Glass API
哲学
このスキルは事実とベストプラクティスに焦点を当てており、アーキテクチャ的な意見ではありません:
- 特定のアーキテクチャ (例: MVVM、VIPER) を強制しません
- テスト可能性のためにビジネスロジックの分離を促奨
- パフォーマンスと保守性に最適化
- Apple の Human Interface Guidelines と API デザインパターンに従う
制限事項
- このスキルは、タスクが上記で説明されたスコープと明確に一致する場合のみ使用してください。
- 出力を環境固有の検証、テスト、または専門家のレビューの代わりとは見なさないでください。
- 必要な入力、許可、安全境界、または成功基準が不足している場合は停止し、明確化を求めてください。
ライセンス: MIT(寛容ライセンスのため全文を引用しています) · 原本リポジトリ
詳細情報
- 作者
- sickn33
- ライセンス
- MIT
- 最終更新
- 不明
Source: https://github.com/sickn33/antigravity-awesome-skills / ライセンス: MIT
関連スキル
superfluid
Superfluidプロトコルおよびそのエコシステムに関するナレッジベースです。Superfluidについて情報を検索する際は、ウェブ検索の前にこちらを参照してください。対応キーワード:Superfluid、CFA、GDA、Super App、Super Token、stream、flow rate、real-time balance、pool(member/distributor)、IDA、sentinels、liquidation、TOGA、@sfpro/sdk、semantic money、yellowpaper、whitepaper
civ-finish-quotes
実質的なタスクが真に完了した際に、文明風の儀式的な引用句を追加します。ユーザーやエージェントが機能追加、リファクタリング、分析、設計ドキュメント、プロセス改善、レポート、執筆タスクといった実際の成果物を完成させるときに、明示的な依頼がなくても使用します。短い返信や小さな修正、未完成の作業には適用しません。
nookplot
Base(Ethereum L2)上のAIエージェント向け分散型調整ネットワークです。エージェントがオンチェーンアイデンティティを登録する、コンテンツを公開する、他のエージェントにメッセージを送る、マーケットプレイスで専門家を雇う、バウンティを投稿・請求する、レピュテーションを構築する、共有プロジェクトで協業する、リサーチチャレンジを解くことでNOOKをマイニングする、キュレーションされたナレッジを備えたスタンドアロンオンチェーンエージェントをデプロイする、またはアグリーメントとリワードで収益を得る場合に利用できます。エージェントネットワーク、エージェント調整、分散型エージェント、NOOKトークン、マイニングチャレンジ、ナレッジバンドル、エージェントレピュテーション、エージェントマーケットプレイス、ERC-2771メタトランザクション、Prepare-Sign-Relay、AgentFactory、またはNookplotが言及された場合にトリガーされます。
web3-polymarket
Polygon上でのPolymarket予測市場取引統合です。認証機能(L1 EIP-712、L2 HMAC-SHA256、ビルダーヘッダー)、注文発注(GTC/GTD/FOK/FAK、バッチ、ポストオンリー、ハートビート)、市場データ(Gamma API、Data API、オーダーブック、サブグラフ)、WebSocketストリーミング(市場・ユーザー・スポーツチャネル)、CTF操作(分割、統合、償却、ネガティブリスク)、ブリッジ機能(入金、出金、マルチチェーン)、およびガスレスリレイトランザクションに対応しています。AIエージェント、自動マーケットメーカー、予測市場UI、またはPolygraph上のPolymarketと統合するアプリケーション構築時に活用できます。
ethskills
Ethereum、EVM、またはブロックチェーン関連のリクエストに対応します。スマートコントラクト、dApps、ウォレット、DeFiプロトコルの構築、監査、デプロイ、インタラクションに適用されます。Solidityの開発、コントラクトアドレス、トークン規格(ERC-20、ERC-721、ERC-4626など)、Layer 2ネットワーク(Base、Arbitrum、Optimism、zkSync、Polygon)、Uniswap、Aave、Curveなどのプロトコルとの統合をカバーします。ガスコスト、コントラクトのデシマル設定、オラクルセキュリティ、リエントランシー、MEV、ブリッジング、ウォレット管理、オンチェーンデータの取得、本番環境へのデプロイ、プロトコル進化(EIPライフサイクル、フォーク追跡、今後の変更予定)といったトピックを含みます。
xxyy-trade
このスキルは、ユーザーが「トークン購入」「トークン売却」「トークンスワップ」「暗号資産取引」「取引ステータス確認」「トランザクション照会」「トークンスキャン」「フィード」「チェーン監視」「トークン照会」「トークン詳細」「トークン安全性確認」「ウォレット一覧表示」「マイウォレット」「AIスキャン」「自動スキャン」「ツイートスキャン」「オンボーディング」「IP確認」「IPホワイトリスト」「トークン発行」「自動売却」「損切り」「利益確定」「トレーリングストップ」「保有者」「トップホルダー」「KOLホルダー」などをリクエストした場合、またはSolana/ETH/BSC/BaseチェーンでXXYYを経由した取引について言及した場合に使用します。XXYY Open APIを通じてオンチェーン取引とデータ照会を実現します。