RORK LABEN
TOOLING — Rorkの開発者向けリポジトリが動き続けています。rork-xcodeが7月16日、rork-deviceが7月15日、rork-plistが7月13日に更新されましたOPUS46 — RorkでClaude Opus 4.6が稼働しています。Rork MaxはClaude Codeを土台にアプリを組み立てる設計ですSIM — ブラウザ上で動くクラウドのiOSシミュレータを備え、実機へのインストールは1クリック、App Storeへの提出は2クリックと案内されていますMAX — Rork MaxはReact Nativeではなく純粋なSwiftを出力します。iPhone・iPad・Apple Watch・Apple TV・Vision Pro、そしてiMessageまでが射程ですNATIVE — HealthKit、ARKitとLiDAR、NFC、Dynamic Island、Live Activities、Metalによる3D、Core MLのオンデバイス推論まで扱えますSEED — RorkはLeft Lane Capitalが主導する1,500万ドルのシードラウンドを実施し、Peak XVとa16z Speedrunが参加しましたTOOLING — Rorkの開発者向けリポジトリが動き続けています。rork-xcodeが7月16日、rork-deviceが7月15日、rork-plistが7月13日に更新されましたOPUS46 — RorkでClaude Opus 4.6が稼働しています。Rork MaxはClaude Codeを土台にアプリを組み立てる設計ですSIM — ブラウザ上で動くクラウドのiOSシミュレータを備え、実機へのインストールは1クリック、App Storeへの提出は2クリックと案内されていますMAX — Rork MaxはReact Nativeではなく純粋なSwiftを出力します。iPhone・iPad・Apple Watch・Apple TV・Vision Pro、そしてiMessageまでが射程ですNATIVE — HealthKit、ARKitとLiDAR、NFC、Dynamic Island、Live Activities、Metalによる3D、Core MLのオンデバイス推論まで扱えますSEED — RorkはLeft Lane Capitalが主導する1,500万ドルのシードラウンドを実施し、Peak XVとa16z Speedrunが参加しました
記事一覧/開発ツール
開発ツール/2026-03-10中級

RorkのReact Native + Expoアーキテクチャを深掘り解説

RorkがReact NativeとExpoをどのように活用してクロスプラットフォーム開発を実現するか学びます。

React Native209Expo149アーキテクチャ18クロスプラットフォーム7Rork515

RorkのReact Native + Expoアーキテクチャを深掘り解説

RorkはReact NativeとExpoフレームワークを使用してモバイルアプリケーションを構築しています。この組み合わせにより、開発者は1つのコードベースでiOSとAndroidの両方にデプロイできます。このアーキテクチャを理解することは、Rorkで高性能で保守しやすいアプリケーションを構築するための鍵です。

React Native + Expoを選ぶ理由

React Nativeはネイティブモバイルアプリケーションを構築するためにJavaScriptとReactを使用できます。iOSとAndroidそれぞれのプラットフォーム固有のコードを別々に書く代わりに、各プラットフォームでネイティブコードにコンパイルされるコンポーネントを書きます。

Expoはネイモバイルアプリケーション開発のワークフローを簡素化するためにReact Nativeの上に構築されたフレームワークです。ネイティブiOSおよびAndroid開発環境の複雑さを排除し、モバイルアプリケーション作成をWebデベロッパーに利用可能にします。

単一コードベースで複数プラットフォムに対応

React NativeとExpoの最大の利点の1つは、クロスプラットフォーム開発です。アプリケーションはiOSとAndroid両方で同じ機能を備えて動作します。

// 1つのコンポーネントが両方のプラットフォームで機能します
import { Text, View, StyleSheet } from 'react-native'
 
export default function App() {
  return (
    <View style={styles.container}>
      <Text style={styles.text}>Hello iOS and Android!</Text>
    </View>
  )
}
 
const styles = StyleSheet.create({
  container: {
    flex: 1,
    justifyContent: 'center',
    alignItems: 'center',
  },
  text: {
    fontSize: 18,
    fontWeight: 'bold',
  },
})

同じJavaScriptコードが各プラットフォームでネイティブUIコンポーネントとしてレンダリングされます。TextはiOSではUILabelになり、AndroidではTextViewになります。ButtonはiOSではUIButtonになり、Androidではandroid.widget.Buttonになります。

Expoマネージドワークフロー vs ベアワークフロー

Expoは2つの開発アプローチを提供します:マネージドワークフローとベアワークフローです。

マネージドワークフロー(Rork推奨)

マネージドワークフローでは、Expoがすべてのネイティブコードコンパイル、設定、デプロイメントを処理します。React Nativeコードを書き、以下のようなコマンドを実行します:

expo start
expo build:ios
expo build:android
eas submit --platform ios

Expoは複雑なネイティブレイヤーをあなたに代わって管理します。このアプローチはより高速に開発でき、iOS/Androidネイティブ開発の知識は必要ありません。

メリット:

  • ネイティブ開発環境のセットアップが不要
  • 迅速なイテレーションとテスト
  • 自動更新機能
  • シンプルなCI/CDパイプライン
  • ネイティブ専門知識がないチームに最適

