画面遷移図とは、システムにどんな画面があり、どの操作でどの画面へ移るかを、箱と矢印で1枚にまとめた図です。 先に「画面一覧」という表を作り、その表から図を起こすと、画面の抜けや行き止まりを早い段階で見つけられます。

この記事では、画面ID・画面名・種別・遷移元・遷移先・認証要否を持つ画面一覧のテンプレートをMarkdownとCSVで用意し、架空の会員サイト12画面で記入します。さらに、その画面一覧CSVからMermaidのflowchartコードを作るPythonコードを載せ、分岐・エラー画面・モーダル・ログイン要否の書き分けまで、生成されたコードと一緒に示します。1画面の中の項目定義には触れず、画面と画面のつながりと一覧の管理に絞ります。

確認環境:Ubuntu 24.04、Python 3.11.15、@mermaid-js/mermaid-cli 11.14.0(同梱の Mermaid 11.14.0、Chromium で描画)。掲載した Mermaid のコードはすべてこの環境で SVG に描画できたものです。

画面遷移図の書き方の早見表

決めること 書き方 この記事でのMermaidの表し方
画面 画面IDと画面名を1つの箱に書く SCR010["SCR-010<br/>ログイン"]
遷移 矢印に「どの操作で移るか」を書く SCR001 -->|"ログインへ"| SCR010
分岐 操作の結果で行き先が変わるところに、ひし形を1つ挟む SCR010_J1{"ログイン"} から条件つきの矢印を出す
エラー画面 六角形にして、向かう線を点線にする SCR900{{"SCR-900<br/>エラー"}} と -.->
モーダル 画面の上に重なる小窓。二重枠の箱にする SCR111[["SCR-111<br/>保存確認モーダル"]]
完了画面 角の丸い箱にする SCR022(["SCR-022<br/>会員登録完了"])
ログイン要否 枠で囲んで2つの領域に分ける subgraph MEMBER["ログイン必要"] 〜 end
一覧との一致 図は画面一覧から作り、手で二重に直さない CSVからPythonで生成する

本記事の内容は、ご自由にお使いください。
ご利用の際は、出典として本ページへのリンクを記載いただけますようお願いします。

(記載例)出典:株式会社RJC「画面遷移図の書き方と例|Mermaidで作る手順と画面一覧テンプレート」

画面遷移図を作る5つの手順

図を先に描き始めず、表から始めるのが、あとで直しやすい作り方です。

手順 やること できあがるもの
1 利用者がやりたいこと(登録する、ログインする、情報を直す、退会する)を書き出す 機能の一覧
2 やりたいことごとに必要な画面を挙げ、画面IDを振る 画面一覧(ID・名前・種別)
3 各画面から「どの操作でどこへ行くか」を遷移先の列に書く 画面一覧(遷移先)
4 表を検査して、遷移先の書き間違いと、どこからも行けない画面を見つける 矛盾のない画面一覧
5 表から図を生成して、レビューで流れをたどる 画面遷移図

手順4と5をコードに任せると、表を直すだけで図も同じ内容に変わります。図と表を別々に手で直す作業がなくなり、レビューでは「流れが正しいか」に集中できます。

画面一覧のテンプレート(MarkdownとCSV)

列は6つです。まずは空のテンプレートです。

| 画面ID | 画面名 | 種別 | 遷移元 | 遷移先 | 認証要否 |
|---|---|---|---|---|---|
| SCR-000 | (画面名) | 通常 | (遷移元の画面ID) | (遷移先ID:操作) | 不要 |

表計算ソフトで管理するときは、次のCSVを貼り付けて使います。

画面ID,画面名,種別,遷移元,遷移先,認証要否
SCR-000,(画面名),通常,(遷移元の画面ID),(遷移先ID:操作),不要

各列の書き方は次のとおりです。

