jpskill.com
🛠️ 開発・MCP コミュニティ

mobile-app-developer

React NativeやFlutterを活用し、ネイティブアプリの性能と共通ロジックを両立させるクロスプラットフォーム開発を行うSkill。

📜 元の英語説明(参考)

Expert in cross-platform mobile development (React Native/Flutter), bridging native performance with shared business logic.

🇯🇵 日本人クリエイター向け解説

一言でいうと

React NativeやFlutterを活用し、ネイティブアプリの性能と共通ロジックを両立させるクロスプラットフォーム開発を行うSkill。

※ jpskill.com 編集部が日本のビジネス現場向けに補足した解説です。Skill本体の挙動とは独立した参考情報です。

⚠️ ダウンロード・利用は自己責任でお願いします。当サイトは内容・動作・安全性について責任を負いません。

🎯 このSkillでできること

下記の説明文を読むと、このSkillがあなたに何をしてくれるかが分かります。Claudeにこの分野の依頼をすると、自動で発動します。

📦 インストール方法 (3ステップ)

  1. 1. 上の「ダウンロード」ボタンを押して .skill ファイルを取得
  2. 2. ファイル名の拡張子を .skill から .zip に変えて展開(macは自動展開可)
  3. 3. 展開してできたフォルダを、ホームフォルダの .claude/skills/ に置く
    • · macOS / Linux: ~/.claude/skills/
    • · Windows: %USERPROFILE%\.claude\skills\

Claude Code を再起動すれば完了。「このSkillを使って…」と話しかけなくても、関連する依頼で自動的に呼び出されます。

詳しい使い方ガイドを見る →
最終更新
2026-05-17
取得日時
2026-05-17
同梱ファイル
1

📖 Skill本文(日本語訳)

※ 原文(英語/中国語)を Gemini で日本語化したものです。Claude 自身は原文を読みます。誤訳がある場合は原文をご確認ください。

[Skill 名] mobile-app-developer

モバイルアプリ開発者

目的

React NativeとFlutterに特化したクロスプラットフォームのモバイル開発の専門知識を提供します。オフラインファーストアーキテクチャ、ネイティブモジュール統合、iOSおよびAndroid向けに最適化されたデリバリーパイプラインを備えた高性能モバイルアプリケーションを構築します。

使用する場面

  • iOSとAndroidの両方をターゲットとする新しいモバイルアプリの構築
  • ウェブアプリケーションのモバイルへの移行 (React Native)
  • クロスプラットフォームアプリでの複雑なネイティブ機能 (Bluetooth、Biometrics、AR) の実装
  • アプリのパフォーマンス最適化 (起動時間、フレーム落ち、バンドルサイズ)
  • オフラインファーストのデータ同期レイヤーの設計
  • モバイルCI/CDパイプライン (Fastlane、EAS、Codemagic) のセットアップ


2. 意思決定フレームワーク

フレームワークの選択 (2026年標準)

プロジェクトに合うフレームワークはどれですか?
│
├─ **React Native (0.76+)**
│  ├─ チームはReactを知っていますか? → **はい** (最も迅速な立ち上げ)
│  ├─ OTAアップデートが必要ですか? → **はい** (Expo Updates / CodePush)
│  ├─ ヘビーなネイティブUIですか? → **おそらく** (New Architectureで容易になりますが、複雑です)
│  └─ エコシステムは? → **非常に大規模** (npm、豊富なライブラリサポート)
│
├─ **Flutter (3.24+)**
│  ├─ ピクセルパーフェクトが必要ですか? → **はい** (Skia/Impellerレンダリングが整合性を保証)
│  ├─ ヘビーなアニメーションですか? → **はい** (デフォルトで60/120fps)
│  ├─ デスクトップサポートが必要ですか? → **はい** (Windows/macOS/Linuxをファーストクラスでサポート)
│  └─ Dartの知識は? → **必須** (JS開発者にとっては学習曲線があります)
│
└─ **Expo (Managed RN)**
   ├─ 迅速なMVPが必要ですか? → **はい** (ゼロ設定、EAS Build)
   ├─ カスタムネイティブコードは? → **はい** (Config Pluginsが99%のケースに対応)
   └─ Ejectingは? → **いいえ** (Prebuildによりejectせずにネイティブコードを扱えます)

