mcpField
M
mobile-design

mobile-design

github.com/davila7デザイン・UI33.0k1.8k 回インストール1 日前に更新
リポジトリ

mobile-design について

Mobile Design System は、モバイルアプリを設計するチーム向けのスキルです。タッチ操作、パフォーマンス、アクセシビリティ、オフライン対応について、プラットフォーム別の指針や参考資料、監査スクリプトを提供します。

主な機能

  1. 01iOS と Android のデザイン指針
  2. 02タッチ領域とジェスチャーの原則
  3. 03React Native と Flutter の性能に関する助言
  4. 04オフライン、バックエンド、テストの指針
  5. 05プラットフォームとフレームワークの選定項目
  6. 06モバイル UX 監査スクリプト

活用シーン

  1. 01実装前のモバイルアプリ計画
  2. 02タッチ領域と操作フローの確認
  3. 03プラットフォームに合うナビゲーションの選択
  4. 04監査スクリプトによるモバイル UX の確認

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/davila7/claude-code-templates --skill mobile-design

インストール後、Claude Code で/mobile-designを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

decision-trees.md
mobile-backend.md
mobile-color-system.md
mobile-debugging.md
mobile-design-thinking.md
mobile-navigation.md
mobile-performance.md
mobile-testing.md
mobile-typography.md
platform-android.md
platform-ios.md
touch-psychology.md
scripts/
mobile_audit.py

詳細

モバイルデザインシステム

理念: タッチ優先。バッテリーに配慮。プラットフォームを尊重。オフラインで動作可能。 中核原則: モバイルは小さなデスクトップではありません。モバイルの制約を考慮し、プラットフォームの選択を確認してください。


🔧 ランタイムスクリプト

検証のためにこれらを実行してください(読むのではなく、そのまま実行します):

スクリプト目的使い方
scripts/mobile_audit.pyモバイル UX・タッチ監査python scripts/mobile_audit.py <project_path>

🔴 必須: 作業前に参照ファイルを読むこと!

⛔ 関連ファイルを読むまで開発を開始しないでください:

共通(常に読む)
ファイル内容ステータス
mobile-design-thinking.md⚠️ 暗記防止: 思考を促し、AI の既定パターンを防ぎます⬜ 最優先
touch-psychology.mdFitts の法則、ジェスチャー、ハプティクス、親指の届く範囲⬜ 重要
mobile-performance.mdRN/Flutter のパフォーマンス、60fps、メモリ⬜ 重要
mobile-backend.mdプッシュ通知、オフライン同期、モバイル API⬜ 重要
mobile-testing.mdテストピラミッド、E2E、プラットフォーム固有のテスト⬜ 重要
mobile-debugging.mdネイティブと JS のデバッグ、Flipper、Logcat⬜ 重要
mobile-navigation.mdタブ/スタック/ドロワー、ディープリンク⬜ 読む
mobile-typography.mdシステムフォント、Dynamic Type、アクセシビリティ⬜ 読む
mobile-color-system.mdOLED、ダークモード、バッテリー配慮⬜ 読む
decision-trees.mdフレームワーク/状態/ストレージの選択⬜ 読む

🧠 mobile-design-thinking.md が最優先です! このファイルにより、AI は暗記したパターンを使わずに考えるようになります。

プラットフォーム固有(対象に応じて読む)
プラットフォームファイル内容読むタイミング
iOSplatform-ios.mdHuman Interface Guidelines、SF Pro、SwiftUI パターンiPhone/iPad 向けに開発する場合
Androidplatform-android.mdMaterial Design 3、Roboto、Compose パターンAndroid 向けに開発する場合
クロスプラットフォーム上記bothプラットフォームの相違点React Native / Flutter

🔴 iOS 向けに開発する場合 → まず platform-ios.md を読んでください! 🔴 Android 向けに開発する場合 → まず platform-android.md を読んでください! 🔴 クロスプラットフォームの場合 → 両方を読み、条件付きのプラットフォーム分岐ロジックを適用してください!


⚠️ 重要: 前提を置く前に必ず確認すること(必須)

停止してください! ユーザーの依頼が自由形式の場合、お気に入りの選択肢を既定値として使わないでください。

