Screen Transition Diagram
フロントエンドコードベースを解析し、Mermaid形式の画面遷移図とイベント表を生成する。
ワークフロー
以下の5ステップで画面遷移図を構築する。
Step 1: フレームワーク・ルーティング方式の特定
package.json の依存関係とディレクトリ構成からフレームワークとルーティング方式を特定する。
検出手順:
package.jsonを読み、主要フレームワーク(React, Next.js, Vue, Nuxt, Angular, SvelteKit)を特定- ルーティングライブラリ(react-router-dom, vue-router 等)とバージョンを確認
- ファイルベースルーティング(Next.js App Router / Pages Router, SvelteKit, Nuxt)か設定ベースルーティング(React Router, Vue Router, Angular)かを判定
Step 2: 画面の列挙
フレームワークに応じた方法で全画面(ルート)を列挙し、各画面に短いIDを付与する。
ファイルベースルーティングの場合(Next.js, SvelteKit, Nuxt):
- ルーティングディレクトリを再帰的に走査
page.tsx/+page.svelte等のルートファイルを検出- ファイルパスからURLパスを導出
設定ベースルーティングの場合(React Router, Vue Router, Angular):
- ルート設定ファイル(
routes.tsx,router/index.ts等)を検索 <Route>,createBrowserRouter,routes配列等のルート定義を解析- ネストされたルートも含めて全パスを列挙
ID付与ルール:
- 各画面に
画面名の短いIDを付与(例:Login,Home,ProductDetail) - URLパスとIDの対応表を作成
- レイアウトルート(子ルートのラッパー)は画面として含めない
Step 3: 遷移イベントの追跡
各画面のコンポーネントコードを読み、他の画面への遷移を検出する。
検出対象:
| 種別 | パターン例 |
|---|---|
| 宣言的ナビゲーション | <Link to="...">, <router-link to="...">, <a routerLink="..."> |
| プログラム的ナビゲーション | navigate(), router.push(), router.navigate(), goto() |
| リダイレクト | <Navigate to="...">, redirect(), $router.replace() |
| フォーム送信後遷移 | onSubmit ハンドラ内の navigate() 等 |
記録する情報:
各遷移について以下を記録する:
- イベント番号:
E1,E2, ... の連番 - ソース画面: 遷移元の画面ID
- 宛先画面: 遷移先の画面ID
- トリガーイベント: ユーザー操作やイベント名(例: 「ログインボタン押下」「商品クリック」)
- ガード条件: 条件付き遷移の場合、その条件(Step 4で詳細化)
Step 4: ガード条件の特定
遷移に付随する条件(認証チェック、権限チェック等)を検出する。
検出対象:
| レベル | パターン例 |
|---|---|
| ルートレベルガード | Angular canActivate / canDeactivate, Vue beforeEnter / beforeEach, Next.js middleware.ts |
| コンポーネント内ガード | if (!isAuthenticated) navigate('/login'), useEffect 内のリダイレクト |
| HOC / ラッパー | <ProtectedRoute>, withAuth(), requireAuth() |
記録ルール:
- 簡潔なブール式で記録する(例:
isAuth,!isAdmin,cart.length > 0) - 条件が複雑な場合は要約する(例:
hasPermission('edit')→editPerm) - ガード条件がない遷移は空欄とする
Step 5: 出力の生成
収集した情報をもとに、イベント表 → Mermaid図 の順で出力を構築する。
完成例は references/output-example.md を参照すること。
イベント表
Markdown テーブルで出力する。
列構成:
| 列名 | 説明 |
|---|---|
# | イベント番号(E1, E2, ...) |
ソース | 遷移元の画面ID |
イベント | トリガーとなるユーザー操作やイベント |
ガード | 条件式(ガード条件が1件もない場合はこの列自体を省略) |
遷移先 | 遷移先の画面ID |
Mermaid 図
基本ルール:
- 方向:
flowchart TD(上から下) - 画面ノード: 角丸ノードを使用 →
ScreenId([画面名]) - 遷移矢印: イベント番号をラベルとして付与 →
Source -->|E1| Dest - 論理グループ: 関連する画面は
subgraphで囲む(例: 認証系、商品系) - 同一ソース・宛先で複数イベント: ラベルをカンマ区切りで結合 →
Source -->|E1, E2| Dest
Mermaid記法の注意点:
- ノードIDには英数字とアンダースコアのみ使用(日本語やハイフン不可)
- ラベル内に特殊文字(
(,),[,])を含む場合は"で囲む subgraphのタイトルに日本語を使う場合は["タイトル"]の形式を使用
エッジケース対応
| ケース | 対応方針 |
|---|---|
動的ルート /products/:id | 1つの画面として扱う(パラメータ部分は表記に含める) |
| モーダル / ダイアログ | ルート変更を伴う場合のみ画面として含める |
外部リンク (https://...) | 画面遷移図から除外する |
| 変数による動的遷移先 | 遷移先を [動的] と表記する |
| Catch-all / 404ページ | 1つの画面 NotFound として含める(個別の遷移矢印は不要) |
| ネストレイアウト | レイアウト自体は画面に含めず、子ルートのみを画面とする |
Resources
references/
output-example.md— ECサイトを題材にした完成例(Mermaid図 + イベント表)
