mcpField
R
react-native-design

react-native-design

github.com/wshobsonデザイン・UI41.9k15.7k 回インストール2 週間前に更新
リポジトリ

react-native-design について

React Nativeでモバイルアプリを開発する人向けのガイドです。スタイル、ナビゲーション、アニメーション、プラットフォーム別レイアウトに加え、性能改善や問題解決の指針を扱います。

主な機能

  1. 01React Navigationのパターン
  2. 02Reanimated 3のアニメーション指針
  3. 03StyleSheetとstyled-componentsによるスタイル
  4. 04レスポンシブ・プラットフォーム別レイアウト
  5. 05ジェスチャー操作の指針
  6. 06性能改善と問題解決の助言

活用シーン

  1. 01クロスプラットフォームのReact Nativeアプリ開発
  2. 02型付きナビゲーションフローの追加
  3. 03高性能なアニメーションとジェスチャーの作成
  4. 04レイアウトや性能の問題調査

インストール

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

$npx skills add https://github.com/wshobson/agents --skill react-native-design

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

同梱ファイル

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

references/
details.md
navigation-patterns.md
reanimated-patterns.md
styling-patterns.md

詳細

React Native Design

React Native のスタイリングパターン、React Navigation、Reanimated 3 をマスターして、ネイティブ品質のユーザー体験を備えた高性能なクロスプラットフォームモバイルアプリケーションを構築しましょう。

このスキルを使用する場面

  • React Native でクロスプラットフォームモバイルアプリを構築する場合
  • React Navigation 6+ でナビゲーションを実装する場合
  • Reanimated 3 で高性能なアニメーションを作成する場合
  • StyleSheet と styled-components でコンポーネントをスタイリングする場合
  • さまざまな画面サイズに対応するレスポンシブレイアウトを構築する場合
  • プラットフォーム固有のデザイン(iOS/Android)を実装する場合
  • Gesture Handler でジェスチャー駆動のインタラクションを作成する場合
  • React Native のパフォーマンスを最適化する場合

詳細セクション: コアコンセプト

もともとこの SKILL.md にあった 6471 バイトのセクションです。Codex のスキル本文 8 KB の上限に収めるため、references/details.md に移動しました。

クイックスタートコンポーネント

import React from 'react';
import {
  View,
  Text,
  StyleSheet,
  Pressable,
  Image,
} from 'react-native';
import Animated, {
  useSharedValue,
  useAnimatedStyle,
  withSpring,
} from 'react-native-reanimated';

interface ItemCardProps {
  title: string;
  subtitle: string;
  imageUrl: string;
  onPress: () => void;
}

const AnimatedPressable = Animated.createAnimatedComponent(Pressable);

export function ItemCard({ title, subtitle, imageUrl, onPress }: ItemCardProps) {
  const scale = useSharedValue(1);

  const animatedStyle = useAnimatedStyle(() => ({
    transform: [{ scale: scale.value }],
  }));

  return (
    <AnimatedPressable
      style={[styles.card, animatedStyle]}
      onPress={onPress}
      onPressIn={() => { scale.value = withSpring(0.97); }}
      onPressOut={() => { scale.value = withSpring(1); }}
    >
      <Image source={{ uri: imageUrl }} style={styles.image} />
      <View style={styles.content}>
        <Text style={styles.title} numberOfLines={1}>
          {title}
        </Text>
        <Text style={styles.subtitle} numberOfLines={2}>
          {subtitle}
        </Text>
      </View>
    </AnimatedPressable>
  );
}

const styles = StyleSheet.create({
  card: {
    backgroundColor: '#ffffff',
    borderRadius: 16,
    overflow: 'hidden',
    shadowColor: '#000',
    shadowOffset: { width: 0, height: 2 },
    shadowOpacity: 0.1,
    shadowRadius: 8,
    elevation: 4,
  },
  image: {
    width: '100%',
    height: 160,
    backgroundColor: '#f3f4f6',
  },
  content: {
    padding: 16,
    gap: 4,
  },
  title: {
    fontSize: 18,
    fontWeight: '600',
    color: '#1f2937',
  },
  subtitle: {
    fontSize: 14,
    color: '#6b7280',
    lineHeight: 20,
  },
});

ベストプラクティス

  1. TypeScript を使用する: 型安全性のためにナビゲーションと props の型を定義します
  2. コンポーネントをメモ化する: React.memo と useCallback を使用して不要な再レンダリングを防ぎます
  3. UI スレッドでアニメーションを実行する: 60fps のアニメーションには Reanimated のワークレットを使用します
  4. インラインスタイルを避ける: パフォーマンスのために StyleSheet.create を使用します
  5. セーフエリアを処理する: SafeAreaView または useSafeAreaInsets を使用します
  6. 実機でテストする: シミュレーター/エミュレーターのパフォーマンスは実機とは異なります
  7. リストには FlatList を使用する: 長いリストで ScrollView と map を決して使用しないでください
  8. プラットフォーム固有のコード: iOS/Android の違いには Platform.select を使用します

よくある問題

  • ジェスチャーの競合: ジェスチャーを GestureDetector でラップし、simultaneousHandlers を使用します
  • ナビゲーションの型エラー: すべてのナビゲーターに ParamList 型を定義します
  • アニメーションのカクつき: runOnUI ワークレットでアニメーションを UI スレッドに移動します
  • メモリリーク: useEffect でアニメーションをキャンセルしクリーンアップします
  • フォントの読み込み: カスタムフォントには expo-font または react-native-asset を使用します
  • セーフエリアの問題: ノッチのあるデバイス(iPhone、切り欠きのある Android)でテストします

コメント