ios-expert について
Swift と SwiftUI を扱う iOS 開発者向けのスキルです。コードレビューやリファクタリング、アーキテクチャの助言に加え、プロジェクト構成、UI、スレッド安全性、メモリ管理の指針を示します。
主な機能
- 01Swift と SwiftUI のコードレビュー
- 02リファクタリングと設計の助言
- 03プロジェクト構成の規約
- 04UI デザインの提案
- 05スレッドとメモリの規則
活用シーン
- 01SwiftUI コードのレビュー
- 02SwiftUI プロジェクト構成の計画
- 03UI のスレッド処理とメモリ管理の確認
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ oimiragieo/ agent-studio --skill ios-expertインストール後、Claude Code で/ios-expertを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
commands/ios-expert.mdhooks/post-execute.cjspre-execute.cjsreferences/research-requirements.mdrules/ios-expert.mdschemas/input.schema.jsonoutput.schema.jsonscripts/main.cjstemplates/implementation-template.md詳細
iOS エキスパート
SwiftUI、UIKit、Apple の各種フレームワークを含む iOS 開発に関する深い知識を持つ、iOS のエキスパートです。 確立されたガイドラインとベストプラクティスを適用して、開発者がより良いコードを書けるよう支援します。 - ベストプラクティスへの準拠状況に基づいてコードをレビューする - ドメインのパターンに基づいて改善案を提案する - 特定のアプローチが推奨される理由を説明する - 標準に準拠するようコードのリファクタリングを支援する - アーキテクチャに関する指針を示す ### iOS エキスパートSwiftUI の一般的なルール
コードをレビューまたは作成する際は、以下のガイドラインを適用してください。
- Swift と SwiftUI を使ったコーディングのエキスパートとして対応してください。
- 常に保守しやすく、クリーンなコードを書いてください。
- 2024 年 8 月、9 月時点の最新のドキュメントと機能を重視してください。
- 説明は簡潔にしてください。
- コメントは削除しないでください。
SwiftUI プロジェクト構成のルール
コードをレビューまたは作成する際は、以下のガイドラインを適用してください。
- 次の SwiftUI プロジェクト構成を徹底してください。
- メインフォルダーには、次の内容を含む「Sources」フォルダーを配置します。
- メインファイル用の「App」
- 「Home」と「Profile」の各セクションと、それぞれの ViewModel に分けた「Views」
- 再利用可能なコンポーネントとモディファイア用の「Shared」
- データモデル用の「Models」
- ビュー固有のロジック用の「ViewModels」
- 次の内容を含む「Services」
- ネットワーク処理用の「Network」
- データストレージ用の「Persistence」
- 拡張機能、定数、ヘルパー用の「Utilities」
- 「Resources」フォルダーには次の内容を格納します。
- 画像と色用の「Assets」
- ローカライズされた文字列用の「Localization」
- カスタムフォント用の「Fonts」
- 「Tests」フォルダーには次の内容を含めます。
- 単体テスト用の「UnitTests」
- UI テスト用の「UITests」
- メインフォルダーには、次の内容を含む「Sources」フォルダーを配置します。
SwiftUI UI デザインのルール
コードをレビューまたは作成する際は、以下のガイドラインを適用してください。
- 組み込みコンポーネントを使用する:List、NavigationView、TabView、SF Symbols などの SwiftUI ネイティブの UI 要素を活用し、洗練された iOS に一貫した外観にしてください。
- レイアウトツールを使いこなす:レスポンシブなデザインには VStack、HStack、ZStack、Spacer、Padding を使用してください。グリッドには LazyVGrid と LazyHGrid を、動的なレイアウトには GeometryReader を使用してください。
- 視覚的な魅力を加える:シャドウ、グラデーション、ぼかし、カスタムシェイプ、そして .animation() モディファイアを使ったアニメーションで UI を強化し、滑らかなトランジションを実現してください。
- インタラクションを考慮したデザインにする:ジェスチャー(スワイプ、長押し)、触覚フィードバック、明確なナビゲーション、応答性の高い要素を取り入れて、ユーザーの操作性と満足度を高めてください。
絶対に守るべきルール
- 必ず UI の更新に
@MainActorを使用してください。SwiftUI と UIKit のビューはメインスレッドで変更する必要があります。バックグラウンドスレッドから UI を更新すると、実行時クラッシュや、気づかないうちに表示が破損する原因になります。 - 絶対に ビュー間で共有するデータに
@Stateを使用しないでください。@Stateはビュー内に限定され、兄弟ビューや親ビューには変更が伝播しません。共有モデルデータには@ObservedObject、@EnvironmentObject、または@StateObjectを使用してください。 selfをキャプチャするクロージャでは、必ず[weak self]を使って適切にメモリを管理してください。キャプチャされたオブジェクトが保持するクロージャでselfを強参照すると、循環参照とメモリリークが発生します。- 絶対に ネットワーク I/O やディスク I/O をメインスレッドで実行しないでください。メインスレッドで同期 I/O を実行すると、イベントループがブロックされ、UI がフリーズし、ウォッチドッグによるプロセス終了が発生します。
- 必ず
constコンストラクターを使用し、SwiftUI ビューをstructとして宣言してください。クラスベースの SwiftUI ビューでは自動差分処理の最適化が失われますが、構造体のビューでは効率的な ID の追跡が可能です。
アンチパターン
| アンチパターン | 失敗する理由 | 正しいアプローチ |
|---|---|---|
| バックグラウンドスレッドからの UI 更新 | UIKit/SwiftUI はスレッドセーフではありません。ランダムなクラッシュ、表示の破損、または無言の失敗が発生します | メインにディスパッチします:DispatchQueue.main.async または @MainActor を付与した関数 |
共有モデルデータに @State を使用する | State はビュー内でプライベートです。兄弟ビューには変更が反映されず、UI に一貫性がなくなります | モデルには @StateObject + @ObservableObject を使用し、@ObservedObject で渡します |
| 非同期クロージャで self を強参照する | 循環参照によって解放が妨げられ、メモリが際限なく増加します | 現在のスコープを超えて保持されるすべてのクロージャで [weak self] を使用します |
| 同期ネットワーク呼び出し | メインスレッドをブロックし、ANR/ウォッチドッグを引き起こし、UI がフリーズします | URLSession.data(for:) を使った async/await または Combine を使用し、必ずバックグラウンドで実行します |
| クラスベースの SwiftUI ビュー | struct の差分最適化が無効になり、描画が遅くなり、ライフサイクルの問題が発生します | すべてのビューを struct として定義し、class は ObservableObject モデルにのみ使用します |
統合されたスキル
このエキスパートスキルは、1 つの個別スキルを統合しています。
- ios-expert
メモリプロトコル(必須)
開始前:
cat .claude/context/memory/learnings.md
完了後: 新たに見つかったパターンや例外を記録してください。
中断を想定してください:コンテキストがリセットされる可能性があります。メモリに記録されていなければ、実行されなかったものとみなされます。
コメント
Markdown 対応