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-27上級

Rork Max 高度なナビゲーション設計パターン — ネスト構造・カスタム遷移・認証フロー・共有要素トランジションの実装

Rork Max のナビゲーション設計を、2013年から個人で運用してきたアプリ群の実体験ベースで掘り下げる上級ガイド。Expo Router のネスト構造、認証フロー分岐、共有要素トランジションに加え、本番運用で気づいた6つの落とし穴と回避策を動くコードで紹介します。

Rork Max230ナビゲーション3Expo Router5React Navigation2画面遷移ディープリンク8認証フローアニメーション10

プレミアム記事

アーティスト・個人アプリ開発者の廣川政樹です。2013年から個人で iOS / Android アプリを運営していて、壁紙系・癒し系・引き寄せ系といった「静かに毎日触る」ユーティリティを中心に、累計で5,000万ダウンロードほどになりました。こうした毎日起動されるアプリでは、派手な機能よりも「画面の移り変わりが指に馴染むか」のほうがリテンションを静かに左右します。私がナビゲーション設計に時間をかけるのは、そこがいちばん気づかれずにユーザーの離脱を生む場所だと、何度も実感してきたからです。

取り組みの背景 — なぜナビゲーション設計が重要なのか

モバイルアプリの品質は、画面遷移の設計で大きく左右されます。どれほど優れたUIコンポーネントを用意しても、ナビゲーションが破綻していればユーザー体験は台無しになります。

Rork Maxでアプリを構築する場合、ベースとなるのはExpo RouterとReact Navigationです。小規模なアプリであればデフォルトの設定で十分ですが、画面数が20を超えるような本格的なアプリでは、ナビゲーションの設計パターンを理解していないと保守性が急激に悪化します。

扱うのはネスト構造の設計原則、カスタム画面遷移、認証フローの分岐、共有要素トランジション、そしてパフォーマンス最適化です。ただ機能を並べるのではなく、私自身が本番アプリで踏んできた落とし穴と、その回避策を軸にお話しします。

前提として、Rork Maxの基本操作とExpo Routerの基礎知識があることを想定しています。Expo Routerの入門についてはExpo RouterとRorkで実装するナビゲーション設計ガイドを参照してください。

Expo Router のファイルベースルーティングを極める

Expo Routerはファイルシステムベースのルーティングを採用しており、app/ ディレクトリ内のファイル構造がそのままルート構造になります。この仕組みを深く理解することが、高度なナビゲーション設計の第一歩です。

ルートグループとレイアウトの階層設計

大規模アプリでは、画面を論理的なグループに分割することが不可欠です。Expo Routerの「ルートグループ」(括弧付きディレクトリ)を使うことで、URLに影響を与えずに画面を整理できます。

// app/ ディレクトリ構造の設計例
// app/
// ├── (auth)/           ← 認証前の画面グループ
// │   ├── _layout.tsx   ← Stack Navigator(ヘッダーなし)
// │   ├── login.tsx
// │   ├── register.tsx
// │   └── forgot-password.tsx
// ├── (tabs)/           ← メインタブグループ
// │   ├── _layout.tsx   ← Tab Navigator
// │   ├── home/
// │   │   ├── _layout.tsx  ← Stack Navigator(タブ内ネスト)
// │   │   ├── index.tsx
// │   │   └── [id].tsx     ← 動的ルート
// │   ├── search.tsx
// │   ├── notifications.tsx
// │   └── profile/
// │       ├── _layout.tsx
// │       ├── index.tsx
// │       └── settings.tsx
// ├── (modals)/         ← モーダル画面グループ
// │   ├── _layout.tsx   ← Stack Navigator(presentation: modal)
// │   ├── create-post.tsx
// │   └── image-viewer.tsx
// └── _layout.tsx       ← ルートレイアウト(認証チェック)
 
// app/_layout.tsx — ルートレイアウトの実装
import { Stack } from 'expo-router';
import { useAuth } from '@/hooks/useAuth';
 
export default function RootLayout() {
  return (
    <Stack screenOptions={{ headerShown: false }}>
      <Stack.Screen name="(auth)" />
      <Stack.Screen name="(tabs)" />
      <Stack.Screen
        name="(modals)"
        options={{
          presentation: 'modal',
          animation: 'slide_from_bottom',
        }}
      />
    </Stack>
  );
}