状態管理とアーキテクチャ

アーキテクチャ React Native Flutter 最適な用途
MVVM MobX / Legend-State Provider / Riverpod リアクティブUI、明確な分離
Redux-style Redux Toolkit / Zustand BLoC / Cubit 複雑なエンタープライズアプリ、厳格なフロー
Atomic Recoil / Jotai Riverpod きめ細かな更新、高性能
Offline-First WatermelonDB / Realm Hive / Isar / Drift 堅牢な同期が必要なアプリ

パフォーマンス制約

メトリック 目標 最適化戦略
コールドスタート < 1.5秒 Hermes (RN)、遅延読み込み、遅延初期化
フレームレート 60fps (最小) / 120fps (目標) メモ化、スレッド解放 (JS) vs UIスレッド、Impeller (Flutter)
バンドルサイズ < 30MB (ユニバーサル) ProGuard/R8、Split APKs、アセット最適化
メモリ < 200MB (平均) 画像キャッシュ、リストリサイクル (FlashList)

危険信号 → mobile-developer (ネイティブ) にエスカレートしてください:

  • カーネルレベルのドライバー連携の要件
  • アプリが単一の重い3Dビューの「ラッパー」である場合 (Unity統合の方が良いかもしれません)
  • アプリサイズが10MB未満という厳格な要件
  • プライベート/未公開のiOS APIへの依存


3. コアワークフロー

ワークフロー 1: React Native New Architecture セットアップ

目標: Fabric & TurboModules を使用して高性能なReact Nativeアプリを初期化します。

手順:

  1. 初期化 (Expo)

    npx create-expo-app@latest my-app -t default
    cd my-app
    npx expo install expo-router react-native-reanimated
  2. 設定 (app.json)

    {
      "expo": {
        "newArchEnabled": true,
        "plugins": [
          "expo-router",
          "expo-font",
          ["expo-build-properties", {
            "ios": { "newArchEnabled": true },
            "android": { "newArchEnabled": true }
          }]
        ]
      }
    }
  3. ディレクトリ構造 (ファイルベースルーティング)

    /app
      /_layout.tsx      # ルートレイアウト (Provider設定)
      /index.tsx        # ホーム画面
      /(tabs)/          # タブナビゲーショングループ
        /_layout.tsx    # タブ設定
        /home.tsx
        /settings.tsx
      /product/[id].tsx # 動的ルート
    /components         # UIコンポーネント
    /services           # APIとロジック
    /store              # 状態管理
  4. ナビゲーション実装

    // app/_layout.tsx
    import { Stack } from 'expo-router';
    import { QueryClientProvider } from '@tanstack/react-query';
    
    export default function RootLayout() {
      return (
        <QueryClientProvider client={queryClient}>
          <Stack screenOptions={{ headerShown: false }}>
            <Stack.Screen name="(tabs)" />
            <Stack.Screen name="modal" options={{ presentation: 'modal' }} />
          </Stack>
        </QueryClientProvider>
      );
    }


ワークフロー 3: パフォーマンス最適化 (FlashList)

目標: 10,000以上のリストアイテムを60fpsでレンダリングします。

手順:

  1. FlatListの置き換え

    import { FlashList } from "@shopify/flash-list";
    
    const MyList = ({ data }) => {
      return (
        <FlashList
          data={data}
          renderItem={({ item }) => <ListItem item={item} />}
          estimatedItemSize={100} // パフォーマンスにとって重要
          keyExtractor={item => item.id}
          onEndReached={loadMore}
          onEndReachedThreshold={0.5}
        />
      );
    };
  2. リストアイテムのメモ化

    const ListItem = React.memo(({ item }) => {
      return (
        <View style={styles.item}>
          <Text>{item.title}</Text>
        </View>
      );
    }, (prev, next) => prev.item.id === next.item.id);
  3. 画像最適化

    • expo-image を使用します (SDWebImage/Glideネイティブキャッシュを使用)。
    • cachePolicy="memory-disk" を有効にします。
    • スムーズな読み込みのために transition={200} を使用します。


4. パターンとテンプレート

パターン 1: ネイティブモジュール (Expo Config Plugin)

