swiftui-expert-skill
SwiftUIコードの新規作成・レビュー・リファクタリングに活用するスキルで、状態管理やビューの合成、パフォーマンス最適化、Liquid Glassの導入、さらにハングやヒッチ、CPUホットスポット、過剰なビュー更新の調査を目的としたInstrumentsの`.trace`キャプチャ・分析まで幅広く対応します。iOS・macOSを対象としたSwiftUI開発全般でトリガーされます。
description の原文を見る
Use when writing, reviewing, or refactoring SwiftUI code for iOS or macOS, including state management, view composition, performance, Liquid Glass adoption, or Instruments `.trace` capture/analysis for hangs, hitches, CPU hotspots, or excessive view updates.
SKILL.md 本文
SwiftUI エキスパートスキル
動作ルール
- すべてのタスク開始時に
references/latest-apis.mdを参照して、廃止予定の API を回避する - UIKit/AppKit ブリッジが必要な場合を除き、ネイティブ SwiftUI API を優先する
- 正確性とパフォーマンスに注力し、特定のアーキテクチャ (MVVM、VIPER など) を強制しない
- ビジネスロジックをビューから分離することを推奨し、テスト容易性を高める (方法は問わない)
- Apple のヒューマンインターフェイスガイドラインと API デザインパターンに従う
- Liquid Glass は、ユーザーが明示的にリクエストした場合のみ採用する (
references/liquid-glass.md参照) - パフォーマンス最適化を要件ではなく提案として提示する
- iOS 26+ 機能については
#availableゲーティングと合理的なフォールバックを使用する
タスクワークフロー
既存の SwiftUI コードをレビューする
- レビュー対象のコードを読み、該当するトピックを特定する
- 廃止予定 API をフラグする (
references/latest-apis.mdと比較) - 該当する各トピックについて以下のトピックルーターを実行する
- iOS 26+ 機能の
#availableゲーティングとフォールバックパスを検証する
既存の SwiftUI コードを改善する
- 現在の実装をトピックルーターのトピックと照合し、監査する
references/latest-apis.mdの最新の同等物で廃止予定 API を置き換える- 不要な状態更新を削減するために、ホットパスをリファクタリングする
- 複雑なビューボディを別のサブビューに抽出する
UIImage(data:)が見つかった場合は画像ダウンサンプリングを提案する (オプション最適化、references/image-optimization.md参照)
新しい SwiftUI 機能を実装する
- データフローを最初に設計する: 所有する状態 vs 注入される状態を特定する
- 最適な差分化のためにビューを構築する (早期にサブビューを抽出)
- 正しいアニメーションパターンを適用する (暗黙的 vs 明示的、トランジション)
- すべてのタップ可能な要素に
Buttonを使用し、アクセシビリティグループと ラベルを追加する - バージョン固有 API を
#availableでゲーティングし、フォールバックを提供する
新しい Instruments トレースを記録する
ユーザーが「トレースを記録する」「アプリをプロファイリングする」「セッションをキャプチャする」などと言った場合にトリガーする。完全なリファレンス: references/trace-recording.md
- ターゲットを確認する — 実行中のアプリに接続、新しいアプリを起動、またはすべてのプロセスを記録? ユーザーが言及していない場合は確認する。接続されたデバイスを列挙すると便利:
python3 "${SKILL_DIR}/scripts/record_trace.py" --list-devices - ターゲット種別に基づくテンプレートを選択する —
SwiftUIテンプレートは任意の 実デバイス (物理的な iOS/iPadOS デバイス **またはホスト Mac) で SwiftUI レーンを設定します。唯一の例外は iOS Simulator で、SwiftUI レーンは空で返されます — その場合は--template "Time Profiler"に切り替えます (それでも Time Profiler + Hangs + Animation Hitches が得られます)。常に--list-devicesを確認してください:simulators種別 →Time Profiler;devices種別 (実デバイスとホスト Mac) → デフォルトSwiftUI。完全な判定表はreferences/trace-recording.mdにあります。 - 記録を開始する。ユーザーが「完了したら教える」と言うエージェント駆動セッションの場合は、バックグラウンドで開始し、停止ファイルを使用します:
インタラクティブセッションの場合は、ユーザーに完了時に Ctrl+C を押すよう指示します。python3 "${SKILL_DIR}/scripts/record_trace.py" \ --device "<name|udid>" --attach "<AppName>" \ --stop-file /tmp/stop-trace --output ~/Desktop/session.trace - 停止をシグナルする — ユーザーがアプリの演習を完了したと言ったら、
touch /tmp/stop-traceを実行します。スクリプトは xctrace をクリーンに SIGINT し、最終化を最大 60 秒待ちます。 - 結果のトレースを分析する (以下の「トレース駆動改善」ワークフローに流れ込む)。
トレース駆動改善 (Instruments .trace ファイルが提供される)
ユーザーのリクエストが .trace ファイルを参照するたびにトリガーします。対象の SwiftUI ソースファイルは オプション です — 指定された場合は特定の行を引用します。指定されない場合は、トレースが既に明らかにしているビュー名とシンボルに基づいて、どこを見るべきかを推奨します。
完全なリファレンス: references/trace-analysis.md。コンポジションパターンの概要:
- 分析の対象を確定する。 自問してください: ユーザーはトレース全体を望んでいますか、それともスライスを望んでいますか?
- 「X に焦点を当てる / X 後 / X と Y の間 / X 中」 → 最初にウィンドウを解決します (ステップ 2 参照)。
- スコーピングの手がかりなし → トレース全体を分析します。
- ウィンドウを解決する (ユーザーがスコーピングした場合のみ)。 パーサーは 2 つの検出モードを公開します:
両モードとも# 関心領域の開始/終了をマークするログを見つけます: python3 "${SKILL_DIR}/scripts/analyze_trace.py" --trace <path> \ --list-logs --log-message-contains "loaded feed" --log-limit 5 # または、os_signpost 間隔 (ペアになった begin/end) を名前でフィルタリング可能にリストします: python3 "${SKILL_DIR}/scripts/analyze_trace.py" --trace <path> \ --list-signposts --signpost-name-contains "ImageDecode"--window START_MS:END_MSを受け入れて検出をスコープします。ユーザーの説明に一致するtime_ms(ログ用) またはstart_ms/end_ms(シグナルポスト用) を選択します。--window 10400:11700のようなウィンドウを構築します。 - メイン分析を実行する (
--windowの有無にかかわらず):python3 "${SKILL_DIR}/scripts/analyze_trace.py" --trace <path> \ --json-only --top 10 [--window START_MS:END_MS] references/trace-analysis.mdで解釈する — 主要な診断:- 各相関内の
main_running_coverage_pct(<25% = ブロック; ≥75% = CPU バウンド)。 swiftui-causes.top_sourcesは更新が継続する 理由 を明らかにします —UserDefaultObserver.send()や広いEnvironmentWriterエントリなどの高エッジカウントソースは構造的無効化バグです。1 つを修正すると、多くの下流のホットビューが頻繁に崩れます。
- 各相関内の
- 特定のビューが高価であると表示される場合は、誰が無効化しているかを尋ねます。
--fanin-for "<view name>"を使用して、更新を駆動するソースノードのランク付きリストを取得します。 - オプションでソースに根拠を置く。 ユーザーがファイルを指した場合は、それを読み、ビュー名 / ユーザーコードシンボルをそこの識別子と照合します。そうでない場合は、SwiftUI が報告したビュー名に基づいて、どのファイルを開くべきかを推奨します。
- 優先付けられた計画を返す。 証拠 (カバレッジ %、ホットシンボル、重複するビュー、ログタイムスタンプ、原因グラフエッジ) を引用し、各推奨事項をトピックルーターリファレンスにルーティングします。
- ユーザーがコード編集をリクエストした場合のみ、コードを編集します。
トピックルーター
現在のタスクに関連する各トピックのリファレンスファイルを参照してください:
| トピック | リファレンス |
|---|---|
| 状態管理 | references/state-management.md |
| ビューコンポジション | references/view-structure.md |
| パフォーマンス | references/performance-patterns.md |
| リストと ForEach | references/list-patterns.md |
| レイアウト | references/layout-best-practices.md |
| シートとナビゲーション | references/sheet-navigation-patterns.md |
| ScrollView | references/scroll-patterns.md |
| フォーカス管理 | references/focus-patterns.md |
| アニメーション (基本) | references/animation-basics.md |
| アニメーション (トランジション) | references/animation-transitions.md |
| アニメーション (高度) | references/animation-advanced.md |
| アクセシビリティ | references/accessibility-patterns.md |
| Swift Charts | references/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 |
| テキストパターン | references/text-patterns.md |
| 廃止予定 API 検索 | references/latest-apis.md |
| Instruments トレース分析 | references/trace-analysis.md |
| Instruments トレース記録 | references/trace-recording.md |
正確性チェックリスト
これらはハードルール — 違反は常にバグです:
-
@Stateプロパティはprivate - 子がペアレント状態を変更する場合のみ
@Bindingを使用 - 渡された値は
@Stateまたは@StateObjectとして宣言されない (更新を無視する) - ビュー所有オブジェクトには
@StateObject; 注入されたものには@ObservedObject - iOS 17+:
@Stateと@Observable; バインディングが必要な注入可観測物には@Bindable -
ForEachは安定した ID を使用 (動的コンテンツに.indicesを使用しない) -
ForEach要素あたりのビュー数は一定 -
.animation(_:value:)は常にvalueパラメーターを含む -
@FocusStateプロパティはprivate -
.focusable()ビューのタップジェスチャーハンドラー内で冗長な@FocusState書き込みなし - iOS 26+ API は
#availableでゲーティングされ、フォールバックが提供される - チャート型を使用するファイルに
import Chartsが存在
リファレンス
references/latest-apis.md— すべてのタスクについて最初に読む。 廃止予定から最新 API への移行 (iOS 15+ から iOS 26+)references/state-management.md— プロパティラッパー、データフロー、@Observableマイグレーションreferences/view-structure.md— ビュー抽出、コンテナーパターン、@ViewBuilderreferences/performance-patterns.md— ホットパス最適化、更新制御、_logChanges()references/list-patterns.md— ForEach ID、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、Animatablereferences/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、Inspectorreferences/scroll-patterns.md— ScrollViewReader、プログラマティックスクロールreferences/focus-patterns.md— フォーカス状態、focusable ビュー、フォーカス値、デフォルトフォーカス、一般的な落とし穴references/image-optimization.md— AsyncImage、ダウンサンプリング、キャッシングreferences/liquid-glass.md— iOS 26+ Liquid Glass エフェクトとフォールバックパターンreferences/macos-scenes.md— Settings、MenuBarExtra、WindowGroup、マルチウィンドウreferences/macos-window-styling.md— ツールバースタイル、ウィンドウサイズ、Commandsreferences/macos-views.md— HSplitView、Table、PasteButton、AppKit 相互運用references/text-patterns.md— Text イニシャライザー選択、逐語的 vs ローカライズreferences/trace-analysis.md—scripts/analyze_trace.pyを使用して Instruments.traceファイルを解析; メインスレッドカバレッジ、高重大度 SwiftUI 更新、ヒッチナラティブを解釈; ソースファイルに検出結果をマップバックreferences/trace-recording.md—scripts/record_trace.pyを使用して新しいトレースを記録: 実行中のアプリに接続、新しいアプリを起動、または手動で停止されたセッションをキャプチャ; エージェント駆動フローの停止ファイルをサポート
ライセンス: MIT(寛容ライセンスのため全文を引用しています) · 原本リポジトリ
詳細情報
- 作者
- avdlee
- ライセンス
- MIT
- 最終更新
- 不明
Source: https://github.com/avdlee/swiftui-agent-skill / ライセンス: 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を通じてオンチェーン取引とデータ照会を実現します。