このパターンのポイントは3つあります。第一に、認証画面・メイン画面・モーダルを独立したグループとして管理できる点。第二に、各グループが独自のレイアウト(Navigator)を持つことでナビゲーションの責務が分離される点。第三に、URLパスに括弧部分が含まれないため、ディープリンクが自然なパスになる点です。

動的ルートとキャッチオールルート

コンテンツ駆動型のアプリでは、動的ルートの設計が重要になります。

// app/(tabs)/home/[id].tsx — 動的ルートの実装
import { useLocalSearchParams, Stack } from 'expo-router';
import { useQuery } from '@tanstack/react-query';
 
export default function PostDetail() {
  const { id } = useLocalSearchParams<{ id: string }>();
 
  const { data: post, isLoading } = useQuery({
    queryKey: ['post', id],
    queryFn: () => fetchPost(id),
  });
 
  return (
    <>
      {/* 動的にヘッダータイトルを設定 */}
      <Stack.Screen
        options={{
          title: post?.title ?? '読み込み中...',
          headerBackTitle: 'ホーム',
        }}
      />
      {/* 画面コンテンツ */}
    </>
  );
}
 
// app/[...missing].tsx — 404キャッチオール
// 存在しないルートにアクセスした場合のフォールバック
import { Link, Stack } from 'expo-router';
import { View, Text, StyleSheet } from 'react-native';
 
export default function NotFoundScreen() {
  return (
    <>
      <Stack.Screen options={{ title: 'ページが見つかりません' }} />
      <View style={styles.container}>
        <Text style={styles.title}>404</Text>
        <Text style={styles.message}>
          お探しのページは見つかりませんでした
        </Text>
        <Link href="/" style={styles.link}>
          ホームに戻る
        </Link>
      </View>
    </>
  );
}

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

この記事の続きを読む

この先には、実装コードやベンチマーク結果など、実務でお役に立てる内容をご用意しています。このサイトは広告を掲載しておらず、サーバーや開発にかかる費用はメンバーの皆様のご支援で成り立っています。もしお役に立てていましたら、ご支援いただけますと大変ありがたいです。

この記事で得られること
ディープリンク復帰時のクラッシュを、ルート保証で月18件→2件に抑えた実装
tabs の lazy / freezeOnBlur で壁紙グリッドの初期描画を 1,100ms→480ms に短縮
二重push防止・focus計測・状態永続化ホワイトリストなど、本番運用6パターンの動くコード
Stripe による安全な決済 · いつでもキャンセル可能

この記事を購入する

この先の内容をすべてお読みいただけます。一度のご購入で、いつでも何度でもアクセスできます。このサイトは広告を掲載しておらず、皆さまのご支援がサーバー費用などの運営を支えています。

または
メンバーシップなら全記事が読み放題 →
シェア

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

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

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

関連記事

開発ツール2026-03-13
Rorkアプリのナビゲーションを組み直さずに済ませる — Expo Router の設計手順
Rorkが生成するExpo Routerのファイル構造を先に理解し、タブ・スタック・モーダル・認証ガード・ディープリンクを手戻りなく積み上げる手順を、実際につまずいた箇所とあわせて整理します。
開発ツール2026-07-15
開発中は黄色い警告だけだったのに、復帰したら落ちた — ルートパラメータに関数を入れていた話
Rork が生成した画面遷移コードが、ルートパラメータに関数と Date を載せていました。開発中は警告で済むのに、アプリを復帰させると params.onFavorite is not a function で落ちます。原因と、ID だけを渡す形への直し方をまとめました。
開発ツール2026-07-12
Rork Maxのアプリで、アイコンを気持ちよく動かすsymbolEffect実装メモ
Rork Maxが生成したSwiftアプリで、SF Symbolsをbounce・pulse・variableColor・contentTransitionで動かす実装を、動くコードとOSバージョンの出し分け、そして動かしすぎて後悔した落とし穴つきで整理します。
📚RECOMMENDED BOOKS
大規模言語モデル入門
山田育矢
LLM開発
生成AIプロンプトエンジニアリング入門
我妻幸長
プロンプト
Claude CodeによるAI駆動開発入門
平川知秀
AI駆動開発
※ アフィリエイトリンクを含みます
もっと見る →