react-native について
Expo で TypeScript コードベースから React Native アプリを開発するためのスキルです。iOS、Android、Web を対象とし、ファイルベースルーティング、クラウドビルドと更新、カメラや通知などのネイティブ API を扱います。
主な機能
- 01Expo Router によるファイルベースルーティング
- 02EAS によるビルドと提出
- 03JavaScript の OTA 更新
- 04カメラ、通知、触覚機能の統合
- 05プラットフォーム差異とネイティブモジュールへの対応
活用シーン
- 01iOS と Android 向けアプリの開発
- 02Web 対応のユニバーサルアプリ構築
- 03アプリストア向けビルドと提出フローの設定
- 04カメラやプッシュ通知機能の追加
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ oakoss/ agent-skills --skill react-nativeインストール後、Claude Code で/react-nativeを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
references/app-configuration.mdcore-patterns.mddevice-apis.mdeas-workflows.mdexpo-router.mdnative-modules.mdnativewind.mdperformance-patterns.md詳細
React Native と Expo
概要
Expo は、単一の TypeScript コードベースから React Native を使用してユニバーサルなネイティブアプリを構築するためのオープンソースフレームワークです。ファイルベースのルーティング(Expo Router)、クラウドビルドサービス(EAS Build/Submit/Update)、デバイス API 用の豊富なネイティブモジュールを提供します。
使用するケース: iOS と Android を対象とするモバイルアプリ、Web に対応したユニバーサルアプリ、OTA アップデートが必要なプロジェクト、ネイティブのデバイス API(カメラ、通知、ハプティクス)を必要とするアプリ、ベアな React Native よりもマネージドなインフラストラクチャを好むチーム。
使用しないケース: Expo Modules API と互換性のない高度なカスタムネイティブコードが必要なアプリ、既存のネイティブアプリへのブラウンフィールド統合、ネイティブのみの CI/CD 要件があるアプリ。
クイックリファレンス
| パターン | API | 主なポイント |
|---|---|---|
| スタックナビゲーション | <Stack> from expo-router | ファイルベースで、_layout.tsx がナビゲーターを定義します |
| タブナビゲーション | <Tabs> from expo-router | (tabs) ディレクトリグループと _layout.tsx を使用します |
| ドロワーナビゲーション | <Drawer> from expo-router/drawer | @react-navigation/drawer が必要です |
| 型付きルート | href with /(group)/route | app.json で typed-routes を有効にします |
| 開発ビルド | expo-dev-client | カスタムネイティブコードと開発ツール |
| EAS Build | eas build --profile production | アプリストア向けのクラウドビルド |
| EAS Submit | eas submit -p ios / -p android | ストアへの自動提出 |
| OTA アップデート | eas update --branch production | JS のみのアップデートで、再ビルドは不要です |
| ネイティブモジュール | Expo Modules API | expo-module.config.json を使った Swift/Kotlin |
| プラットフォームコード | Platform.select() / .ios.tsx | プラットフォームごとのロジックまたはファイル全体 |
| スタイル付きリスト | FlatList / FlashList | 仮想化されており、keyExtractor が必要です |
| カメラ | expo-camera | useCameraPermissions() による権限管理 |
| 通知 | expo-notifications | getExpoPushTokenAsync() によるプッシュトークン |
| ハプティクス | expo-haptics | impactAsync、notificationAsync |
| Tailwind(RN) | NativeWind v4 | className プロパティで、RN に Tailwind CSS を使用します |
よくある間違い
| 間違い | 正しいパターン |
|---|---|
Expo Router ではなく react-navigation を直接使用する | Expo Router はファイルベースのルーティングで React Navigation をラップします |
ルートディレクトリに _layout.tsx を置き忘れる | ルートを含むすべてのディレクトリにレイアウトファイルが必要です |
カスタムネイティブコードに expo start を使用する | expo-dev-client とともに expo start --dev-client を使用します |
ネイティブ依存関係の変更後に eas update を実行する | ネイティブの変更には eas build が必要です。OTA は JS のみです |
if を使ってプラットフォームをハードコードで判定する | Platform.select() またはプラットフォーム固有のファイル拡張子を使用します |
| デバイス API にアクセスする前に権限を要求しない | カメラや通知を使用する前に、必ず権限を確認または要求します |
長いリストに ScrollView を使用する | 仮想化レンダリングには FlatList または FlashList を使用します |
| レンダー関数内でインラインスタイルを使う | コンポーネントの外で StyleSheet.create() を使ってスタイルを定義します |
FlatList に keyExtractor がない | リストを安定してレンダリングするため、必ず keyExtractor を指定します |
Expo が提供する API を react-native からインポートする | react-native の同等機能より expo-* パッケージを優先します |
委任
- パターンの発見:
Exploreエージェントを使用します - ビルド/デプロイのレビュー:
Taskエージェントを使用します - コードレビュー:
code-reviewerエージェントに委任します
react-patternsスキルが利用できる場合は、React コンポーネントのパターンとフックを委任します。tanstack-queryスキルが利用できる場合は、データ取得とキャッシュを委任します。zustandスキルが利用できる場合は、クライアント側の状態管理を委任します。vitest-testingスキルが利用できる場合は、ユニットテストとコンポーネントテストのパターンを委任します。tailwindスキルが利用できる場合は、Tailwind CSS のユーティリティパターンを委任します(NativeWind は Tailwind CSS の構文を使用します)。accessibilityスキルが利用できる場合は、モバイルのアクセシビリティパターンを委任します。