列 書くこと 書き方の決まり 例
画面ID 画面を一意に指す番号 接頭辞+3桁。機能ごとに番号帯を分け、間を空けておく SCR-010
画面名 利用者に見える画面の名前 画面のタイトルと同じ言葉にする ログイン
種別 画面の性質 通常/モーダル/完了/エラー の4つから選ぶ モーダル
遷移元 この画面へ来る画面のID セミコロン区切り。遷移先の列と食い違わないことを検査する SCR-001;SCR-011
遷移先 この画面から行ける画面と操作 「遷移先ID:操作」をセミコロン区切り。結果で行き先が変わるときは「遷移先ID:操作?条件」 SCR-100:ログイン?認証OK
認証要否 ログインが必要か 要/不要 要

番号帯の例です。間を空けて振ると、あとから画面を足しても並びが保てます。

番号帯 機能
001〜009 トップなど共通の入口
010〜019 ログイン・パスワード再設定
020〜029 会員登録
100〜199 ログイン後の画面
900〜999 エラーなど共通の画面

遷移元と遷移先は同じ情報を両側から書いたものです。両方を書いておくと、表の1行を読むだけで「この画面にどこから来て、どこへ行くか」がわかり、テストで確認する経路も数えやすくなります。食い違いはこのあとのコードで検査します。

記入例:会員サイト12画面の画面一覧

架空の会員サイトを題材に、12画面を記入しました。

画面ID 画面名 種別 遷移元 遷移先 認証要否
SCR-001 トップ 通常 SCR-022、SCR-121、SCR-900 SCR-010:ログインへ、SCR-020:新規登録へ 不要
SCR-010 ログイン 通常 SCR-001、SCR-010、SCR-011 SCR-100:ログイン?認証OK、SCR-010:ログイン?入力エラー、SCR-900:ログイン?システムエラー、SCR-011:パスワードを忘れた 不要
SCR-011 パスワード再設定 通常 SCR-010 SCR-010:再設定メール送信 不要
SCR-020 会員登録入力 通常 SCR-001、SCR-020、SCR-021 SCR-021:確認へ?入力OK、SCR-020:確認へ?入力エラー 不要
SCR-021 会員登録確認 通常 SCR-020 SCR-022:登録する?登録OK、SCR-900:登録する?システムエラー、SCR-020:修正する 不要
SCR-022 会員登録完了 完了 SCR-021 SCR-001:トップへ 不要
SCR-100 マイページ 通常 SCR-010、SCR-110、SCR-111、SCR-120 SCR-110:会員情報を編集、SCR-120:退会する 要
SCR-110 会員情報編集 通常 SCR-100、SCR-111 SCR-111:保存、SCR-100:キャンセル 要
SCR-111 保存確認モーダル モーダル SCR-110 SCR-100:はい、SCR-110:いいえ 要
SCR-120 退会確認モーダル モーダル SCR-100 SCR-121:退会する、SCR-100:やめる 要
SCR-121 退会完了 完了 SCR-120 SCR-001:トップへ 不要
SCR-900 エラー エラー SCR-010、SCR-021 SCR-001:トップへ 不要

同じ内容のCSVです。screens.csv という名前で保存します。

画面ID,画面名,種別,遷移元,遷移先,認証要否
SCR-001,トップ,通常,SCR-022;SCR-121;SCR-900,SCR-010:ログインへ;SCR-020:新規登録へ,不要
SCR-010,ログイン,通常,SCR-001;SCR-010;SCR-011,SCR-100:ログイン?認証OK;SCR-010:ログイン?入力エラー;SCR-900:ログイン?システムエラー;SCR-011:パスワードを忘れた,不要
SCR-011,パスワード再設定,通常,SCR-010,SCR-010:再設定メール送信,不要
SCR-020,会員登録入力,通常,SCR-001;SCR-020;SCR-021,SCR-021:確認へ?入力OK;SCR-020:確認へ?入力エラー,不要
SCR-021,会員登録確認,通常,SCR-020,SCR-022:登録する?登録OK;SCR-900:登録する?システムエラー;SCR-020:修正する,不要
SCR-022,会員登録完了,完了,SCR-021,SCR-001:トップへ,不要
SCR-100,マイページ,通常,SCR-010;SCR-110;SCR-111;SCR-120,SCR-110:会員情報を編集;SCR-120:退会する,要
SCR-110,会員情報編集,通常,SCR-100;SCR-111,SCR-111:保存;SCR-100:キャンセル,要
SCR-111,保存確認モーダル,モーダル,SCR-110,SCR-100:はい;SCR-110:いいえ,要
SCR-120,退会確認モーダル,モーダル,SCR-100,SCR-121:退会する;SCR-100:やめる,要
SCR-121,退会完了,完了,SCR-120,SCR-001:トップへ,不要
SCR-900,エラー,エラー,SCR-010;SCR-021,SCR-001:トップへ,不要

