axiom-uikit について
axiom-uikitは、UIKitを中心とするApple UI開発向けのルーティングスキルです。ブリッジ、レイアウト、アニメーション、Combine、TextKit、PencilKitなどの課題に応じた資料を案内します。
主な機能
- 01UIKitとSwiftUIのブリッジを案内
- 02アダプティブレイアウトとAuto Layoutの診断
- 03UIKitアニメーションとCombineのパターン
- 04TextKit、PencilKit、PaperKitのガイド
- 05モダナイズと画面サイズ対応の監査案内
活用シーン
- 01UIKitビューをSwiftUIに組み込む
- 02制約の競合やレイアウト不具合を調べる
- 03Combineの購読やアニメーションのタイミングを診断する
- 04TextKitやPencilKitの機能を追加する
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ charleswiltgen/ axiom --skill axiom-uikitインストール後、Claude Code で/axiom-uikitを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
skills/adaptive-layout.mdauto-layout-debugging.mdcombine-patterns.mdpencilkit-paperkit-ref.mdpencilkit-paperkit.mdresize-auditor.mdtextkit-ref.mduikit-animation-debugging.mduikit-bridging.mduikit-modernization.md詳細
UIKit とブリッジング
UIKit のブリッジング、Auto Layout、Combine、TextKit、または UIKit アニメーションに関する作業では、必ずこのスキルを使用してください。
Axiom エージェントを起動できませんか? このルーターからエージェントに案内された場合は、その手順をインラインで実行してください。MCP 経由では、
axiom_get_agentがエージェントを返します。それ以外の環境では、以下のファイルを読み込んでください。必要なのはファイルの検索と読み取りだけです。ここで利用できるもの:
skills/resize-auditor.md。ほかのエージェントについても、MCP 経由では
axiom_get_agentが返します。そのエージェントの xclog、xcsym、xcprof の手順を、axiom_xclog_*、axiom_xcsym_*、axiom_xcprof_*ツールで実行してください。それ以外の環境では、Axiom のスキルからskills/<agent>.mdを検索してください。見つからない場合は、このスイートのスキルを使って自分で作業し、PATH上にある Axiom ツールを利用してください。
クイックリファレンス
| 症状/タスク | 参照先 |
|---|---|
| UIViewRepresentable、UIViewControllerRepresentable | skills/uikit-bridging.md を参照 |
| UIKit への SwiftUI の埋め込み(UIHostingController) | skills/uikit-bridging.md を参照 |
| Coordinator パターン、updateUIView のライフサイクル | skills/uikit-bridging.md を参照 |
| 適応型 UIKit レイアウトの構築:ガイド、幅に応じた制約、コンポジショナルレイアウト、セルのサイズ自動調整 | skills/adaptive-layout.md を参照 |
| 「Unable to simultaneously satisfy constraints」 | skills/auto-layout-debugging.md を参照 |
| 制約の競合、曖昧なレイアウト | skills/auto-layout-debugging.md を参照 |
| ビューが表示されない、または配置が正しくない | skills/auto-layout-debugging.md を参照 |
| CAAnimation の完了ハンドラーが呼び出されない | skills/uikit-animation-debugging.md を参照 |
| デバイス上でスプリングの物理挙動が不適切、アニメーション時間が一致しない | skills/uikit-animation-debugging.md を参照 |
| アニメーションのカクつき、CATransaction のタイミング | skills/uikit-animation-debugging.md を参照 |
| Combine パブリッシャー、AnyCancellable のライフサイクル | skills/combine-patterns.md を参照 |
| @Published プロパティ、Combine と async/await の連携 | skills/combine-patterns.md を参照 |
| Combine と async/await の使い分け | skills/combine-patterns.md を参照 |
UIScene のライフサイクルが必要な場合、サイズ変更可能なアプリ、サイズクラス、タブのサイドバー OS27 | skills/uikit-modernization.md を参照 |
| iPhone ミラーリングの互換性:間接入力、コンパニオンの Face ID、縦向きの制約 | skills/uikit-modernization.md を参照 |
| シーンの境界:終了処理、アクティベーション要求、シーンごとの復元、外部ディスプレイ、activeAppearance | skills/uikit-modernization.md を参照 |
ナビゲーションバーのタイトルとサブタイトル:UINavigationItem.subtitle、largeSubtitleView、attributedTitle/attributedSubtitle、サブタイトルのテキスト属性(iOS 26) | skills/uikit-modernization.md を参照 |
| 自動サイズ変更対応スキャン(シーンのライフサイクル、UIScreen.main、固定キャンバス、ミラーリング入力、iPhone Duo) | resize-auditor エージェントを起動するか、/axiom:audit resize を実行 |
| UIKit での iPhone Duo:縦向きバー、折り目、外側ディスプレイでのウィンドウ要求 | axiom-swiftui(skills/iphone-duo.md)を参照 — UIKit 版は各 SwiftUI API の隣にあります |
| TextKit 2 のアーキテクチャ、NSTextLayoutManager | skills/textkit-ref.md を参照 |
| Writing Tools の統合(iOS 26) | skills/textkit-ref.md を参照 |
ビューポートの描画サーフェス、アタッチメントの再利用、折りたたみ可能なテキスト OS27 | skills/textkit-ref.md を参照 |
| SwiftUI TextEditor、TextKit 1 からの移行 | skills/textkit-ref.md を参照 |
文法チェック(UITextChecker)、エッジごとのテキストブロックの枠線 OS27 | skills/textkit-ref.md を参照 |
| PencilKit キャンバス、PKToolPicker、描画の永続化 | skills/pencilkit-paperkit.md を参照 |
| Apple Pencil Pro(スクイーズ、バレルロール、ホバー、触覚フィードバック) | skills/pencilkit-paperkit.md を参照 |
手書き認識(PKStrokeRecognizer)、ストロークの識別/分割 OS27 | skills/pencilkit-paperkit-ref.md を参照 |
| PaperKit マークアップキャンバス(図形、画像、テキストと描画) | skills/pencilkit-paperkit-ref.md を参照 |
PaperKit のプログラムによるマークアップモデル(サブ要素、装飾要素) OS27 | skills/pencilkit-paperkit-ref.md を参照 |
判断ツリー
digraph uikit {
start [label="UIKit task" shape=ellipse];
what [label="What do you need?" shape=diamond];
start -> what;
what -> "skills/uikit-bridging.md" [label="wrap UIKit in SwiftUI\nor SwiftUI in UIKit"];
what -> "skills/adaptive-layout.md" [label="build adaptive layout\n(guides, constraint sets,\ncompositional)"];
what -> "skills/auto-layout-debugging.md" [label="constraint errors,\nlayout issues"];
what -> "skills/uikit-animation-debugging.md" [label="CAAnimation bugs,\nspring physics,\ncompletion handlers"];
what -> "skills/combine-patterns.md" [label="publishers, sinks,\n@Published,\nasync/await bridge"];
what -> "skills/textkit-ref.md" [label="text layout,\nWriting Tools,\nTextKit migration"];
what -> "skills/pencilkit-paperkit.md" [label="drawing canvas,\nApple Pencil,\nPaperKit markup"];
what -> "skills/uikit-modernization.md" [label="scene lifecycle (required 27),\nresizable apps,\nsize classes"];
}
- シーンのライフサイクルの移行、「27 でアプリが起動しない」、サイズ変更可能性、サイズクラス、タブサイドバー? →
skills/uikit-modernization.md0b. iPhone ミラーリングでアプリの動作がおかしい(ジェスチャが反応しない、Face ID がブロックされる、レイアウトが縦向きのまま固定される)? →skills/uikit-modernization.md0c. iPhone Duo/折りたたみ式 iPhone(縦のバー、折り目、外側ディスプレイのウィンドウ要求)? → axiom-swiftui(skills/iphone-duo.md) - UIViewRepresentable/UIViewControllerRepresentable/UIHostingController? →
skills/uikit-bridging.md - 「Unable to simultaneously satisfy constraints」/レイアウトの不具合? →
skills/auto-layout-debugging.md2b. 状況に応じて適応するレイアウトを構築する(レイアウトガイド、サイズクラスの制約セット、コンポジション列の計算、自動サイズ調整セル)? →skills/adaptive-layout.md - CAAnimation の完了通知がない/スプリング物理が不正/アニメーションがカクつく? →
skills/uikit-animation-debugging.md - Combine パブリッシャー/AnyCancellable/@Published/Combine と async のブリッジ? →
skills/combine-patterns.md - TextKit 2/Writing Tools/TextEditor/TextKit 1 からの移行? →
skills/textkit-ref.md - PencilKit キャンバス/Apple Pencil/PaperKit のマークアップ? →
skills/pencilkit-paperkit.md - 純粋な SwiftUI ビューに関する質問(UIKit とのブリッジなし)? →
/skill axiom-swiftui - デザイン上の判断、HIG、Liquid Glass、SF Symbols、タイポグラフィ? →
/skill axiom-design - UIKit コールバックで保持サイクルを防ぐ? → axiom-performance を参照(
skills/objc-block-retain-cycles.md) - Combine サブスクリプションによるメモリリーク? → まず
skills/combine-patterns.mdを確認し、リークが続く場合は axiom-performance を参照
競合の解決
uikit と swiftui:UI コードを扱う場合:
- uikit を使用:UIKit を SwiftUI でラップする場合、または UIKit 固有の問題(Auto Layout、CAAnimation)をデバッグする場合
- swiftui を使用:純粋な SwiftUI ビュー、ナビゲーション、レイアウト、アニメーションの場合
uikit と concurrency:Combine が async/await と連携する場合:
- uikit を使用(
skills/combine-patterns.md):Combine パイプラインを async/await とブリッジする場合 - concurrency を使用:純粋な async/await パターン、アクター、Sendable の場合
uikit と performance:アニメーションやレイアウトがパフォーマンスの問題を引き起こす場合:
- まず uikit を試してください — アニメーションのカクつきの大半は、プロファイリングの問題ではなく、CATransaction のタイミングやレイヤーの状態が原因です
- アニメーションのロジックは正しいのに描画が遅い場合に限り、performance を使用してください
uikit と axiom-data:@Published プロパティがデータの永続化に関係する場合:
- uikit を使用:Combine パブリッシャーのパターンと @Published のライフサイクルの場合
- axiom-data を使用:SwiftData/Core Data のモデル層に関する問題の場合
もっともらしい理由付けを避ける
| 考え | 実際のところ |
|---|---|
| 「UIHostingController を使えばいいだけ。簡単だ」 | ホスティングには、サイズ調整、ライフサイクル、ナビゲーションに関するエッジケースがあります。よくある落とし穴については skills/uikit-bridging.md を参照してください。 |
| 「Auto Layout のエラーはただの警告だから、無視しよう」 | 制約が満たされないと、実行時に予測不能なレイアウトになります。今すぐ修正してください。 |
| 「CAAnimation の仕組みは分かっている」 | CAAnimation の不具合の 90% は Core Animation ではなく、CATransaction のタイミングが原因です。skills/uikit-animation-debugging.md を確認してください。 |
| 「Combine はもう使われていない。async/await で書き直せばいい」 | Combine に非推奨の告知はありません。動作中のパイプラインを書き直すのは時間の無駄です。移行するか維持するかについては skills/combine-patterns.md を参照してください。 |
| 「TextKit 1 は今でも問題なく使える」 | TextKit 1 は Writing Tools との統合に対応しておらず、Apple が修正しないことが分かっているレイアウトの不具合もあります。skills/textkit-ref.md を参照してください。 |
| 「cancellable をローカル変数に保存しよう」 | ローカル変数の AnyCancellable はすぐに解放され、サブスクリプションが終了します。 |
| 「描画を保存するために PKCanvasView をアーカイブしよう」 | ビューをアーカイブすると編集できなくなります。drawing.dataRepresentation() を永続化してください。skills/pencilkit-paperkit.md を参照してください。 |
| 「ツールピッカーが表示されない。API が壊れているに違いない」 | setVisible(_:forFirstResponder:) の後に、キャンバスで becomeFirstResponder() を呼び出す必要があります。skills/pencilkit-paperkit.md を参照してください。 |
呼び出し例
ユーザー:「UIKit のビューを SwiftUI でラップするにはどうすればよいですか?」
→ 読む:skills/uikit-bridging.md
ユーザー:「『Unable to simultaneously satisfy constraints』というエラーが発生します」
→ 読む:skills/auto-layout-debugging.md
ユーザー:「CAAnimation の完了ハンドラーがまったく呼び出されません」
→ 読む:skills/uikit-animation-debugging.md
ユーザー:「これには Combine と async/await のどちらを使うべきですか?」
→ 読む:skills/combine-patterns.md
ユーザー:「Writing Tools をテキストエディタに統合するにはどうすればよいですか?」
→ 読む:skills/textkit-ref.md
ユーザー:「ツールピッカーを使った Apple Pencil の描画キャンバスを追加するにはどうすればよいですか?」
→ 読む:skills/pencilkit-paperkit.md
ユーザー:「図形やテキストを使った PaperKit のマークアップキャンバスを追加するにはどうすればよいですか?」
→ 読む:skills/pencilkit-paperkit-ref.md
ユーザー:「SwiftUI のビューで、Combine のサブスクリプションによるメモリリークが発生しています」
→ 読む:skills/combine-patterns.md
ユーザー:「UIKit アプリに SwiftUI を埋め込むにはどうすればよいですか?」
→ 読む:skills/uikit-bridging.md
ユーザー:「画面サイズ変更のサポートについてアプリを監査してください」
→ resize-auditor エージェントを起動します(または /axiom:audit resize)
ユーザー:「カスタムのピンチジェスチャが、iPhone ミラーリングの実行中に動作しなくなります」
→ 読む:skills/uikit-modernization.md
ユーザー:「ウィンドウ幅に応じてコレクションビューの列数を変えるにはどうすればよいですか?」
→ 読む:skills/adaptive-layout.md