指定がない場合は必ず確認すること:
項目確認内容理由
プラットフォーム「iOS、Android、それとも両方ですか?」すべての設計判断に影響します
フレームワーク「React Native、Flutter、それともネイティブですか?」パターンとツールが決まります
ナビゲーション「タブバー、ドロワー、それともスタックベースですか?」中核となる UX の判断です
状態管理「どの状態管理を使いますか?(Zustand/Redux/Riverpod/BLoC?)」アーキテクチャの基盤になります
オフライン「オフラインでも動作する必要がありますか?」データ戦略に影響します
対象デバイス「スマートフォンのみですか、それともタブレットにも対応しますか?」レイアウトの複雑さに影響します
⛔ AI モバイルのアンチパターン(YASAK LİSTESİ)

🚫 これらは必ず避けるべき AI の既定の傾向です!

パフォーマンスの禁止事項
❌ やってはいけないこと問題点✅ 必ずやること
長いリストに ScrollView を使うすべてのアイテムを描画するため、メモリが爆発的に増えるFlatList / FlashList / ListView.builder を使う
renderItem 関数をインラインで定義する毎回のレンダリングで新しい関数が作られ、全アイテムが再レンダリングされるuseCallback + React.memo を使う
keyExtractor を省略するインデックスベースのキーは並べ替え時にバグを引き起こすデータ由来の一意で安定したIDを使う
getItemLayout を省略するレイアウトが非同期になり、スクロールがカクつくアイテムの高さが固定の場合は提供する
どこでも setState() を使う不要なウィジェットの再構築が発生する状態のスコープを絞り、const コンストラクタを使う
Native driver を false にするアニメーションが JS スレッドにブロックされる常に useNativeDriver: true を使う
本番環境で console.log を使うJS スレッドを大きくブロックするリリースビルド前に削除する
React.memo / const を使わない何か変更があるたびに全アイテムが再レンダリングされるリストアイテムは必ずメモ化する
タッチ/UX の禁止事項
❌ やってはいけないこと問題点✅ 必ずやること
タッチターゲットが 44px 未満正確にタップできず、ユーザーが不満を感じる最小 44pt (iOS) / 48dp (Android)
ターゲット間の間隔が 8px 未満隣の要素を誤ってタップしてしまう最低 8〜12px の間隔を確保する
ジェスチャーのみの操作運動機能に障がいのあるユーザーが利用できない必ずボタンによる代替手段を用意する
ローディング状態がないユーザーはアプリがクラッシュしたと思う必ずローディングのフィードバックを表示する
エラー状態がないユーザーが行き詰まり、復旧する方法がないリトライオプション付きのエラーを表示する
オフライン処理がないネットワークが切断されるとクラッシュまたは停止する段階的に機能を縮退させ、キャッシュされたデータを使う
プラットフォームの慣習を無視するユーザーが混乱し、体に染みついた操作が崩れるiOS は iOS らしく、Android は Android らしくする
セキュリティの禁止事項
❌ やってはいけないこと問題点✅ 必ずやること
トークンを AsyncStorage に保存する容易にアクセスされ、root化された端末で盗まれるSecureStore / Keychain / EncryptedSharedPreferences を使う
API キーをハードコードするAPK/IPA からリバースエンジニアリングされる環境変数やセキュアストレージを使う
SSL ピンニングを省略するMITM 攻撃が可能になる本番環境では証明書をピン留めする
機密データをログに出力するログから抽出される可能性があるトークン、パスワード、PII は決してログに出力しない
アーキテクチャの禁止事項
❌ やってはいけないこと問題点✅ 必ずやること
UI にビジネスロジックを書くテストできず、保守もできないサービス層に分離する
すべてをグローバル状態で管理する不要な再レンダリングが発生し、複雑になる基本はローカル状態とし、必要な場合にのみ引き上げる
ディープリンクを後回しにする通知や共有が機能しなくなる初日からディープリンクを計画する
dispose/クリーンアップを省略するメモリリークやゾンビリスナーが発生する購読やタイマーをクリーンアップする

📱 プラットフォーム判断マトリクス

統一するか、分岐させるか
                    UNIFY (same on both)          DIVERGE (platform-specific)
                    ───────────────────           ──────────────────────────