種別ごとの内訳は、通常7、モーダル2、完了2、エラー1です。ログイン画面の遷移先に SCR-010 自身があるのは、入力エラーのときに同じ画面へ戻ってメッセージを出すためです。

画面一覧CSVからMermaidのコードを作るPythonコード

標準ライブラリだけで動きます。csv2mermaid.py として screens.csv と同じフォルダに保存してください。

"""画面一覧CSVから Mermaid の flowchart と Markdown の表を作る。
使い方: python3 csv2mermaid.py screens.csv            (Mermaid を標準出力へ)
        python3 csv2mermaid.py screens.csv --table    (Markdown の表を標準出力へ)
"""
import csv
import sys

# 種別ごとのノードの形(Mermaid の括弧)とクラス名
SHAPES = {
    "通常": ('["', '"]', "normal"),
    "モーダル": ('[["', '"]]', "modal"),
    "完了": ('(["', '"])', "done"),
    "エラー": ('{{"', '"}}', "error"),
}
GROUPS = {"不要": ("PUBLIC", "ログイン不要"), "要": ("MEMBER", "ログイン必要")}


def nid(screen_id):
    """SCR-010 → SCR010(ノードIDにハイフンを入れない)"""
    return screen_id.replace("-", "")


def parse_targets(cell):
    """「SCR-100:ログイン?認証OK;SCR-011:パスワードを忘れた」を
    [(遷移先ID, 操作, 条件), ...] にする。条件が無ければ空文字。"""
    result = []
    for part in filter(None, (p.strip() for p in cell.split(";"))):
        target, _, label = part.partition(":")
        action, _, cond = label.partition("?")
        result.append((target.strip(), action.strip(), cond.strip()))
    return result


def load(path):
    with open(path, encoding="utf-8-sig", newline="") as f:
        return list(csv.DictReader(f))


def check(rows):
    """画面一覧の矛盾を文字列のリストで返す。空なら問題なし。"""
    errors = []
    ids = [r["画面ID"] for r in rows]
    for i in sorted({i for i in ids if ids.count(i) > 1}):
        errors.append(f"{i}: 画面IDが重複しています")
    incoming = {i: set() for i in ids}
    for r in rows:
        if r["種別"] not in SHAPES:
            errors.append(f"{r['画面ID']}: 種別「{r['種別']}」は定義されていません")
        if r["認証要否"] not in GROUPS:
            errors.append(f"{r['画面ID']}: 認証要否「{r['認証要否']}」は 要/不要 で書きます")
        for target, _, _ in parse_targets(r["遷移先"]):
            if target not in incoming:
                errors.append(f"{r['画面ID']}: 遷移先 {target} が画面一覧にありません")
            else:
                incoming[target].add(r["画面ID"])
    for r in rows:
        written = set(filter(None, (s.strip() for s in r["遷移元"].split(";"))))
        actual = incoming.get(r["画面ID"], set())
        for s in sorted(actual - written):
            errors.append(f"{r['画面ID']}: 遷移元に {s} が書かれていません")
        for s in sorted(written - actual):
            errors.append(f"{r['画面ID']}: 遷移元 {s} からの遷移が {s} の遷移先にありません")
        if not actual and r["画面ID"] != rows[0]["画面ID"]:
            errors.append(f"{r['画面ID']}: どの画面からも遷移できません")
    return errors


