◉RORK LABEN
●GPT-6.1 SOL — Rork のモデルメニューに追加(09-29)。Low/Medium/High を選べ、Pro・Max に含まれます●SONNET 5.5 — UI づくりが得意で、Sonnet 5 より出力が速いモデルが選べます(09-28)●SDK 58 — Beta が 09/15 から。stable の案内はまだなく、Expo Go でのプロジェクト実行は 09/03 からログインが必要です●WIDGET — iOS のウィジェットが本番ビルドだけ真っ黒になる原因を追った報告が出ています●OBSERVE — EAS Observe がネイティブクラッシュも記録します(SDK 57.0.21 以降・10/07)●NEW — 起動広告が、背面から戻った回にしか出ていませんでした。「前面に戻った」合図が、…●GPT-6.1 SOL — Rork のモデルメニューに追加(09-29)。Low/Medium/High を選べ、Pro・Max に含まれます●SONNET 5.5 — UI づくりが得意で、Sonnet 5 より出力が速いモデルが選べます(09-28)●SDK 58 — Beta が 09/15 から。stable の案内はまだなく、Expo Go でのプロジェクト実行は 09/03 からログインが必要です●WIDGET — iOS のウィジェットが本番ビルドだけ真っ黒になる原因を追った報告が出ています●OBSERVE — EAS Observe がネイティブクラッシュも記録します(SDK 57.0.21 以降・10/07)●NEW — 起動広告が、背面から戻った回にしか出ていませんでした。「前面に戻った」合図が、…
記事一覧/開発ツール
⬡ 開発ツール/2026-03-27上級

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

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

Rork Max236ナビゲーション3Expo Router6React Navigation画面遷移ディープリンク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-14
Rork Maxでのディープリンク・ユニバーサルリンク実装 — 遅延ディープリンク、帰属追跡、グロース戦略
Rork Maxでディープリンク、ユニバーサルリンク、Androidのアプリリンクを実装し、遅延ディープリンクと帰属追跡でグロースにつなげる手法です。流入元がOrganicに潰れる問題への対処、紹介プログラムの構築、テストとQAまでを実装ベースで解説します。
⬡ 開発ツール2026-07-18
文字サイズ最大とドイツ語で、生成された画面は静かに詰まる — Rork Max の SwiftUI にレイアウト耐性の検証を通した記録
Rork Max が生成した SwiftUI 画面を疑似ローカライズと最大文字サイズに通し、どこから詰まるかを機械的に洗い出した記録です。ViewThatFits・ScaledMetric・layoutPriority の使いどころと、再生成のたびに回帰を捕まえるスナップショット検証を、実際の数値とともにまとめました。
⬡ 開発ツール2026-05-17
Rork Max の SwiftUI 機能を壁紙アプリ開発で検証した結果 — 実際に動いた機能と手を入れた機能
運用中の壁紙アプリの本番コードを基準に、Rork Max の SwiftUI ネイティブ生成を検証しました。そのまま使えた機能、手を入れた機能、生成を諦めた機能を、動くコードと実機での計測値とともにお伝えします。