Business Logic      ✅ Always                     -
Data Layer          ✅ Always                     -
Core Features       ✅ Always                     -
                    
Navigation          -                             ✅ iOS: edge swipe, Android: back button
Gestures            -                             ✅ Platform-native feel
Icons               -                             ✅ SF Symbols vs Material Icons
Date Pickers        -                             ✅ Native pickers feel right
Modals/Sheets       -                             ✅ iOS: bottom sheet vs Android: dialog
Typography          -                             ✅ SF Pro vs Roboto (or custom)
Error Dialogs       -                             ✅ Platform conventions for alerts
クイックリファレンス: プラットフォームの既定値
要素iOSAndroid
基本フォントSF Pro / SF CompactRoboto
最小タッチターゲット44pt × 44pt48dp × 48dp
戻る操作左端からのスワイプシステムの戻るボタン/ジェスチャー
下部タブのアイコンSF SymbolsMaterial Symbols
アクションシート下部から表示される UIActionSheetBottom Sheet / Dialog
進捗表示スピナーリニアプログレス (Material)
プルトゥリフレッシュネイティブの UIRefreshControlSwipeRefreshLayout

🧠 モバイル UX の心理学 (クイックリファレンス)

タッチ操作のためのフィッツの法則
Desktop: Cursor is precise (1px)
Mobile:  Finger is imprecise (~7mm contact area)