制限:

  • メンテナンスされていないネイティブライブラリを使用できない
  • 最新のiOS/Androidフィーチャへのアクセスが初期段階では限定的
  • ビルド設定への制御が少ない

ベアワークフロー

ベアワークフローはネイティブコードの完全な制御を提供します。Expoから抜け出し、Android(Java/Kotlin)およびiOS(Swift/Objective-C)コードを直接管理します。

ベアワークフローの使用時機:

  • アプリが最先端のネイティブフィーチャを必要とする
  • Expoで利用できない特定のネイティブライブラリを使用する必要がある
  • チームにネイティブ開発の専門知識がある

Expo Go で即座テストする

開発中、Expo Goを使用して物理デバイスで即座にアプリをテストします。App StoreまたはGoogle PlayからExpo Goアプリをインストールし、以下を実行します:

expo start

QRコードをデバイスでスキャンすると、アプリが数秒でExpo Goに読み込まれます。コード変更を加えるとホットリロードを通じてデバイスに即座に反映されます。

このワークフローは開発中に物理デバイスシミュレータまたはエミュレータの必要性を排除し、イテレーション速度を劇的に高めます。

EAS: Expo Application Services

EASはアプリをApp StoreおよびGoogle Playにビルドして送信します。

EASでのビルド

eas build --platform ios
eas build --platform android

EASは:

  • React Nativeコードをネイティブバイナリにコンパイルします
  • コード署名とプロビジョニングプロファイルを処理します
  • .ipa(iOS)および .aab(Android)ファイルを生成します
  • Expoのインフラストラクチャで実行されます。ローカルネイティブツール不要

EASで送信する

eas submit --platform ios --latest
eas submit --platform android --latest

EASは自動化します:

  • App Store アップロードとメタデータ管理
  • Google Play Console 送信
  • バージョン番号付け
  • ビルド追跡と履歴

コンポーネント構造とアーキテクチャ

Rorkは整理されたきれいなコンポーネント構造を生成します。典型的なアプリアーキテクチャは以下のようです:

app/
├── screens/
│   ├── HomeScreen.js
│   ├── ProfileScreen.js
│   └── SettingsScreen.js
├── components/
│   ├── Header.js
│   ├── Card.js
│   └── Button.js
├── services/
│   ├── api.js
│   ├── auth.js
│   └── storage.js
├── context/
│   ├── AuthContext.js
│   └── ThemeContext.js
├── utils/
│   └── helpers.js
└── app.json

スクリーン

スクリーンはユーザーがナビゲートする全ページビューを表しています。各スクリーンは独自の状態とレイアウトを管理するReactコンポーネントです。

コンポーネント

複数のスクリーン全体で表示される再利用可能なUIコンポーネント。コンポーネントは小さく、焦点を絞ったものでテスト可能に保ちます。

サービス

API呼び出し、認証、ローカルストレージ、外部サービス統合を処理するビジネスロジックレイヤー。UIコンポーネントから分離されたサービスはテスト可能性と再利用性が向上します。

コンテキスト

React Context APIはユーザー認証ステータス、テーマ設定、言語設定など、グローバル状態を管理します。RorkはContext APIを、アプリ全体でアクセス可能にする必要がある状態に使用します。

// 例:グローバル認証状態のAuthContext
import { createContext, useState } from 'react'
 
export const AuthContext = createContext()
 
export function AuthProvider({ children }) {
  const [user, setUser] = useState(null)
  const [isLoading, setIsLoading] = useState(true)
 
  return (
    <AuthContext.Provider value={{ user, setUser, isLoading }}>
      {children}
    </AuthContext.Provider>
  )
}

状態管理

Rork生成アプリはReactのビルトインツールを状態管理に使用します:

  • useState: ローカルコンポーネント状態向け
  • useContext: グローバルアプリケーション状態向け(認証、テーマ、ユーザー設定)
  • useReducer: 個別スクリーンの複雑な状態ロジック向け

より大規模なアプリケーションでは、RorkはRedux、Zustand、その他の状態管理ライブラリを統合できます。

import { useContext } from 'react'
import { AuthContext } from './context/AuthContext'
 
export default function ProfileScreen() {
  const { user } = useContext(AuthContext)
 
  return (
    <View>
      <Text>Welcome, {user?.name}</Text>
    </View>
  )
}

Expo Router によるナビゲーション

Expo Router は Expo アプリの最新ナビゲーションソリューションです。Next.js に類似したファイルベースのルーティングシステムを使用し、ナビゲーションを直感的かつ構成的にしています。

app/
├── (tabs)/
│   ├── index.js      // Home tab
│   ├── explore.js    // Explore tab
│   └── profile.js    // Profile tab
├── auth/
│   ├── login.js
│   └── signup.js
└── [id].js           // Dynamic routes

スクリーンはファイル位置で定義されます。ナビゲーションは自動です:

import { Link } from 'expo-router'
import { Pressable, Text } from 'react-native'
 
export default function HomeScreen() {
  return (
    <Pressable>
      <Link href="/explore">
        <Text>Go to Explore</Text>
      </Link>
    </Pressable>
  )
}

