swiftui-ui-patterns
SwiftUIのビューやコンポーネント構築におけるベストプラクティスと実例ガイダンスを提供します。ナビゲーション階層、カスタムビューモディファイア、スタックやグリッドを使ったレスポンシブレイアウトなどを網羅しています。SwiftUI UIの新規作成やリファクタリング、TabViewによるタブ設計、VStack/HStackを使った画面構成、@Stateや@Bindingの管理、iOSの宣言的UIの構築、またはコンポーネント固有のパターンや実例が必要な場合に活用してください。
description の原文を見る
Best practices and example-driven guidance for building SwiftUI views and components, including navigation hierarchies, custom view modifiers, and responsive layouts with stacks and grids. Use when creating or refactoring SwiftUI UI, designing tab architecture with TabView, composing screens with VStack/HStack, managing @State or @Binding, building declarative iOS interfaces, or needing component-specific patterns and examples.
SKILL.md 本文
SwiftUI UI パターン
クイックスタート
目標に基づいてトラックを選択します:
既存プロジェクト
- 機能またはスクリーンと主要なインタラクションモデル(リスト、詳細、エディタ、設定、タブ付き)を特定します。
rg "TabView\("のような検索でリポジトリ内の近い例を見つけ、最も近い SwiftUI ビューを読みます。- ローカルの規約を適用します。SwiftUI ネイティブの状態を優先し、可能な限り状態をローカルに保ち、共有依存関係に環境注入を使用します。
references/components-index.mdから関連するコンポーネントリファレンスを選択し、そのガイダンスに従います。- インタラクションが主要コンテンツをドラッグまたはスクロールして secondary content を明かす場合、ジェスチャーを手動で実装する前に
references/scroll-reveal.mdを読みます。 - 小さく焦点を絞ったサブビューと SwiftUI ネイティブなデータフローでビューを構築します。
新規プロジェクトスカフォルディング
references/app-wiring.mdを使用して TabView + NavigationStack + sheets をワイアリングします。- 提供されているスケルトンに基づいて、最小限の
AppTabとRouterPathを追加します。 - 最初に必要な UI に基づいてコンポーネントリファレンスを選択します(TabView、NavigationStack、Sheets)。
- 新しいスクリーンが追加されるに従い、route と sheet enum を拡張します。
従うべき一般的なルール
- モダン SwiftUI state(
@State、@Binding、@Observable、@Environment)を使用し、不要なビューモデルを避けます。 - デプロイメントターゲットが iOS 16 以前を含み、iOS 17 で導入された Observation API を使用できない場合、root 所有に対して
@StateObjectを、注入された観察に対して@ObservedObjectを、真に共有されるアプリレベルの状態に対してのみ@EnvironmentObjectを使用するObservableObjectにフォールバックします。 - 構成を優先します。ビューを小さく焦点を絞ったままにします。
- async/await を
.taskで使用し、明示的なローディング/エラー状態を使用します。リスタート、キャンセル、デバウンシングのガイダンスについては、references/async-state.mdを読んでください。 - 共有アプリサービスを
@Environmentに保ちますが、機能ローカルの依存関係とモデルには明示的なイニシャライザ注入を優先します。root ワイアリングパターンについては、references/app-wiring.mdを読んでください。 - デプロイメントターゲットに適合する最新の SwiftUI API を優先し、パターンがそれに依存する場合は常に最小 OS を明記します。
- レガシーファイルを編集する場合のみ既存のレガシーパターンを保ちます。
- プロジェクトのフォーマッタとスタイルガイドに従います。
- Sheets: 状態が選択されたモデルを表す場合、
.sheet(isPresented:)よりも.sheet(item:)を優先します。sheet body 内でのif letを避けます。Sheet は自身のアクションを所有し、onCancel/onConfirmクロージャを転送する代わりに、内部でdismiss()を呼び出すべきです。 - スクロール駆動のリビール: スクロールオフセットから正規化された進捗値を導出し、その単一の真実のソースからビジュアル状態を駆動することを優先します。スクロール単独では相互作用を表現できない限り、並列ジェスチャーステートマシンを避けます。
状態所有権サマリー
所有権モデルに合致する最も狭い状態ツールを使用します:
| シナリオ | 推奨パターン |
|---|---|
| 1 つのビューが所有するローカル UI 状態 | @State |
| 子が親所有の値状態を変異させる | @Binding |
| iOS 17+ で root が所有する参照モデル | @Observable タイプの @State |
iOS 17+ で子が注入された @Observable モデルを読む、または変異させる | 明示的に stored property として渡す |
| 共有アプリサービスまたは設定 | @Environment(Type.self) |
| iOS 16 以前のレガシー参照モデル | root では @StateObject、注入時には @ObservedObject |
まず所有権の位置を選択してから、ラッパーを選びます。プレーンな値状態で十分な場合、参照モデルを導入しないでください。
クロスカッティングリファレンス
references/navigationstack.md: ナビゲーション所有権、タブごとの履歴、および enum ルーティング。references/sheets.md: 一元的なモーダルプレゼンテーションと enum 駆動の sheet。references/deeplinks.md: URL ハンドリングとルーティング外部リンクをアプリの宛先に。references/app-wiring.md: root 依存関係グラフ、環境使用法、およびアプリシェルワイアリング。references/async-state.md:.task、.task(id:)、キャンセル、デバウンシング、および非同期 UI 状態。references/previews.md:#Preview、フィクスチャ、モック環境、および分離されたプレビュー設定。references/performance.md: 安定した識別、観察スコープ、遅延コンテナ、およびレンダーコストのガードレール。
アンチパターン
- レイアウト、ビジネスロジック、ネットワーキング、ルーティング、フォーマットを 1 つのファイルで混在させた巨大なビュー。
- 相互に排他的な sheet、alert、またはナビゲーション宛先に対する複数のブール値フラグ。
- ビュー ライフサイクルフックまたは注入されたモデル/サービスの代わりに、
body駆動のコードパスで直接ライブサービス呼び出し。 - より良い構成で解決すべき型の不一致に対応するために
AnyViewに手を出すこと。 - 明確な所有権の理由なく、すべての共有依存関係を
@EnvironmentObjectまたはグローバルルータに設定すること。
新しい SwiftUI ビューのワークフロー
- UI コードを書く前に、ビューの状態、所有権の位置、および最小 OS の仮定を定義します。
- どの依存関係が
@Environmentに属し、どれが明示的なイニシャライザ入力として残るべきかを特定します。 - ビュー階層、ルーティングモデル、およびプレゼンテーションポイントをスケッチします。繰り返されるパーツをサブビューに抽出します。複雑なナビゲーションについては、
references/navigationstack.md、references/sheets.md、またはreferences/deeplinks.mdを読んでください。コンパイラエラーがないことを確認してから進みます。 .taskまたは.task(id:)を使用して非同期ロードを実装し、必要に応じて明示的なローディング状態とエラー状態を追加します。作業が入力の変更またはキャンセルに依存する場合、references/async-state.mdを読んでください。- プライマリおよびセカンダリ状態のプレビューを追加してから、UI がインタラクティブなときはアクセシビリティラベルまたは識別子を追加します。ビューがフィクスチャまたは注入されたモック依存関係を必要とする場合、
references/previews.mdを読んでください。 - ビルドで検証します。コンパイラエラーがないこと、プレビューがクラッシュせずにレンダリングすること、状態変更が正しく伝播すること、リスト識別と観察スコープが回避可能な再レンダリングを引き起こさないことを確認します。スクリーンが大きい、スクロール集約的である、または頻繁に更新される場合は、
references/performance.mdを読んでください。一般的な SwiftUI コンパイルエラー(欠落している@Stateアノテーション、曖昧なViewBuilderクロージャ、または型の不一致)については、コールサイトを更新する前に解決してください。ビルドが失敗した場合: エラーメッセージを注意深く読み、特定された問題を修正してから再度ビルドして次のステップに進んでください。プレビューがクラッシュした場合、オフェンディングサブビューを分離し、その状態初期化が有効であることを確認してから、プレビューを再実行してから続けます。
コンポーネントリファレンス
エントリーポイントとして references/components-index.md を使用します。各コンポーネントリファレンスには以下を含めるべきです:
- インテントと最適な適用シナリオ。
- ローカル規約を含む最小限の使用パターン。
- ピットフォールとパフォーマンスに関する注意。
- 現在のリポジトリの既存の例へのパス。
新しいコンポーネントリファレンスを追加する
references/<component>.mdを作成します。- 短く実行可能にします。現在のリポジトリの具体的なファイルにリンクします。
references/components-index.mdを新しいエントリで更新します。
ライセンス: MIT(寛容ライセンスのため全文を引用しています) · 原本リポジトリ
詳細情報
- 作者
- dimillian
- リポジトリ
- dimillian/skills
- ライセンス
- MIT
- 最終更新
- 不明
Source: https://github.com/dimillian/skills / ライセンス: MIT
関連スキル
nano-banana-2
inference.sh CLIを通じてGoogle Gemini 3.1 Flash Image Preview(Nano Banana 2)で画像を生成します。テキストから画像を生成する機能、画像編集、最大14枚の複数画像入力、Google Searchグラウンディング機能に対応しています。トリガーワード:「nano banana 2」「nanobanana 2」「gemini 3.1 flash image」「gemini 3 1 flash image preview」「google image generation」
octocode-slides
洗練されたマルチファイル形式のHTMLプレゼンテーションを生成します。6段階のフロー(概要 → リサーチ → アウトライン → デザイン → 実装 → レビュー)で構成されています。各スライドは独立したHTMLファイルとなり、iframeで読み込まれます。「スライドを作成してほしい」「プレゼンテーションを作ってほしい」「HTMLスライドを生成してほしい」「デックを構築してほしい」といった依頼や、ノート・ドキュメント・コードを洗練されたプレゼンテーションに変換する際に使用できます。
gpt-image2-ppt
OpenAIのgpt-image-2を使用して、視覚的に優れたPPTスライドを生成します。Spatial Glass、Tech Blue、Editorial Monoなど10種類のキュレーション済みスタイルに対応し、ユーザーが提供したPPTXファイルを模倣するテンプレートクローンモードも搭載しています。HTMLビューアと16:9形式のPPTXファイルを出力します。プレゼンテーション、スライド、ピッチデック、投資家向けPPT、雑誌風PPTの作成依頼などで活用してください。
nano-banana
Nano Banana PRO(Gemini 3 Pro Image)およびNano Banana(Gemini 2.5 Flash Image)を使用したAI画像生成機能です。以下の場合に活用できます:(1)テキストプロンプトからの画像生成、(2)既存画像の編集、(3)インフォグラフィックス、ロゴ、商品写真、ステッカーなどのプロフェッショナルなビジュアルアセット制作、(4)複数画像での人物キャラクターの一貫性保持、(5)正確なテキスト描画を含む画像生成、(6)AI生成ビジュアルが必要なあらゆるタスク。「画像を生成」「画像を作成」「写真を作る」「ロゴをデザイン」「インフォグラフィックスを作成」「AI画像」「nano banana」またはその他の画像生成リクエストをトリガーとして機能します。
oiloil-ui-ux-guide
モダンでクリーンなUI/UXガイダンス・レビュースキルです。新機能や既存システム(Webアプリ)に対して、実行可能なUI/UX改善提案、デザイン原則、デザインレビューチェックリストが必要な場合に活用できます。CRAP(コントラスト・反復・配置・近接)をベースに、タスクファーストなUX、情報設計、フィードバック・システムステータス、一貫性、affordances、エラー防止・復旧、認知負荷を重視します。モダンミニマルスタイル(クリーン・余白・タイポグラフィ主導)を強制し、不要なテキストを削減、アイコンとしての絵文字を禁止し、統一されたアイコンセットから直感的で洗練されたアイコンを推奨します。
axiom-hig-ref
Apple Human Interface Guidelines リファレンス — 色(セマンティックカラー、カスタムカラー、パターン)、背景(マテリアル階層、ダイナミック背景)、タイポグラフィ(標準スタイル、カスタムフォント、Dynamic Type)、SF Symbols(レンダリングモード、色、多言語対応)、ダークモード、アクセシビリティ、プラットフォーム固有の考慮事項を網羅したガイドラインです。