認証状態(AuthViewModel.authState)によって ContentView の表示先が分岐。
CreateRankingView は自前 NavigationStack を持たず、呼び出し元(MainTabView/MyPageView)が wrap する設計。
起動〜認証フロー
flowchart TD
Launch([起動]) --> ContentView{ContentView}
ContentView -- loading --> Splash[SplashView]
ContentView -- unauthenticated --> Login[LoginView]
ContentView -- needsSetup --> Setup[SetupProfileView]
ContentView -- authenticated --> Main[MainTabView]
Login -- Apple Sign In成功 --> Setup
Setup -- 初回設定完了 --> Main
メインタブ構成
flowchart LR
Main[MainTabView] --> THome[Tab: home]
Main --> TSearch[Tab: search]
Main --> TCreate[Tab: create]
Main --> TMypage[Tab: mypage]
Main --> TSettings[Tab: settings]
THome --> Home[HomeView]
TSearch --> Search[SearchView]
TCreate --> CreateNS[NavigationStack: CreateRanking]
TMypage --> MyPage[MyPageView]
TSettings --> Settings[SettingsView]
ホーム経路
flowchart TD
Home[HomeView
Active/Ended切替] --> Notif[NotificationListView]
Home --> Detail[RankingDetailView]
Detail -- hasQuiz=true --> Quiz[QuizGateView]
Quiz -- 全問正解 --> VoteRoute{投票モード}
Detail -- hasQuiz=false --> VoteRoute
VoteRoute -- single --> Vote[VoteView]
VoteRoute -- threePoint --> ThreeVote[ThreePointVoteView]
Vote --> Result[ResultView]
ThreeVote --> Result
Detail -- 期間終了かつ未投票かつ閲覧不可 --> Locked[ResultLockedView]
Detail -- 投票済 or 閲覧権限あり --> Result
ランキング作成フロー
flowchart LR
CreateNS[Tab: create] --> CR[CreateRankingView]
CR --> S1[Step1: 基本情報]
S1 --> S2[Step2: 選択肢]
S2 --> SQ{quiz付き?}
SQ -- yes --> SQuiz[StepQuiz: クイズ]
SQuiz --> S3[Step3: 期間/モード]
SQ -- no --> S3
S3 --> S4[Step4: プレビュー]
S4 -- 公開 --> Home
CR -. toolbar .-> Drafts[DraftListView]
Drafts -- 下書き選択 --> CR
マイページ・設定経路
flowchart TD
MyPage[MyPageView] --> Profile[ProfileView]
MyPage --> ChoiceRequests[ChoiceRequestsListView]
MyPage --> CR2[CreateRankingView
下書き編集]
Settings[SettingsView] --> Paywall[PaywallView]
Settings --> Feedback[FeedbackView]
Paywall --> PlanSelect[PaywallPlanSelectionView]
PlanSelect --> Purchase[PaywallPurchaseButton]
Purchase -- StoreKit成功 --> Settings
主要な遷移トリガー
| 起点画面 | 操作 | 遷移先 |
| ContentView | authState 変化 | Splash/Login/Setup/Main |
| HomeView | ランキングカード タップ | RankingDetailView |
| HomeView | 通知ベルアイコン | NotificationListView |
| RankingDetailView | 「投票する」(quiz無) | VoteView / ThreePointVoteView |
| RankingDetailView | 「投票する」(quiz有) | QuizGateView |
| QuizGateView | 全問正解 | 投票画面 |
| VoteView/ThreePointVoteView | 投票完了 | ResultView |
| SearchView | 検索結果カード | RankingDetailView |
| MyPageView | 下書き編集 | CreateRankingView(編集mode) |
| SettingsView | 「Pro版にアップグレード」 | PaywallView |
| SettingsView | 「フィードバック送信」 | FeedbackView |
画面ID対応表
| 画面ID | 画面名 | ファイル |
| RS-AUTH-01 | ログイン | Views/Shared/LoginView.swift |
| RS-AUTH-02 | 初期プロフィール設定 | Views/Shared/SetupProfileView.swift |
| RS-HOME-01 | ホーム | Views/Home/HomeView.swift |
| RS-HOME-02 | 通知一覧 | Views/Home/NotificationListView.swift |
| RS-VOTE-01 | ランキング詳細 | Views/Vote/RankingDetailView.swift |
| RS-VOTE-02 | シングル投票 | Views/Vote/VoteView.swift |
| RS-VOTE-03 | TOP3投票 | Views/Vote/ThreePointVoteView.swift |
| RS-VOTE-04 | 結果画面 | Views/Vote/ResultView.swift |
| RS-VOTE-05 | 結果ロック画面 | Views/Vote/ResultLockedView.swift |
| RS-VOTE-06 | クイズゲート | Views/Vote/QuizGateView.swift |
| RS-CR-01 | ランキング作成(統括) | Views/Ranking/CreateRankingView.swift |
| RS-CR-02〜05 | 作成ステップ1〜4 | Views/Ranking/Step*.swift |
| RS-CR-06 | 下書き一覧 | Views/Ranking/DraftListView.swift |
| RS-SEARCH-01 | 検索 | Views/Search/SearchView.swift |
| RS-PROFILE-01 | ユーザープロフィール | Views/Profile/ProfileView.swift |
| RS-MYPAGE-01 | マイページ | Views/MyPage/MyPageView.swift |
| RS-SET-01 | 設定 | Views/Settings/SettingsView.swift |
| RS-PAY-01〜05 | Paywall関連 | Views/Settings/Paywall*.swift |
変更履歴
| バージョン | 日付 | 変更内容 |
| 1.0 | 2026-05-09 | 初版作成(ソースコードからリバース) |