RorkのAIがきれいなコードを生成する方法

RorkのAIはReact NativeおよびExpoアーキテクチャのベストプラクティスを理解しています。自然言語でアプリ要件を説明すると、AIは:

  1. ナビゲーション構造を計画: どのスクリーンとナビゲーションパターンが意味を持つかを判定
  2. コンポーネント階層を設計: UIを再利用可能なコンポーネントに分割
  3. サービスレイヤーを組織: バックエンド呼び出しとビジネスロジック用の適切なサービスを作成
  4. コンテキストと状態を設定: グローバル状態用にContext APIを実装
  5. イディオマティックなReact Nativeコードを書きます: プラットフォーム固有のAPI(Platform.select、プラットフォーム固有スタイル)を適切に使用

適切なアーキテクチャを生成するプロンプト例:

  • 「製品リスト、検索、ショッピングカート、チェックアウトを備えたeコマースアプリを作成」
  • 「ユーザープロファイルとメッセージング機能を備えたソーシャルメディアフィードを構築」
  • 「カテゴリと期限を備えたタスク管理アプリを作成」

AIはReact NativeおよびExpoベストプラクティスに従う完全で本番対応のコードを生成します。

パフォーマンスの考慮事項

レンダリングを最適化する

useMemouseCallback を使用して不要な再レンダリングを防ぎます:

import { useMemo, useCallback } from 'react'
 
export default function ProductList({ products, onSelect }) {
  const filteredProducts = useMemo(() => {
    return products.filter(p => p.available)
  }, [products])
 
  const handleSelect = useCallback((id) => {
    onSelect(id)
  }, [onSelect])
 
  return (
    // Render filteredProducts
  )
}

長いリストには FlatList を使用

大規模なリストの効率的なレンダリングに FlatList を使用します:

import { FlatList, Text, View } from 'react-native'
 
export default function UserList({ users }) {
  return (
    <FlatList
      data={users}
      keyExtractor={(item) => item.id}
      renderItem={({ item }) => <Text>{item.name}</Text>}
    />
  )
}

FlatListはリストアイテムを仮想化し、画面に表示されているアイテムのみをレンダリングします。

Rork でのデバッグ

Rork アプリは標準 React Native デバッグツールで動作します:

  • Chrome DevTools: JavaScript をデバッグしてネットワークリクエストを検査
  • React Native Debugger: コンポーネントツリーと状態を検査
  • Redux DevTools: Redux 使用時に状態変化を追跡
  • Expo のエラーオーバーレイ: アプリのエラーと警告を表示

全体を振り返って

RorkのReact Native + Expoアーキテクチャは、クロスプラットフォームモバイル開発への合理化されたパスを提供します。マネージドワークフローは複雑さを処理し、Expo Goは迅速なテストを可能にし、生成されたコードはコンポーネント、状態管理、ナビゲーションのベストプラクティスに従います。スタートアップのMVPを構築する場合でも本番アプリを構築する場合でも、このアーキテクチャはシンプルから複雑な要件までスケールします。

シェア

お読みいただきありがとうございます

Rork Lab は広告なしで運営しており、サーバー費用などの運営コストはメンバーシップのご支援で賄っています。実装コード・ベンチマーク・本番設計パターンなど、実務でお役立ていただける記事を毎日更新しています。もし読んでよかったと感じていただけましたら、ぜひご覧ください。

  • コピー&ペーストで使える実装コード付き
  • 毎日新しい上級ガイドを追加
  • ¥580/月 または ¥1,480 の永久アクセス
メンバーシップを見る →

もしこの記事がお役に立ちましたら、チップ(¥150)で応援いただけると大変励みになります。広告なしでの運営を続けるため、皆さまのご支援が大きな力になっています。

関連記事

開発ツール2026-07-15
「、」が行頭に落ちた — Rork が組んだ名言カードと日本語の禁則処理
React Native の Text は日本語の行頭禁則を保証しません。実測した違反率、WORD JOINER による事前結合の実装、onTextLayout での自動監査、Rork Max(SwiftUI)との挙動差までまとめました。
開発ツール2026-07-14
AI再生成に壊されない設計 — Rork の生成コードと手書きロジックを分ける境界の引き方
Rork へ追加指示を出すたびに手書きのロジックが消える。プロンプトで守るのは対症療法です。生成コードと自分の所有コードを層で分け、再生成が届かない境界を設計で引く方法を、Zustand と service 層の実装例つきでお伝えします。
開発ツール2026-07-10
React Compiler を Expo に入れて、手書き memo を 41 箇所消しました
Rork が生成した React Native 画面に React Compiler を導入し、再レンダリング回数を Profiler で実測しました。手書き memo/useCallback の削除判断、効かない箇所の見分け方、CI での回帰検知までをまとめています。
📚RECOMMENDED BOOKS
大規模言語モデル入門
山田育矢
LLM開発
生成AIプロンプトエンジニアリング入門
我妻幸長
プロンプト
Claude CodeによるAI駆動開発入門
平川知秀
AI駆動開発
※ アフィリエイトリンクを含みます
もっと見る →