→ Touch targets MUST be 44-48px minimum
→ Important actions in THUMB ZONE (bottom of screen)
→ Destructive actions AWAY from easy reach
親指ゾーン (片手操作)
┌─────────────────────────────┐
│      HARD TO REACH          │ ← Navigation, menu, back
│        (stretch)            │
├─────────────────────────────┤
│      OK TO REACH            │ ← Secondary actions
│       (natural)             │
├─────────────────────────────┤
│      EASY TO REACH          │ ← PRIMARY CTAs, tab bar
│    (thumb's natural arc)    │ ← Main content interaction
└─────────────────────────────┘
        [  HOME  ]
モバイル特有の認知負荷
デスクトップモバイルとの違い
複数のウィンドウ一度に取り組むタスクは1つ
キーボードショートカットタッチジェスチャー
ホバー状態ホバーはなし (タップするか、何もない)
大きなビューポート限られたスペース、縦方向のスクロール
安定した注意力絶えず中断される

詳しくは: touch-psychology.md


⚡ パフォーマンスの原則 (クイックリファレンス)

React Native の重要ルール
// ✅ CORRECT: Memoized renderItem + React.memo wrapper
const ListItem = React.memo(({ item }: { item: Item }) => (
  <View style={styles.item}>
    <Text>{item.title}</Text>
  </View>
));

const renderItem = useCallback(
  ({ item }: { item: Item }) => <ListItem item={item} />,
  []
);

// ✅ CORRECT: FlatList with all optimizations
<FlatList
  data={items}
  renderItem={renderItem}
  keyExtractor={(item) => item.id}  // Stable ID, NOT index
  getItemLayout={(data, index) => ({
    length: ITEM_HEIGHT,
    offset: ITEM_HEIGHT * index,
    index,
  })}
  removeClippedSubviews={true}
  maxToRenderPerBatch={10}
  windowSize={5}
/>
Flutter の重要ルール
// ✅ CORRECT: const constructors prevent rebuilds
class MyWidget extends StatelessWidget {
  const MyWidget({super.key}); // CONST!

  @override
  Widget build(BuildContext context) {
    return const Column( // CONST!
      children: [
        Text('Static content'),
        MyConstantWidget(),
      ],
    );
  }
}

// ✅ CORRECT: Targeted state with ValueListenableBuilder
ValueListenableBuilder<int>(
  valueListenable: counter,
  builder: (context, value, child) => Text('$value'),
  child: const ExpensiveWidget(), // Won't rebuild!
)
アニメーションのパフォーマンス
GPU-accelerated (FAST):     CPU-bound (SLOW):
├── transform               ├── width, height
├── opacity                 ├── top, left, right, bottom
└── (use these ONLY)        ├── margin, padding
                            └── (AVOID animating these)

完全なガイドはこちら: mobile-performance.md


📝 チェックポイント(モバイル作業の前に必須)

モバイルコードを書く前に、必ずこのチェックポイントを完了してください:

🧠 CHECKPOINT:

Platform:   [ iOS / Android / Both ]
Framework:  [ React Native / Flutter / SwiftUI / Kotlin ]
Files Read: [ List the skill files you've read ]

3 Principles I Will Apply:
1. _______________
2. _______________
3. _______________

Anti-Patterns I Will Avoid:
1. _______________
2. _______________

例:

🧠 CHECKPOINT:

Platform:   iOS + Android (Cross-platform)
Framework:  React Native + Expo
Files Read: touch-psychology.md, mobile-performance.md, platform-ios.md, platform-android.md

3 Principles I Will Apply:
1. FlatList with React.memo + useCallback for all lists
2. 48px touch targets, thumb zone for primary CTAs
3. Platform-specific navigation (edge swipe iOS, back button Android)

Anti-Patterns I Will Avoid:
1. ScrollView for lists → FlatList
2. Inline renderItem → Memoized
3. AsyncStorage for tokens → SecureStore

🔴 チェックポイントを埋められませんか? → 戻ってスキルファイルを読んでください。


🔧 フレームワーク決定ツリー

WHAT ARE YOU BUILDING?
        │
        ├── Need OTA updates + rapid iteration + web team
        │   └── ✅ React Native + Expo
        │
        ├── Need pixel-perfect custom UI + performance critical
        │   └── ✅ Flutter
        │
        ├── Deep native features + single platform focus
        │   ├── iOS only → SwiftUI
        │   └── Android only → Kotlin + Jetpack Compose
        │
        ├── Existing RN codebase + new features
        │   └── ✅ React Native (bare workflow)
        │
        └── Enterprise + existing Flutter codebase
            └── ✅ Flutter

完全な決定ツリーはこちら: decision-trees.md


📋 開発前チェックリスト

モバイルプロジェクトを開始する前に
  • プラットフォームは確定していますか?(iOS / Android / 両方)
  • フレームワークは選定済みですか?(RN / Flutter / ネイティブ)
  • ナビゲーションパターンは決まっていますか?(タブ / スタック / ドロワー)
  • 状態管理は選定済みですか?(Zustand / Redux / Riverpod / BLoC)
  • オフラインの要件は把握していますか?
  • 初日からディープリンクを計画していますか?
  • 対象デバイスは定義されていますか?(スマートフォン / タブレット / 両方)
画面ごとに
  • タッチターゲットは 44〜48px 以上ですか?
  • 主要な CTA は親指の届く範囲にありますか?
  • 読み込み状態はありますか?
  • 再試行付きのエラー状態はありますか?
  • オフライン時の処理を考慮していますか?
  • プラットフォームの慣習に従っていますか?
リリース前
  • console.log は削除されていますか?
  • 機密データには SecureStore を使用していますか?
  • SSL ピンニングは有効ですか?
  • リストは最適化されていますか(memo、keyExtractor)?
  • アンマウント時のメモリクリーンアップはありますか?
  • 低スペックデバイスでテストしましたか?
  • すべてのインタラクティブな要素にアクセシビリティラベルがありますか?

📚 リファレンスファイル

特定の分野についてより詳しく知りたい場合:

ファイル使用するタイミング
mobile-design-thinking.md最初に読むこと! 暗記に頼らず、文脈に基づいて考えるためのガイド
touch-psychology.mdタッチ操作、Fitts の法則、ジェスチャー設計の理解
mobile-performance.mdRN / Flutter の最適化、60fps、メモリ / バッテリー
platform-ios.mdiOS 固有のデザイン、HIG への準拠
platform-android.mdAndroid 固有のデザイン、Material Design 3
mobile-navigation.mdナビゲーションパターン、ディープリンク
mobile-typography.mdタイプスケール、システムフォント、アクセシビリティ
mobile-color-system.mdOLED の最適化、ダークモード、バッテリー
decision-trees.mdフレームワーク、状態管理、ストレージの決定

覚えておいてください: モバイルユーザーはせっかちで、作業を中断されることが多く、小さな画面を不正確な指で操作しています。最悪の条件を想定して設計してください:不安定なネットワーク、片手操作、強い日差し、低いバッテリー残量。そこで動作すれば、どこでも動作します。

コメント