def to_mermaid(rows):
    kind = {r["画面ID"]: r["種別"] for r in rows}
    out = ["flowchart TD"]
    # 1) 認証要否ごとにサブグラフへ入れる。条件つきの操作は判定のひし形も同じ枠に置く
    judges = {}
    for key, (gid, title) in GROUPS.items():
        out.append(f'    subgraph {gid}["{title}"]')
        for r in rows:
            if r["認証要否"] != key:
                continue
            src = nid(r["画面ID"])
            left, right, cls = SHAPES[r["種別"]]
            label = f"{r['画面ID']}<br/>{r['画面名']}"
            out.append(f"        {src}{left}{label}{right}:::{cls}")
            for _, action, cond in parse_targets(r["遷移先"]):
                if cond and (src, action) not in judges:
                    count = sum(1 for s, _ in judges if s == src)
                    judges[(src, action)] = f"{src}_J{count + 1}"
                    out.append(f'        {judges[(src, action)]}{{"{action}"}}:::judge')
        out.append("    end")
    # 2) 遷移。エラー画面への線だけ点線にする
    for r in rows:
        src = nid(r["画面ID"])
        linked = set()
        for target, action, cond in parse_targets(r["遷移先"]):
            arrow = "-.->" if kind[target] == "エラー" else "-->"
            if not cond:
                out.append(f'    {src} {arrow}|"{action}"| {nid(target)}')
                continue
            judge = judges[(src, action)]
            if judge not in linked:
                linked.add(judge)
                out.append(f"    {src} --> {judge}")
            out.append(f'    {judge} {arrow}|"{cond}"| {nid(target)}')
    # 3) 種別ごとの色
    out += [
        "    classDef normal fill:#ffffff,stroke:#333333,color:#111111",
        "    classDef modal fill:#fff4d6,stroke:#b8860b,color:#111111",
        "    classDef done fill:#e3f4e1,stroke:#2e7d32,color:#111111",
        "    classDef error fill:#fde2e2,stroke:#c62828,color:#111111",
        "    classDef judge fill:#e8f0fe,stroke:#1a56b0,color:#111111",
    ]
    return "\n".join(out)


def to_table(rows):
    cols = list(rows[0].keys())
    lines = ["| " + " | ".join(cols) + " |", "|" + "---|" * len(cols)]
    for r in rows:
        cells = [r[c].replace(";", "、") for c in cols]
        lines.append("| " + " | ".join(cells) + " |")
    return "\n".join(lines)


if __name__ == "__main__":
    rows = load(sys.argv[1])
    problems = check(rows)
    if problems:
        print("\n".join(problems), file=sys.stderr)
        sys.exit(1)
    print(to_table(rows) if "--table" in sys.argv else to_mermaid(rows))

実行コマンドです。

python3 csv2mermaid.py screens.csv > flow.mmd

生成された flow.mmd の全文です(51行)。

flowchart TD
    subgraph PUBLIC["ログイン不要"]
        SCR001["SCR-001<br/>トップ"]:::normal
        SCR010["SCR-010<br/>ログイン"]:::normal
        SCR010_J1{"ログイン"}:::judge
        SCR011["SCR-011<br/>パスワード再設定"]:::normal
        SCR020["SCR-020<br/>会員登録入力"]:::normal
        SCR020_J1{"確認へ"}:::judge
        SCR021["SCR-021<br/>会員登録確認"]:::normal
        SCR021_J1{"登録する"}:::judge
        SCR022(["SCR-022<br/>会員登録完了"]):::done
        SCR121(["SCR-121<br/>退会完了"]):::done
        SCR900{{"SCR-900<br/>エラー"}}:::error
    end
    subgraph MEMBER["ログイン必要"]
        SCR100["SCR-100<br/>マイページ"]:::normal
        SCR110["SCR-110<br/>会員情報編集"]:::normal
        SCR111[["SCR-111<br/>保存確認モーダル"]]:::modal
        SCR120[["SCR-120<br/>退会確認モーダル"]]:::modal
    end
    SCR001 -->|"ログインへ"| SCR010
    SCR001 -->|"新規登録へ"| SCR020
    SCR010 --> SCR010_J1
    SCR010_J1 -->|"認証OK"| SCR100
    SCR010_J1 -->|"入力エラー"| SCR010
    SCR010_J1 -.->|"システムエラー"| SCR900
    SCR010 -->|"パスワードを忘れた"| SCR011
    SCR011 -->|"再設定メール送信"| SCR010
    SCR020 --> SCR020_J1
    SCR020_J1 -->|"入力OK"| SCR021
    SCR020_J1 -->|"入力エラー"| SCR020
    SCR021 --> SCR021_J1
    SCR021_J1 -->|"登録OK"| SCR022
    SCR021_J1 -.->|"システムエラー"| SCR900
    SCR021 -->|"修正する"| SCR020
    SCR022 -->|"トップへ"| SCR001
    SCR100 -->|"会員情報を編集"| SCR110
    SCR100 -->|"退会する"| SCR120
    SCR110 -->|"保存"| SCR111
    SCR110 -->|"キャンセル"| SCR100
    SCR111 -->|"はい"| SCR100
    SCR111 -->|"いいえ"| SCR110
    SCR120 -->|"退会する"| SCR121
    SCR120 -->|"やめる"| SCR100
    SCR121 -->|"トップへ"| SCR001
    SCR900 -->|"トップへ"| SCR001
    classDef normal fill:#ffffff,stroke:#333333,color:#111111
    classDef modal fill:#fff4d6,stroke:#b8860b,color:#111111
    classDef done fill:#e3f4e1,stroke:#2e7d32,color:#111111
    classDef error fill:#fde2e2,stroke:#c62828,color:#111111
    classDef judge fill:#e8f0fe,stroke:#1a56b0,color:#111111

