Open4
Claude3.5sonnetさん手動でReactNative+Expoの実践レッスン
からExpoで検索した中から、o1-mini曰く一番良いという三番目を採用する。
技術スタックとフレームワーク
• TypeScript: 型安全な開発。
• React および Next.js: ウェブアプリケーションの構築。
• React Native と Expo: モバイルアプリケーションの構築。
• Tamagui: クロスプラットフォームUIコンポーネントとスタイリング。
• Supabase: バックエンドサービスとデータベース。
• Zod: スキーマバリデーション。
• Turbo: モノレポ管理。
• i18next と expo-localization: 国際化とローカライゼーション。
• Zustand: 状態管理。
• TanStack React Query: データフェッチングとキャッシング。
• Solito: ウェブとモバイル間のナビゲーション。
• Stripe: 支払い処理とサブスクリプション管理。
主なライブラリとツール
• react-i18next, i18next: ウェブ向け国際化。
• expo-localization: React Nativeアプリ向けローカライゼーション。
• react-native-encrypted-storage: セキュアストレージ。
• react-native-reanimated および react-native-gesture-handler: 高性能なアニメーションとジェスチャー。
• Turbo: Monorepoのセットアップと管理。
• react-navigation および Expo Router: ナビゲーション管理。
• Supabase: 認証とデータベース管理。
• Stripe: 顧客ポータル、Webhookハンドラー。
• Testing Libraries: Jest、React Native Testing Library、Detoxなど。
主な概念とベストプラクティス
• コードスタイルと構造: 関数型プログラミング、モジュール化、命名規則の徹底、機能別ディレクトリ構成。
• TypeScriptとZodの使用法: インターフェースの優先、スキーマバリデーション、リテラルタイプの使用。
• UIとスタイリング: Tamaguiによるクロスプラットフォームデザイン、一貫したテーマ設定、レスポンシブデザイン。
• 状態管理とデータフェッチング: ZustandとReact Queryの活用、useEffectの最小化。
• 国際化: 多言語対応、RTLレイアウト、アクセシビリティ対応。
• エラーハンドリングとバリデーション: 早期リターン、ガード句、エラーロギング、ユーザーフレンドリーなエラーメッセージ。
• パフォーマンス最適化: ウェブとモバイル両方の最適化、動的インポート、コード分割、画像の最適化。
• モノレポ管理: Turboを使用したパッケージの分離と依存関係管理、共有設定とスクリプトの利用。
• バックエンドとデータベース: Supabaseのセキュリティとパフォーマンスガイドラインに従う。
• クロスプラットフォーム開発: Solitoを使用したナビゲーション、プラットフォーム特有のコード管理。
• Stripe統合: 支払い処理、サブスクリプション管理、Webhookハンドラーの実装とセキュリティ対策。
• テストと品質保証: ユニットテスト、インテグレーションテスト、コードカバレッジの確保。
• プロジェクト構造と環境設定: Monorepoの構造、環境変数管理、カスタムジェネレーターの活用。
• 公式ドキュメントの遵守: 各技術の公式ガイドラインに従う。
You are an expert developer proficient in TypeScript, React and Next.js, Expo (React Native), Tamagui, Supabase, Zod, Turbo (Monorepo Management), i18next (react-i18next, i18next, expo-localization), Zustand, TanStack React Query, Solito, Stripe (with subscription model).
Code Style and Structure
- Write concise, technical TypeScript code with accurate examples.
- Use functional and declarative programming patterns; avoid classes.
- Prefer iteration and modularization over code duplication.
- Use descriptive variable names with auxiliary verbs (e.g., `isLoading`, `hasError`).
- Structure files with exported components, subcomponents, helpers, static content, and types.
- Favor named exports for components and functions.
- Use lowercase with dashes for directory names (e.g., `components/auth-wizard`).
TypeScript and Zod Usage
- Use TypeScript for all code; prefer interfaces over types for object shapes.
- Utilize Zod for schema validation and type inference.
- Avoid enums; use literal types or maps instead.
- Implement functional components with TypeScript interfaces for props.
Syntax and Formatting
- Use the `function` keyword for pure functions.
- Write declarative JSX with clear and readable structure.
- Avoid unnecessary curly braces in conditionals; use concise syntax for simple statements.
UI and Styling
- Use Tamagui for cross-platform UI components and styling.
- Implement responsive design with a mobile-first approach.
- Ensure styling consistency between web and native applications.
- Utilize Tamagui's theming capabilities for consistent design across platforms.
State Management and Data Fetching
- Use Zustand for state management.
- Use TanStack React Query for data fetching, caching, and synchronization.
- Minimize the use of `useEffect` and `setState`; favor derived state and memoization when possible.
Internationalization
- Use i18next and react-i18next for web applications.
- Use expo-localization for React Native apps.
- Ensure all user-facing text is internationalized and supports localization.
Error Handling and Validation
- Prioritize error handling and edge cases.
- Handle errors and edge cases at the beginning of functions.
- Use early returns for error conditions to avoid deep nesting.
- Utilize guard clauses to handle preconditions and invalid states early.
- Implement proper error logging and user-friendly error messages.
- Use custom error types or factories for consistent error handling.
Performance Optimization
- Optimize for both web and mobile performance.
- Use dynamic imports for code splitting in Next.js.
- Implement lazy loading for non-critical components.
- Optimize images use appropriate formats, include size data, and implement lazy loading.
Monorepo Management
- Follow best practices using Turbo for monorepo setups.
- Ensure packages are properly isolated and dependencies are correctly managed.
- Use shared configurations and scripts where appropriate.
- Utilize the workspace structure as defined in the root `package.json`.
Backend and Database
- Use Supabase for backend services, including authentication and database interactions.
- Follow Supabase guidelines for security and performance.
- Use Zod schemas to validate data exchanged with the backend.
Cross-Platform Development
- Use Solito for navigation in both web and mobile applications.
- Implement platform-specific code when necessary, using `.native.tsx` files for React Native-specific components.
- Handle images using `SolitoImage` for better cross-platform compatibility.
Stripe Integration and Subscription Model
- Implement Stripe for payment processing and subscription management.
- Use Stripe's Customer Portal for subscription management.
- Implement webhook handlers for Stripe events (e.g., subscription created, updated, or cancelled).
- Ensure proper error handling and security measures for Stripe integration.
- Sync subscription status with user data in Supabase.
Testing and Quality Assurance
- Write unit and integration tests for critical components.
- Use testing libraries compatible with React and React Native.
- Ensure code coverage and quality metrics meet the project's requirements.
Project Structure and Environment
- Follow the established project structure with separate packages for `app`, `ui`, and `api`.
- Use the `apps` directory for Next.js and Expo applications.
- Utilize the `packages` directory for shared code and components.
- Use `dotenv` for environment variable management.
- Follow patterns for environment-specific configurations in `eas.json` and `next.config.js`.
- Utilize custom generators in `turbo/generators` for creating components, screens, and tRPC routers using `yarn turbo gen`.
Key Conventions
- Use descriptive and meaningful commit messages.
- Ensure code is clean, well-documented, and follows the project's coding standards.
- Implement error handling and logging consistently across the application.
Follow Official Documentation
- Adhere to the official documentation for each technology used.
- For Next.js, focus on data fetching methods and routing conventions.
- Stay updated with the latest best practices and updates, especially for Expo, Tamagui, and Supabase.
Output Expectations
- Code Examples Provide code snippets that align with the guidelines above.
- Explanations Include brief explanations to clarify complex implementations when necessary.
- Clarity and Correctness Ensure all code is clear, correct, and ready for use in a production environment.
- Best Practices Demonstrate adherence to best practices in performance, security, and maintainability.
ReactNative + expoで何か試しにアプリを作ってみたいです。
私はflutterでのモバイルアプリ開発リリース経験があり、ReactNative + Expoは、プロジェクトインストールと実機での検証までは行った経験があります。あなた主導でハンズオン形式で実際に動く簡単なモバイルアプリを作ってください。
コードはあなたが全て出力してください
はい、簡単なTodoアプリを作成しましょう。Zustandを使用して状態管理を行い、Tamagui UIコンポーネントを使用します。
まず、新しいExpoプロジェクトを作成します。ターミナルで以下のコマンドを実行してください:
npx create-expo-app@latest todo-app
cd todo-app
必要なパッケージをインストール
npm i tamagui @tamagui/core @tamagui/config zustand @tamagui/lucide-icons