axiom-ios-ui について
axiom-ios-uiは、SwiftUI、UIKit、デザイン、アクセシビリティ、テストに関するiOS UI作業を案内するスキルです。問題に応じて適切なスキルや監査エージェントを選べます。
主な機能
- 01SwiftUIとUIKitの問題を振り分け
- 02レイアウト、ナビゲーション、アニメーションに対応
- 03デザインとアクセシビリティの案内
- 04自動監査エージェントを提示
活用シーン
- 01SwiftUIのレイアウト問題の解決策探し
- 02UIKitブリッジ関連スキルの選択
- 03ナビゲーションやアクセシビリティの監査
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ charleswiltgen/ axiom --skill axiom-ios-uiインストール後、Claude Code で/axiom-ios-uiを入力して読み込まれたか確認します。
詳細
iOS UI ルーター
SwiftUI、UIKit、レイアウト、ナビゲーション、アニメーション、デザインなど、iOS の UI に関する作業では必ずこのスキルを使用してください。
使用するタイミング
次の作業でこのルーターを使用してください:
- SwiftUI のビュー、状態、バインディング
- UIKit のビューと制約
- レイアウトの問題(Auto Layout、SwiftUI のレイアウト)
- ナビゲーション(NavigationStack、ディープリンク)
- アニメーションとトランジション
- Liquid Glass のデザイン(iOS 26 以降)
- Apple Human Interface Guidelines
- UI アーキテクチャとパターン
- アクセシビリティに関する UI の問題
優先順位の決定
ios-ui と ios-performance:UI の動作が遅い場合(例:「SwiftUI List が遅い」):
- まず ios-ui を試してください — ドメイン固有の対処(LazyVStack、ビューの ID、@State の最適化)で、5 分以内に UI のパフォーマンスが改善することがよくあります
- ドメイン固有の対処で改善しない場合に限り、ios-performance を使用してください — プロファイリングには時間がかかり、ドメインの知識でわかっていることを確認するだけになる場合があります
理由:既知の SwiftUI パターンで修正できるのに Instruments を使うと、時間を無駄にします。先にドメイン固有の対処を試し、その後にプロファイリングを行ってください。
ルーティングのロジック
SwiftUI の問題
ビューが更新されない → /skill axiom-swiftui-debugging
ナビゲーションの問題 → /skill axiom-swiftui-nav
パフォーマンス/遅延 → /skill axiom-swiftui-performance
レイアウトの問題 → /skill axiom-swiftui-layout
スタック/グリッド/アウトライン → /skill axiom-swiftui-containers-ref
アニメーションの問題 → /skill axiom-swiftui-animation-ref
ジェスチャーの競合 → /skill axiom-swiftui-gestures
ドラッグ&ドロップ、コピー&ペースト、共有 → /skill axiom-transferable-ref
アーキテクチャ/テスト容易性 → /skill axiom-swiftui-architecture
アプリレベルの構成 → /skill axiom-app-composition
検索の実装 → /skill axiom-swiftui-search-ref
iOS 26 の機能 → /skill axiom-swiftui-26-ref
UIKit とのブリッジ(Representable、HostingController) → /skill axiom-uikit-bridging
UIKit の問題
Auto Layout の競合 → /skill axiom-auto-layout-debugging
アニメーションのタイミングの問題 → /skill axiom-uikit-animation-debugging
SwiftUI の埋め込み(HostingController、HostingConfiguration) → /skill axiom-uikit-bridging
デザインとガイドライン
Liquid Glass の採用 → /skill axiom-liquid-glass
SF Symbols(エフェクト、レンダリング、カスタム) → /skill axiom-sf-symbols
デザイン上の判断 → /skill axiom-hig
タイポグラフィ → /skill axiom-typography-ref
TextKit/リッチテキスト → /skill axiom-textkit-ref
tvOS
Focus Engine、リモート入力、TVUIKit、テキスト入力 → /skill axiom-tvos
アクセシビリティ
VoiceOver、Dynamic Type → /skill axiom-accessibility-diag
テスト
UI テストの不安定さ → /skill axiom-ui-testing
自動スキャン
アーキテクチャ監査 → swiftui-architecture-auditor エージェントを起動します(関心の分離、ビュー内のロジック、テスト容易性)
パフォーマンススキャン → swiftui-performance-analyzer エージェントまたは /axiom:audit swiftui-performance を起動します(ビュー本体内の負荷の高い処理、不要な更新)
ナビゲーション監査 → swiftui-nav-auditor エージェントまたは /axiom:audit swiftui-nav を起動します(ディープリンクの不足、状態復元、誤ったコンテナ)
レイアウト監査 → swiftui-layout-auditor エージェントまたは /axiom:audit swiftui-layout を起動します(GeometryReader の誤用、適応性の不足、ブレークポイントのハードコード、ID の喪失)
UX フロー監査 → ux-flow-auditor エージェントまたは /axiom:audit ux-flow を起動します(行き止まり、閉じる操作の罠、見つけにくい CTA、空/読み込み中/エラー状態の不足)
Liquid Glass スキャン → liquid-glass-auditor エージェントまたは /axiom:audit liquid-glass を起動します(採用の機会、ツールバーの改善)
TextKit スキャン → textkit-auditor エージェントまたは /axiom:audit textkit を起動します(TextKit 1 へのフォールバック、非推奨のグリフ API、Writing Tools)
意思決定ツリー
digraph ios_ui {
start [label="UI issue" shape=ellipse];
is_tvos [label="tvOS?" shape=diamond];
is_swiftui [label="SwiftUI?" shape=diamond];
is_uikit [label="UIKit?" shape=diamond];
is_design [label="Design/guidelines?" shape=diamond];
start -> is_tvos;
is_tvos -> "axiom-tvos" [label="focus, remote, TVUIKit, text input, storage"];
is_tvos -> is_swiftui [label="no"];
is_swiftui -> swiftui_type [label="yes"];
is_swiftui -> is_uikit [label="no"];
is_uikit -> uikit_type [label="yes"];
is_uikit -> is_design [label="no"];
is_design -> design_type [label="yes"];
is_design -> "accessibility-diag" [label="accessibility"];
swiftui_type [label="What's wrong?" shape=diamond];
swiftui_type -> "swiftui-debugging" [label="view not updating"];
swiftui_type -> "swiftui-nav" [label="navigation"];
swiftui_type -> "swiftui-performance" [label="slow/lag"];
swiftui_type -> "swiftui-layout" [label="adaptive layout"];
swiftui_type -> "swiftui-containers-ref" [label="stacks/grids/outlines"];
swiftui_type -> "swiftui-architecture" [label="feature architecture"];
swiftui_type -> "app-composition" [label="app-level (root, auth, scenes)"];
swiftui_type -> "swiftui-animation-ref" [label="animations"];
swiftui_type -> "swiftui-gestures" [label="gestures"];
swiftui_type -> "transferable-ref" [label="drag/drop, sharing, copy/paste"];
swiftui_type -> "swiftui-search-ref" [label="search"];
swiftui_type -> "swiftui-26-ref" [label="iOS 26 features"];
swiftui_type -> "uikit-bridging" [label="UIKit interop"];
swiftui_type -> "ux-flow-audit" [label="UX dead ends, dismiss traps"];
uikit_type [label="UIKit issue?" shape=diamond];
uikit_type -> "auto-layout-debugging" [label="Auto Layout"];
uikit_type -> "uikit-animation-debugging" [label="animations"];
uikit_type -> "uikit-bridging" [label="SwiftUI embedding"];
uikit_type -> "ux-flow-audit" [label="UX dead ends, dismiss traps"];
design_type [label="Design topic?" shape=diamond];
design_type -> "liquid-glass" [label="Liquid Glass"];
design_type -> "sf-symbols" [label="SF Symbols"];
design_type -> "hig" [label="HIG compliance"];
design_type -> "typography-ref" [label="typography"];
design_type -> "textkit-ref" [label="TextKit/rich text"];
}
自動スキャンエージェント:
- アーキテクチャ監査(関心の分離、テスト容易性)が必要ですか? → swiftui-architecture-auditor(エージェント)
- SwiftUI のパフォーマンススキャン(ビュー本体の処理、不要な更新)が必要ですか? → swiftui-performance-analyzer(エージェント)
- ナビゲーション監査(ディープリンク、状態の復元)が必要ですか? → swiftui-nav-auditor(エージェント)
- レイアウト監査(GeometryReader、適応性、ハードコードされたサイズ)が必要ですか? → swiftui-layout-auditor(エージェント)
- UX フロー監査(行き止まり、閉じる操作の罠、状態の欠落)が必要ですか? → ux-flow-auditor(エージェント)
- Liquid Glass の導入状況をスキャンしますか? → liquid-glass-auditor(エージェント)
- TextKit のスキャン(Writing Tools、非推奨 API)が必要ですか? → textkit-auditor(エージェント)
不合理な正当化を避ける
| 考え | 実際 |
|---|---|
| 「シンプルな SwiftUI レイアウトだから、レイアウトスキルは不要」 | SwiftUI のレイアウトには 12 個の落とし穴があります。swiftui-layout はそのすべてを扱います。 |
| 「NavigationStack の仕組みは分かっている」 | ナビゲーションには状態の復元、ディープリンク、アイデンティティに関する落とし穴があります。swiftui-nav を使えば、2 時間のデバッグを防げます。 |
| 「ビューが更新されないだけだから、自分でデバッグする」 | ビューの更新失敗には 4 つの根本原因があります。swiftui-debugging は 5 分で診断します。 |
| 「とりあえず .animation() を追加して、後で直そう」 | アニメーションの問題は積み重なります。swiftui-animation-ref には正しいパターンが記載されています。 |
| 「この UI はシンプルだから、アーキテクチャは不要」 | 小さな機能でも、関心の分離は役立ちます。swiftui-architecture はリファクタリングの負債を防ぎます。 |
| 「UX の問題は仕上げにすぎないから、後で直そう」 | 行き止まりや閉じる操作の罠は、星 1 つのレビューにつながります。ux-flow-audit は数分でそれらを見つけます。 |
| 「.searchable の仕組みは分かっている」 | 検索には 6 つの落とし穴があります(ナビゲーションコンテナー、isSearching の階層、候補の確定など)。swiftui-search-ref はそのすべてを扱います。 |
| 「SF Symbols は分かっている。単に Image(systemName:) を使うだけ」 | 4 つのレンダリングモード、12 種類以上のエフェクト、3 つの Draw 再生モード、カスタムシンボルの作成があります。sf-symbols にはそのすべての判断ツリーがあります。 |
| 「ドラッグ&ドロップは .draggable と .dropDestination を使うだけ」 | UTType の宣言、表現の順序付け、ファイルのライフサイクル、アプリ間転送の落とし穴があります。transferable-ref はそのすべてを扱います。 |
| 「この UIView をさっとラップするだけ」 | UIViewRepresentable にはライフサイクル、コーディネーター、サイズ調整、メモリに関する落とし穴があります。uikit-bridging は 1~2 時間のデバッグセッションを防ぎます。 |
| 「tvOS はテレビ向けの iOS にすぎない」 | tvOS には永続ストレージも WebView もなく、2 種類のフォーカスシステムと 2 世代のリモコンがあります。axiom-tvos はそのすべての落とし穴を扱います。 |
呼び出し例
ユーザー:「モデルを変更しても SwiftUI のビューが更新されません」
→ 呼び出し:/skill axiom-swiftui-debugging
ユーザー:「ツールバーに Liquid Glass を実装するにはどうすればよいですか?」
→ 呼び出し:/skill axiom-liquid-glass
ユーザー:「NavigationStack が予期せず戻ってしまいます」
→ 呼び出し:/skill axiom-swiftui-nav
ユーザー:「この SwiftUI アプリに MVVM を使うべきですか?」
→ 呼び出し:/skill axiom-swiftui-architecture
ユーザー:「ログイン画面とメイン画面を切り替えるにはどうすればよいですか?」
→ 呼び出し:/skill axiom-app-composition
ユーザー:「アプリの認証状態はどこに保持すべきですか?」
→ 呼び出し:/skill axiom-app-composition
ユーザー:「LazyVGrid でグリッドレイアウトを作成するにはどうすればよいですか?」
→ 呼び出し:/skill axiom-swiftui-containers-ref
ユーザー:「VStack と LazyVStack の違いは何ですか?」
→ 呼び出し:/skill axiom-swiftui-containers-ref
ユーザー:「OutlineGroup で階層データを表示するにはどうすればよいですか?」
→ 呼び出し:/skill axiom-swiftui-containers-ref
ユーザー:「SwiftUI のリストに検索を追加するにはどうすればよいですか?」
→ 呼び出し:/skill axiom-swiftui-search-ref
ユーザー:「検索候補が機能しません」
→ 呼び出し:/skill axiom-swiftui-search-ref
ユーザー:「タップ時に SF Symbol をアニメーションさせるにはどうすればよいですか?」
→ 呼び出し:/skill axiom-sf-symbols
ユーザー:「カスタムシンボルで SF Symbol の Draw アニメーションが機能しません」
→ 呼び出し:/skill axiom-sf-symbols
ユーザー:「ツールバーのアイコンにはどのレンダリングモードを使えばよいですか?」
→ 呼び出し:/skill axiom-sf-symbols
ユーザー:「SwiftUI でモデルをドラッグ可能にするにはどうすればよいですか?」
→ 呼び出し:/skill axiom-transferable-ref
ユーザー:「カスタムプレビュー付きの ShareLink を追加するにはどうすればよいですか?」
→ 呼び出し:/skill axiom-transferable-ref
ユーザー:「SwiftUI で UIKit のビューをラップするにはどうすればよいですか?」
→ 呼び出し:/skill axiom-uikit-bridging
ユーザー:「UIKit アプリに SwiftUI を埋め込むにはどうすればよいですか?」
→ 呼び出し:/skill axiom-uikit-bridging
ユーザー:「UIViewRepresentable が正しく更新されません」
→ 呼び出し:/skill axiom-uikit-bridging
ユーザー:「コレクションビューのセルに UIHostingConfiguration を使うにはどうすればよいですか?」
→ 呼び出し:/skill axiom-uikit-bridging
ユーザー:「tvOS アプリを開発していますが、フォーカスナビゲーションが機能しません」
→ 呼び出し:/skill axiom-tvos
ユーザー:「tvOS でテキスト入力を処理するにはどうすればよいですか?」
→ 呼び出し:/skill axiom-tvos
ユーザー:「アプリの UX 上の行き止まりや、閉じられない画面を確認してください」
→ 呼び出し:ux-flow-auditor エージェント
ユーザー:「SwiftUI のアーキテクチャで関心事が適切に分離されているか確認してください」
→ 呼び出し:swiftui-architecture-auditor エージェント
ユーザー:「SwiftUI のビューをスキャンしてパフォーマンスの問題を確認してください」
→ 呼び出し:swiftui-performance-analyzer エージェント
ユーザー:「ナビゲーションを監査して、ディープリンクの不足がないか確認してください」
→ 呼び出し:swiftui-nav-auditor エージェント
ユーザー:「iPad とマルチタスクでレイアウトに問題がないか確認してください」
→ 呼び出し:swiftui-layout-auditor エージェント
ユーザー:「アプリで Liquid Glass を活用できる箇所がないか確認してください」
→ 呼び出し:liquid-glass-auditor エージェント
ユーザー:「テキストビューに Writing Tools が表示されないのはなぜですか?」
→ 呼び出し:textkit-auditor エージェント