npx claudepluginhub caphtech/claude-marketplace --plugin mobile-pluginWant just this skill?
Then install: npx claudepluginhub u/[userId]/[slug]
iOSアプリのデザイン哲学とクリエイティブディレクション。Apple Human Interface Guidelinesに基づく Clarity/Deference/Depthの原則、SwiftUIによる実装パターン、アクセシビリティ設計を包括的にガイド。 使用タイミング: (1) 新規アプリのUI/UX設計時、(2) デザインシステム構築時、(3) SwiftUIコンポーネント設計時、 (4) 「iOSらしいデザインにしたい」「HIGに準拠したい」、(5) アクセシビリティ対応時、 (6) アニメーション・インタラクション設計時、(7) 複数プラットフォーム(iOS/iPadOS/watchOS/visionOS)対応時
This skill uses the workspace's default tool permissions.
references/accessibility-guide.mdreferences/platform-considerations.mdreferences/swiftui-patterns.mdreferences/visual-elements.mdiOS Design Philosophy & Creative Direction
Apple Human Interface Guidelinesに基づくiOSアプリデザインの哲学と実装ガイド。
ワークフロー
デザイン作業を開始する前に、以下の情報を確認する。
Step 1: 要件確認(必須)
以下をユーザーに確認:
-
ターゲットプラットフォーム
- iOS / iPadOS / watchOS / visionOS のどれか(複数可)
- 最小対応OSバージョン(例: iOS 15+, iOS 17+)
-
プロジェクトの性質
- 新規アプリ / 既存アプリの改修 / デザインシステム構築
- アプリのカテゴリ(生産性、エンターテイメント、ヘルスケア等)
-
既存資産の有無
- ブランドガイドライン(カラー、タイポグラフィ、ロゴ)
- 既存のデザインシステム / コンポーネントライブラリ
- Figma/Sketch等のデザインファイル
Step 2: 制約と優先事項の確認
-
アクセシビリティ要件
- 標準対応(WCAG AA)/ 高度な対応(WCAG AAA)
- 特定の要件(VoiceOver必須、高齢者向け等)
-
パフォーマンス制約
- ターゲットデバイス(最新機種のみ / 旧機種サポート)
- アニメーション許容度(リッチ / 軽量)
-
デザインの方向性
- システム標準に準拠 / カスタムブランド表現を重視
- ミニマル / リッチ・表現的
Step 3: 成果物の確認
何を作成するか確認:
- コンポーネント設計・実装
- 画面レイアウト設計
- デザイントークン定義
- アニメーション・トランジション設計
- アクセシビリティ対応の実装
- デザインレビュー・改善提案
確認完了後、以下のガイドラインを適用して作業を進める。
Core Design Philosophy (HIG)
三原則
| 原則 | 意味 | 実践 |
|---|---|---|
| Clarity | テキスト・アイコン・装飾の明瞭性 | 読みやすいフォント、意味のあるアイコン、機能的な装飾 |
| Deference | コンテンツを主役に | UIは控えめに、コンテンツを邪魔しない、流動的な動き |
| Depth | 視覚的階層で理解を促進 | レイヤー、リアルな動き、発見の喜び |
Creative Direction Framework
Visual Hierarchy
Primary → ユーザーの注目を集める要素(CTA、重要情報)
Secondary → 補助的情報(サブテキスト、メタデータ)
Tertiary → 背景・コンテナ要素
Emotional Design
- Delight: 予期せぬ楽しい瞬間を演出
- Trust: 一貫性と予測可能性で信頼構築
- Flow: 摩擦のない体験でタスク完了を支援
Key Visual Elements
Typography
| フォント | 用途 |
|---|---|
| SF Pro | iOS/macOSのシステムフォント |
| SF Compact | watchOS、小さいスペース |
| SF Mono | コード、等幅テキスト |
| New York | セリフ体、読み物コンテンツ |
// Dynamic Type対応
Text("Title")
.font(.largeTitle) // 自動的にDynamic Type対応
// カスタムフォントでもDynamic Type
@ScaledMetric var fontSize: CGFloat = 17
Text("Body").font(.system(size: fontSize))
Color
- Semantic Colors:
.primary,.secondary,.accentを使用 - Adaptive Colors: ライト/ダークモード自動対応
- High Contrast: アクセシビリティ設定に対応
// ✅ Semantic Color(推奨)
Text("Label").foregroundStyle(.primary)
Rectangle().fill(.background)
// ✅ Asset Catalogでダークモード対応
Color("BrandColor")
SF Symbols
// 基本
Image(systemName: "heart.fill")
// 可変シンボル
Image(systemName: "speaker.wave.3.fill")
.symbolVariableValue(0.7)
// レンダリングモード
Image(systemName: "cloud.sun.fill")
.symbolRenderingMode(.multicolor)
詳細は references/visual-elements.md を参照。
Interaction Patterns
Gestures
| ジェスチャー | 標準的な用途 |
|---|---|
| Tap | 選択・アクティベート |
| Long Press | コンテキストメニュー |
| Swipe | ナビゲーション・アクション |
| Pinch | ズーム |
| Rotate | 回転 |
Feedback
// Haptic Feedback
let generator = UIImpactFeedbackGenerator(style: .medium)
generator.impactOccurred()
// SwiftUIでのsensoryFeedback
Button("Tap") { }
.sensoryFeedback(.impact(weight: .medium), trigger: tapCount)
Navigation
- Tab Bar: メインナビゲーション(5項目以下)
- Navigation Stack: 階層的ドリルダウン
- Modal/Sheet: 一時的なタスク・詳細
Animation Philosophy
原則
- Purpose-driven: 意味のあるアニメーションのみ
- Physics-based: 自然な物理法則に従う
- Contextual timing: 操作に応じた適切な長さ
推奨タイミング
| 操作 | Duration |
|---|---|
| 軽い切り替え | 0.2-0.3秒 |
| 画面遷移 | 0.3-0.5秒 |
| 複雑なアニメーション | 0.5-0.8秒 |
// Spring Animation(推奨)
withAnimation(.spring(response: 0.3, dampingFraction: 0.7)) {
isExpanded.toggle()
}
// 明示的なタイミング
.animation(.easeInOut(duration: 0.25), value: selection)
詳細は references/swiftui-patterns.md を参照。
Platform Considerations
| Platform | 特徴 |
|---|---|
| iOS | タッチ中心、片手操作考慮、Safe Area |
| iPadOS | マルチタスク、ポインタ対応、サイズクラス |
| watchOS | グランス可能、Digital Crown、小画面 |
| visionOS | 空間UI、視線+ジェスチャー、奥行き |
詳細は references/platform-considerations.md を参照。
SwiftUI Implementation
Layout Patterns
// Adaptive Layout
ViewThatFits {
HStack { content } // 横に収まれば
VStack { content } // 縦にフォールバック
}
// Size Class対応
@Environment(\.horizontalSizeClass) var sizeClass
var body: some View {
if sizeClass == .compact {
CompactLayout()
} else {
RegularLayout()
}
}
Component Structure
struct FeatureCard: View {
let feature: Feature
var body: some View {
VStack(alignment: .leading, spacing: 12) {
// Icon
Image(systemName: feature.icon)
.font(.title)
.foregroundStyle(.accent)
// Title
Text(feature.title)
.font(.headline)
// Description
Text(feature.description)
.font(.subheadline)
.foregroundStyle(.secondary)
}
.padding()
.background(.regularMaterial)
.clipShape(RoundedRectangle(cornerRadius: 16))
}
}
Accessibility (必須)
基本対応
// VoiceOver
Button(action: save) {
Image(systemName: "square.and.arrow.down")
}
.accessibilityLabel("保存")
.accessibilityHint("現在の編集内容を保存します")
// Dynamic Type
Text("Body")
.dynamicTypeSize(...DynamicTypeSize.accessibility3)
// Color Contrast
// 4.5:1以上のコントラスト比を確保
チェックリスト
- すべてのインタラクティブ要素にaccessibilityLabelを設定
- Dynamic Typeで最大サイズでもレイアウトが崩れない
- 色のみに依存しない情報伝達
- タップターゲット44pt以上
- Reduce Motionへの対応
詳細は references/accessibility-guide.md を参照。
Performance in Design
60fps維持
- 複雑なシェイプは
drawingGroup()で最適化 - 大量の要素は
LazyVStack/LazyHGridを使用 - 重いビューは
taskで非同期初期化
Asset最適化
- 画像は適切なスケール(@2x, @3x)で用意
- SVGよりPDFベクターを優先(小さいアセット)
- 大きな画像は圧縮・リサイズ
Progressive Loading
AsyncImage(url: imageURL) { phase in
switch phase {
case .empty:
ProgressView()
case .success(let image):
image.resizable().aspectRatio(contentMode: .fit)
case .failure:
Image(systemName: "photo")
@unknown default:
EmptyView()
}
}
Design Tokens Example
enum DesignTokens {
enum Spacing {
static let xs: CGFloat = 4
static let sm: CGFloat = 8
static let md: CGFloat = 16
static let lg: CGFloat = 24
static let xl: CGFloat = 32
}
enum CornerRadius {
static let small: CGFloat = 8
static let medium: CGFloat = 12
static let large: CGFloat = 16
static let extraLarge: CGFloat = 24
}
enum Shadow {
static let subtle = ShadowStyle(color: .black.opacity(0.1), radius: 4, y: 2)
static let medium = ShadowStyle(color: .black.opacity(0.15), radius: 8, y: 4)
}
}
Critical Success Factors
- User-centered: ユーザーの課題解決を最優先
- Consistency: システム全体で一貫したパターン
- Iteration: テスト→フィードバック→改善のサイクル
- Accessibility: すべてのユーザーが使えるデザイン
- Platform Authenticity: 各プラットフォームの慣習に従う
Similar Skills
Expert guidance for Next.js Cache Components and Partial Prerendering (PPR). **PROACTIVE ACTIVATION**: Use this skill automatically when working in Next.js projects that have `cacheComponents: true` in their next.config.ts/next.config.js. When this config is detected, proactively apply Cache Components patterns and best practices to all React Server Component implementations. **DETECTION**: At the start of a session in a Next.js project, check for `cacheComponents: true` in next.config. If enabled, this skill's patterns should guide all component authoring, data fetching, and caching decisions. **USE CASES**: Implementing 'use cache' directive, configuring cache lifetimes with cacheLife(), tagging cached data with cacheTag(), invalidating caches with updateTag()/revalidateTag(), optimizing static vs dynamic content boundaries, debugging cache issues, and reviewing Cache Component implementations.
Creating algorithmic art using p5.js with seeded randomness and interactive parameter exploration. Use this when users request creating art using code, generative art, algorithmic art, flow fields, or particle systems. Create original algorithmic art rather than copying existing artists' work to avoid copyright violations.