ユースケース: ejectせずにネイティブコードを追加します。

// plugins/withCustomNative.js
const { withAndroidManifest } = require('@expo/config-plugins');

const withCustomNative = (config) => {
  return withAndroidManifest(config, async (config) => {
    const androidMani
📜 原文 SKILL.md(Claudeが読む英語/中国語)を展開

Mobile App Developer

Purpose

Provides cross-platform mobile development expertise specializing in React Native and Flutter. Builds high-performance mobile applications with offline-first architectures, native module integration, and optimized delivery pipelines for iOS and Android.

When to Use

  • Building new mobile apps targeting both iOS and Android
  • Migrating web applications to mobile (React Native)
  • Implementing complex native features (Bluetooth, Biometrics, AR) in cross-platform apps
  • Optimizing app performance (startup time, frame drops, bundle size)
  • Designing offline-first data synchronization layers
  • Setting up mobile CI/CD pipelines (Fastlane, EAS, Codemagic)


2. Decision Framework

Framework Selection (2026 Standards)

Which framework fits the project?
│
├─ **React Native (0.76+)**
│  ├─ Team knows React? → **Yes** (Fastest ramp-up)
│  ├─ Need OTA Updates? → **Yes** (Expo Updates / CodePush)
│  ├─ Heavy Native UI? → **Maybe** (New Architecture makes this easier, but complex)
│  └─ Ecosystem? → **Massive** (npm, vast library support)
│
├─ **Flutter (3.24+)**
│  ├─ Pixel Perfection needed? → **Yes** (Skia/Impeller rendering guarantees consistency)
│  ├─ Heavy Animation? → **Yes** (60/120fps default)
│  ├─ Desktop support needed? → **Yes** (First-class Windows/macOS/Linux)
│  └─ Dart knowledge? → **Required** (Learning curve for JS devs)
│
└─ **Expo (Managed RN)**
   ├─ Rapid MVP? → **Yes** (Zero config, EAS Build)
   ├─ Custom Native Code? → **Yes** (Config Plugins handle 99% of cases)
   └─ Ejecting? → **No** (Prebuild allows native code without ejecting)

State Management & Architecture

Architecture React Native Flutter Best For
MVVM MobX / Legend-State Provider / Riverpod Reactive UI, clean separation
Redux-style Redux Toolkit / Zustand BLoC / Cubit Complex enterprise apps, strict flow
Atomic Recoil / Jotai Riverpod Fine-grained updates, high performance
Offline-First WatermelonDB / Realm Hive / Isar / Drift Apps needing robust sync

Performance Constraints

Metric Target Optimization Strategy
Cold Start < 1.5s Hermes (RN), Lazy Loading, Deferred initialization
Frame Rate 60fps (min) / 120fps (target) Memoization, release thread (JS) vs UI thread, Impeller (Flutter)
Bundle Size < 30MB (Universal) ProGuard/R8, Split APKs, Asset Optimization
Memory < 200MB (Avg) Image caching, List recycling (FlashList)

Red Flags → Escalate to mobile-developer (Native):

  • Requirements for kernel-level driver interaction
  • App is a "wrapper" around a single heavy 3D view (Unity integration might be better)
  • Strict requirement for < 10MB app size
  • Dependency on private/undocumented iOS APIs


3. Core Workflows

Workflow 1: React Native New Architecture Setup

Goal: Initialize a high-performance React Native app with Fabric & TurboModules.

Steps:

  1. Initialization (Expo)

    npx create-expo-app@latest my-app -t default
    cd my-app
    npx expo install expo-router react-native-reanimated
  2. Configuration (app.json)

    {
      "expo": {
        "newArchEnabled": true,
        "plugins": [
          "expo-router",
          "expo-font",
          ["expo-build-properties", {
            "ios": { "newArchEnabled": true },
            "android": { "newArchEnabled": true }
          }]
        ]
      }
    }
  3. Directory Structure (File-based Routing)

    /app
      /_layout.tsx      # Root layout (Provider setup)
      /index.tsx        # Home screen
      /(tabs)/          # Tab navigation group
        /_layout.tsx    # Tab configuration
        /home.tsx
        /settings.tsx
      /product/[id].tsx # Dynamic route
    /components         # UI Components
    /services           # API & Logic
    /store              # State Management
  4. Navigation Implementation

    // app/_layout.tsx
    import { Stack } from 'expo-router';
    import { QueryClientProvider } from '@tanstack/react-query';
    
    export default function RootLayout() {
      return (
        <QueryClientProvider client={queryClient}>
          <Stack screenOptions={{ headerShown: false }}>
            <Stack.Screen name="(tabs)" />
            <Stack.Screen name="modal" options={{ presentation: 'modal' }} />
          </Stack>
        </QueryClientProvider>
      );
    }


Workflow 3: Performance Optimization (FlashList)

Goal: Render 10,000+ list items at 60fps.

Steps:

  1. Replace FlatList

    import { FlashList } from "@shopify/flash-list";
    
    const MyList = ({ data }) => {
      return (
        <FlashList
          data={data}
          renderItem={({ item }) => <ListItem item={item} />}
          estimatedItemSize={100} // Critical for performance
          keyExtractor={item => item.id}
          onEndReached={loadMore}
          onEndReachedThreshold={0.5}
        />
      );
    };
  2. Memoize List Items

    const ListItem = React.memo(({ item }) => {
      return (
        <View style={styles.item}>
          <Text>{item.title}</Text>
        </View>
      );
    }, (prev, next) => prev.item.id === next.item.id);
  3. Image Optimization

    • Use expo-image (uses SDWebImage/Glide native caching).
    • Enable cachePolicy="memory-disk".
    • Use transition={200} for smooth loading.


4. Patterns & Templates

Pattern 1: Native Module (Expo Config Plugin)

Use case: Adding native code without ejecting.

// plugins/withCustomNative.js
const { withAndroidManifest } = require('@expo/config-plugins');

const withCustomNative = (config) => {
  return withAndroidManifest(config, async (config) => {
    const androidManifest = config.modResults;

    // Add permission
    androidManifest.manifest['uses-permission'].push({
      $: { 'android:name': 'android.permission.BLUETOOTH' }
    });

    return config;
  });
};

module.exports = withCustomNative;

Pattern 2: Biometric Authentication Hook

Use case: Secure login with FaceID/TouchID.

import * as LocalAuthentication from 'expo-local-authentication';

export function useBiometrics() {
  const authenticate = async () => {
    const hasHardware = await LocalAuthentication.hasHardwareAsync();
    if (!hasHardware) return false;

    const isEnrolled = await LocalAuthentication.isEnrolledAsync();
    if (!isEnrolled) return false;

    const result = await LocalAuthentication.authenticateAsync({
      promptMessage: 'Login with FaceID',
      fallbackLabel: 'Use Passcode',
    });

    return result.success;
  };

  return { authenticate };
}

Pattern 3: The "Smart" API Layer

Use case: Handling auth tokens, retries, and network errors gracefully.

import axios from 'axios';
import * as SecureStore from 'expo-secure-store';

const api = axios.create({ baseURL: 'https://api.example.com' });

api.interceptors.request.use(async (config) => {
  const token = await SecureStore.getItemAsync('auth_token');
  if (token) {
    config.headers.Authorization = `Bearer ${token}`;
  }
  return config;
});

api.interceptors.response.use(
  (response) => response,
  async (error) => {
    if (error.response?.status === 401) {
      // Trigger token refresh logic
      // If refresh fails, redirect to login
    }
    return Promise.reject(error);
  }
);


6. Integration Patterns

backend-developer:

  • Handoff: Backend provides OpenAPI (Swagger) spec → Mobile dev generates TypeScript clients (openapi-generator).
  • Collaboration: Designing "Mobile-First" APIs (pagination, partial responses, minimal payload).
  • Tools: Postman, GraphQL.

ui-designer:

  • Handoff: Designer provides Figma with Auto-Layout → Dev maps to Flexbox (flexDirection, justifyContent).
  • Collaboration: Exporting SVGs vs PNGs (use SVGs/VectorDrawable).
  • Tools: Zeplin, Figma Dev Mode.

qa-expert:

  • Handoff: Dev provides test builds (TestFlight/Firebase) → QA runs regression.
  • Collaboration: Providing test IDs for E2E automation (testID="login_btn").
  • Tools: Appium, Detox, Maestro.