· design / rfc / release

spec 1.8 リリース — 1 view に複数 seq を並べる

TL;DR

動機 — 「success と failure を見比べたい」

1 つのフローについて「正常系・異常系・キャンセル系」を別々の view に 書くと、レビュー時に複数タブを行き来しないと比較できません。 spec 1.7 までは 1 view = 1 シーケンス本体しか持てなかったため、 PM やインシデント担当者が「ハッピーパスとエラーパスを 1 枚に」と 言うたびに、participants をコピペした別 view を作る必要がありました。

spec 1.8 (RFC 0053) は、これを 「同じ view に複数の `seq` ブロックを書ける」で解消します。

構文

namespace ops

view report @sequence_diagram
  @intent("注文確定の主要パス・失敗パス・キャンセルを 1 枚に集約") {
  participants:
    Customer        as c,
    OrderService    as svc,
    OrderDao        as dao,
    OrderEntity     as ord,
    Notifier        as notify

  seq success {
    c   ->> svc : "confirm(orderId)"
    svc ->> dao : "save(order)"
    dao ->> ord : "insert"
    dao -.> svc : "Order"
    svc ->> notify : "OrderConfirmed"
    svc -.> c   : "ConfirmedOrder"
  }

  seq failure {
    c   ->> svc : "confirm(orderId)"
    svc ->> dao : "save(order)"
    dao -.> svc : "DBError"
    svc ->> notify : "alert(opsTeam)"
    svc -.> c   : "503 ServiceUnavailable"
  }

  seq cancel {
    c   ->> svc : "cancel(orderId)"
    svc ->> dao : "delete(orderId)"
    dao ->> ord : "remove"
    svc ->> notify : "OrderCancelled"
    svc -.> c   : "CancelAck"
  }
}

レンダリング結果

1 枚の SVG に 3 セクションが縦に積まれます。各セクションの上に « seq: success » / « seq: failure » / « seq: cancel » のヘッダ + 横点線。participants は view 全体で共有 (上下の箱は 1 セット、ライフラインは図の最下端まで縦に通る)。 ステップ番号は通し番号 (1〜16) で全シナリオを横断します。

report.png — success / failure / cancel の 3 セクションが縦に積まれた sequence_diagram

運用ルール

いつ複数 `seq` vs 別 view にすべきか

観点複数 `seq` を 1 view別 view
同じ participants が登場✅ ライフライン共有
別の participants 集合
対比して読ませたい✅ (success vs failure)
View Selector で個別フィルタ
1 ページに収めたい (印刷 / PR)

VS Code 0.9.0 への反映

後方互換性

IR には View.sequenceBodies?: SequenceBody[] SequenceBody.name?: string を追加しました。既存の View.sequenceBody?sequenceBodies[0] の alias として 残しているため、1.7 以前の IR コンシューマー (codegen / renderer / lint) は 無変更で動きます。1 ブロック・匿名 (seq { ... }) の SVG 出力は 1.7 と完全に同じ画素になります。

試す

# CLI
pnpm add -D @umlay/cli@^0.8.0
umlay render report.umlay --view report --out report.png --format png

# VS Code
code --install-extension Umlay.umlay   # 0.9.0 が降ってくる

完全な動作サンプルは packages/examples/samples/multi-seq-report.umlayに。RFC 0053 の議論は spec/rfcs/0053-multiple-seq-bodies.mdで読めます。

← ブログトップに戻る