このコードを mermaid-cli で描画すると、上に「ログイン不要」、左下に「ログイン必要」の枠ができ、12個の画面と3個のひし形が矢印でつながった図になります。

Markdownの表も同じCSVから出力できます。上の記入例の表は、このコマンドの出力をそのまま貼ったものです。

python3 csv2mermaid.py screens.csv --table

画面一覧の矛盾を見つける(検査の出力)

check() は、図を作る前に次の5点を調べます。

検査 見つかること
画面IDの重複 同じIDを2つの画面に振っている
種別・認証要否の値 決めた言葉以外が書かれている
遷移先の存在 一覧にない画面IDへ遷移している
遷移元と遷移先の一致 片方だけ直して、もう片方を直し忘れている
到達できるか どの画面からも遷移できない画面がある(先頭行の画面は入口として除く)

わざと3か所を書き換えたCSV(トップの遷移元から SCR-900 を削る、マイページの遷移先を SCR-115 にする、エラー画面の種別を「異常」にする)で実行した結果です。

python3 csv2mermaid.py bad.csv; echo "exit=$?"
SCR-100: 遷移先 SCR-115 が画面一覧にありません
SCR-900: 種別「異常」は定義されていません
SCR-001: 遷移元に SCR-900 が書かれていません
SCR-110: 遷移元 SCR-100 からの遷移が SCR-100 の遷移先にありません
exit=1

3か所の書き換えに対して4行が出ています。遷移先を SCR-115 に変えたことで、「SCR-115 が一覧にない」と「SCR-110 の遷移元に書かれた SCR-100 から実際には来ていない」の2つが見つかったためです。終了コードが1になるので、CIに組み込めば、矛盾のある画面一覧がそのまま取り込まれることを防げます。

分岐・エラー画面・モーダル・ログイン要否の書き分け

生成されたコードのうち、書き分けの部分だけを小さな図にして説明します。4つとも単独で描画できます。

分岐:操作の結果で行き先が変わるとき

CSVの遷移先に SCR-100:ログイン?認証OK;SCR-010:ログイン?入力エラー のように「操作?条件」を書くと、同じ操作がひし形1つにまとまります。

flowchart TD
    SCR010["SCR-010<br/>ログイン"]
    SCR100["SCR-100<br/>マイページ"]
    SCR010 --> J1{"ログイン"}
    J1 -->|"認証OK"| SCR100
    J1 -->|"入力エラー"| SCR010

矢印のラベルには「条件」を、ひし形には「操作」を書きます。 ひし形を挟まずに画面から2本の矢印を出すと、「ログイン」というラベルが2本に付いて、どちらが成功時かが読み取りにくくなります。

エラー画面:点線でつなぐ

エラー画面は多くの画面から線が集まります。エラー画面へ向かう線だけ点線(-.->)にすると、通常の流れと見分けがつきます。

