mcpField
S
swiftui-expert-skill

swiftui-expert-skill

github.com/expo開発139 回インストール22 週間前に更新
リポジトリ

swiftui-expert-skill について

swiftui-expert-skill は、SwiftUI コードのレビュー、改善、新規実装を行うエージェント向けのガイドです。API の確認やテーマ別の参照資料、正確性のルールを備え、特定のアーキテクチャは強制しません。

主な機能

  1. 01現行 API と非推奨 API の確認
  2. 02テーマ別の参照ファイル案内
  3. 03SwiftUI の実装とレビューの指針
  4. 04状態・識別子・利用可能性の確認
  5. 05アクセシビリティ・アニメーション・性能の扱い

活用シーン

  1. 01SwiftUI コードの非推奨 API の確認
  2. 02バージョン別フォールバック付き機能の実装
  3. 03状態フローとビュー構成の監査

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/expo/agent-templates --skill swiftui-expert-skill

インストール後、Claude Code で/swiftui-expert-skillを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

references/
accessibility-patterns.md
animation-advanced.md
animation-basics.md
animation-transitions.md
charts-accessibility.md
charts.md
image-optimization.md
latest-apis.md
layout-best-practices.md
liquid-glass.md
list-patterns.md
macos-scenes.md
macos-views.md
macos-window-styling.md
performance-patterns.md
scroll-patterns.md
sheet-navigation-patterns.md
state-management.md
view-structure.md

詳細

SwiftUI エキスパートスキル

運用ルール

  • 非推奨 API の使用を避けるため、各タスクの開始時に references/latest-apis.md を確認します
  • ブリッジが必要な場合を除き、UIKit/AppKit とのブリッジより SwiftUI のネイティブ API を優先します
  • 正確性とパフォーマンスを重視し、特定のアーキテクチャ(MVVM、VIPER など)を強制しません
  • テスト容易性のため、ビジネスロジックとビューを分離することを推奨しますが、その方法は指定しません
  • Apple のヒューマンインターフェイスガイドラインと API 設計パターンに従います
  • ユーザーから明示的に依頼された場合に限り、Liquid Glass を採用します(references/liquid-glass.md を参照)
  • パフォーマンス最適化は必須事項ではなく、提案として提示します
  • バージョン固有の API には #available によるゲートを設け、適切なフォールバックを用意します

タスクのワークフロー

既存の SwiftUI コードをレビューする
  • レビュー対象のコードを読み、該当するトピックを特定します
  • 非推奨 API を指摘します(references/latest-apis.md と照合)
  • 関連するトピックごとに、以下のトピックルーターを実行します
  • iOS 26 以降の機能について、#available によるゲートとフォールバックの経路を検証します
既存の SwiftUI コードを改善する
  • トピックルーターの各トピックに照らして、現在の実装を監査します
  • 非推奨 API を references/latest-apis.md にある最新の代替 API に置き換えます
  • ホットパスをリファクタリングし、不要な状態更新を減らします
  • 複雑なビュー本体を個別のサブビューに切り出します
  • UIImage(data:) が使われている場合は、画像のダウンサンプリングを提案します(任意の最適化です。references/image-optimization.md を参照)
新しい SwiftUI 機能を実装する
  • まずデータフローを設計します。所有する状態と注入される状態を特定します
  • 最適な差分検出ができるようにビューを構成します(早い段階でサブビューを切り出します)
  • 適切なアニメーションパターン(暗黙的アニメーションと明示的アニメーション、トランジション)を適用します
  • タップ可能な要素にはすべて Button を使い、アクセシビリティのグループ化とラベルを追加します
  • バージョン固有の API には #available によるゲートを設け、フォールバックを用意します
トピックルーター

現在のタスクに関連する各トピックについて、参照ファイルを確認します。

トピック参照先
状態管理references/state-management.md
ビューの構成references/view-structure.md
パフォーマンスreferences/performance-patterns.md
リストと ForEachreferences/list-patterns.md
レイアウトreferences/layout-best-practices.md
シートとナビゲーションreferences/sheet-navigation-patterns.md
ScrollViewreferences/scroll-patterns.md
アニメーション(基本)references/animation-basics.md
アニメーション(トランジション)references/animation-transitions.md
アニメーション(応用)references/animation-advanced.md
アクセシビリティreferences/accessibility-patterns.md
Swift Chartsreferences/charts.md
Charts のアクセシビリティreferences/charts-accessibility.md
画像の最適化references/image-optimization.md
Liquid Glass(iOS 26 以降)references/liquid-glass.md
macOS シーンreferences/macos-scenes.md
macOS ウィンドウのスタイル設定references/macos-window-styling.md
macOS ビューreferences/macos-views.md
非推奨 API の確認references/latest-apis.md

正確性チェックリスト

以下は必須ルールです。違反は常にバグです。

  • @State プロパティは private にする
  • 子ビューが親の状態を変更する場合に限り、@Binding を使う
  • 渡された値を @State や @StateObject として宣言しない(更新が反映されません)
  • ビューが所有するオブジェクトには @StateObject、注入されるオブジェクトには @ObservedObject を使う
  • iOS 17 以降:@Observable には @State を使い、バインディングが必要な注入済み Observable には @Bindable を使う
  • ForEach では安定した識別子を使う(動的なコンテンツで .indices は使わない)
  • ForEach の各要素が生成するビューの数を一定にする
  • .animation(_:value:) には必ず value パラメーターを含める
  • iOS 26 以降の API には #available によるゲートを設け、フォールバックを用意する
  • チャートの型を使用するファイルには import Charts を含める

参考資料

  • references/latest-apis.md -- すべてのタスクで最初にお読みください。 非推奨 API から最新 API への移行(iOS 15+ から iOS 26+)
  • references/state-management.md -- プロパティラッパー、データフロー、@Observable への移行
  • references/view-structure.md -- ビューの抽出、コンテナパターン、@ViewBuilder
  • references/performance-patterns.md -- ホットパスの最適化、更新制御、_logChanges()
  • references/list-patterns.md -- ForEach の識別性、Table(iOS 16+)、インラインフィルタリングの注意点
  • references/layout-best-practices.md -- レイアウトパターン、GeometryReader の代替手段
  • references/accessibility-patterns.md -- VoiceOver、Dynamic Type、グループ化、特性
  • references/animation-basics.md -- 暗黙的/明示的なアニメーション、タイミング、パフォーマンス
  • references/animation-transitions.md -- ビューのトランジション、matchedGeometryEffect、Animatable
  • references/animation-advanced.md -- フェーズ/キーフレームアニメーション(iOS 17+)、@Animatable マクロ(iOS 26+)
  • references/charts.md -- Swift Charts のマーク、軸、選択、スタイル設定、Chart3D(iOS 26+)
  • references/charts-accessibility.md -- Charts の VoiceOver、Audio Graph、代替手段
  • references/sheet-navigation-patterns.md -- シート、NavigationSplitView、インスペクター
  • references/scroll-patterns.md -- ScrollViewReader、プログラムによるスクロール
  • references/image-optimization.md -- AsyncImage、ダウンサンプリング、キャッシュ
  • references/liquid-glass.md -- iOS 26+ の Liquid Glass エフェクトと代替パターン
  • references/macos-scenes.md -- 設定、MenuBarExtra、WindowGroup、マルチウィンドウ
  • references/macos-window-styling.md -- ツールバースタイル、ウィンドウサイズ、Commands
  • references/macos-views.md -- HSplitView、Table、PasteButton、AppKit との連携

コメント