flowchart TD
    SCR021["SCR-021<br/>会員登録確認"]
    SCR022(["SCR-022<br/>会員登録完了"])
    SCR900{{"SCR-900<br/>エラー"}}:::error
    SCR021 -->|"登録OK"| SCR022
    SCR021 -.->|"システムエラー"| SCR900
    classDef error fill:#fde2e2,stroke:#c62828,color:#111111

どの画面でも起こりうるエラー(通信が切れた、など)まで全部の画面から線を引くと、図が線で埋まります。画面一覧には「そのエラー画面へ移ると決めた操作」だけを書き、共通のエラーは図の外に一文で書いておくと読みやすくなります。

モーダル:二重枠の箱にする

モーダルは、元の画面の上に重なって表示される確認用の小窓です。URLが変わらないことが多く、ブラウザの「戻る」での動きも通常の画面と違うため、種別を分けて形を変えておくと、実装とテストで扱いを分けやすくなります。

flowchart TD
    SCR110["SCR-110<br/>会員情報編集"]
    SCR111[["SCR-111<br/>保存確認モーダル"]]:::modal
    SCR100["SCR-100<br/>マイページ"]
    SCR110 -->|"保存"| SCR111
    SCR111 -->|"はい"| SCR100
    SCR111 -->|"いいえ"| SCR110
    classDef modal fill:#fff4d6,stroke:#b8860b,color:#111111

ログイン要否:サブグラフで領域を分ける

subgraph で囲むと、ログインが必要な画面がひと目でわかります。枠をまたぐ矢印が「ログイン状態が変わる場所」なので、認証のチェックを入れる場所の確認にも使えます。

flowchart TD
    subgraph PUBLIC["ログイン不要"]
        SCR010["SCR-010<br/>ログイン"]
    end
    subgraph MEMBER["ログイン必要"]
        SCR100["SCR-100<br/>マイページ"]
        SCR110["SCR-110<br/>会員情報編集"]
    end
    SCR010 -->|"認証OK"| SCR100
    SCR100 -->|"会員情報を編集"| SCR110

記入例の12画面では、枠をまたぐ矢印は「ログインの認証OK → マイページ」と「退会確認モーダル → 退会完了」の2本です。ログイン状態が変わるのはこの2か所だけ、と図から読み取れます。

図として描画する(mermaid-cli)

画像ファイルにしたいときは mermaid-cli の mmdc コマンドを使います。

npm install -g @mermaid-js/mermaid-cli
mmdc -i flow.mmd -o flow.svg
Generating single mermaid chart

コンテナなど、ブラウザを自分で指定する環境では、設定ファイルを -p で渡します。今回は次の内容で描画しました(executablePath は Chromium の場所に合わせます)。

{"executablePath": "/path/to/chrome", "args": ["--no-sandbox"]}
mmdc -p puppeteer-config.json -i flow.mmd -o flow.svg

画面が増えても読みやすく保つコツ

困ること 手を入れる場所 やり方
線が交差して追いにくい 図の向き 1行目を flowchart LR に変えて横向きも試し、読みやすい方を選ぶ
1枚に入りきらない CSV 機能ごと(登録、マイページなど)にCSVを分け、機能ごとの図と全体の図を作る
「トップへ」の線が多い 画面一覧 ヘッダーのロゴのように全画面にある操作は、図の外に「全画面共通」と書いて線を省く
ラベルが長い 遷移先の列 操作はボタンの文言そのままにし、説明は別の列(備考)に書く
番号が足りなくなる 画面ID 番号帯を最初から広めに取り、10刻みで振る

列を足したいとき

画面一覧は、列を足すほど他の資料の入口として使えます。足しやすい列の例です。

足す列 使い道
URL(パス) ルーティングの定義と突き合わせる
権限 一般会員と管理者で見える画面を分ける
担当 画面ごとの担当者を決める
状態 設計中/レビュー済み/実装済み を管理する
備考 遷移の補足を書く

csv.DictReader は列名で値を取り出すので、列を足してもコードはそのまま動きます。

レビュー用チェックリスト

  • [ ] 画面IDが重複していない
  • [ ] 画面名が、画面に表示するタイトルと同じ言葉になっている
  • [ ] すべての画面に、入ってくる矢印と出ていく矢印がある(入口の画面を除く)
  • [ ] 入力がある画面に、入力エラーのときの行き先が書かれている
  • [ ] 登録・更新・削除の前に、確認の画面かモーダルがある
  • [ ] 完了画面から次に行ける先がある
  • [ ] エラー画面から戻る先がある
  • [ ] ログインが必要な画面が、すべて「ログイン必要」の枠に入っている
  • [ ] 枠をまたぐ矢印が、ログインとログアウト(退会)に当たる操作だけになっている
  • [ ] 検査のコードが終了コード0で終わる

よくある質問

Q. 画面遷移図と画面一覧は、どちらを先に作りますか? A. 画面一覧を先に作ります。表は行を足すだけで画面を増やせて、抜けにも気づきやすいからです。図は、表から生成して流れを確かめるために使います。

Q. Mermaidではフローチャートと状態遷移図のどちらで書きますか? A. この記事ではフローチャートを使いました。箱の形を種別ごとに変えられ、subgraph でログイン要否を囲めるので、画面一覧の列をそのまま図に写せます。

Q. モーダルやタブの切り替えも1画面として数えますか? A. 利用者に確認や入力を求めるモーダルは、画面IDを振って一覧に入れると、遷移の抜けが減ります。同じ画面の中で表示が切り替わるだけのタブは、画面一覧には入れず、その画面の設計書で扱うと一覧が増えすぎません。

Q. 図をExcelや表計算ソフトの画面一覧と一緒に管理できますか? A. できます。画面一覧をCSVで書き出し、この記事のコードに渡せば図になります。コードでは utf-8-sig で読んでいるので、先頭に BOM という目印が付いたCSVでも同じ結果になります。

まとめ

  • 画面遷移図は、画面一覧(表)から作ると、画面の抜けと行き止まりを早く見つけられる
  • 画面一覧の列は画面ID・画面名・種別・遷移元・遷移先・認証要否の6つから始める
  • 遷移先は「遷移先ID:操作?条件」の形で書くと、分岐のひし形までコードで生成できる
  • エラー画面は点線、モーダルは二重枠、完了は角丸、ログイン要否はサブグラフで書き分ける
  • 遷移元と遷移先の食い違いは検査のコードで見つけ、終了コードでCIに知らせる
  • 画面が増えたら、機能ごとにCSVを分けて機能別の図と全体の図を作る

本記事の内容は、ご自由にお使いください。
ご利用の際は、出典として本ページへのリンクを記載いただけますようお願いします。

(記載例)出典:株式会社RJC「画面遷移図の書き方と例|Mermaidで作る手順と画面一覧テンプレート」

株式会社RJC ― SI事業・SES事業・AI駆動開発。RJCは一緒に成長を楽しめる会社です。

WE ARE HIRING

RJCで一緒に開発しながら、
成長を楽しみませんか?

RJCは、Web・モバイル・AIを活用した開発プロジェクトで、テックリードやPM・PMOも活躍するシステム開発会社です。会社を知る、待遇を確かめる、話を聞いてみる。気になるところ見てみてください!

  • 127日年間休日
  • 12時間平均残業時間
  • 毎日ガチャ遊びココロも大切にする福利厚生。アマギフなどの賞品ラインナップ!

ほかにも、チケットレストラン、書籍読み放題、2年ごとの慰労報奨(休暇 or 金一封)、11期連続の黒字決算。

ABOUT RJC RJCがどんな会社か知る 考え方、研修、働き方、福利厚生、社員の前職まで。RJCのことが丸わかり! RJC丸わかりページへ JOB DESCRIPTION 仕事内容・待遇を見てみる 仕事内容、給与・待遇、選考の流れ。経験者も未経験も!応募前に知りたいこと、まとめました! 募集要項を見る ENTRY エントリーする エントリーは1〜2分・履歴書不要です。まずは話を聞いてみたい、という方でも歓迎です! エントリーフォームへ

RJCで一緒に開発しながら、 成長を楽しみませんか?