テキストだけでスイムレーン図を記述するための小さな言語です。人にもAIにも書きやすいよう、行指向でシンプルに設計しています。座標は自動レイアウトされるので、構造(誰が・何を・どの順で)だけを書けば図になります。
1行に1要素。lane(レーン)→ ノード → ->(矢印)の順に書くのが基本です。
# レーン(横帯 = 担当者/部門) lane 顧客 #4f9cf9 lane 店員 #22c55e # ノード: <id> <種類> "ラベル" @レーン名 a start "来店" @顧客 b task "注文を受ける" @店員 c start "商品を渡す" @店員 # 矢印: from -> to [: ラベル] a -> b b -> c
下のプレイグラウンドに貼り付けて試せます。
| 要素 | 書式 | 説明 |
|---|---|---|
| タイトル | title "..." | 図のタイトル(任意) |
| レーン | lane <名前> [#色] | 横帯。担当者・部門など。色は省略可(自動配色) |
| フェーズ | phase <名前> @<開始ノードID> | 縦の工程区切り(任意)。開始ノードの列から次フェーズ手前までを覆う |
| ノード | <id> [種類] "ラベル" @<レーン> | 処理。種類省略時は task |
| 矢印 | <from> -> <to> [: ラベル] | ノードIDどうしを接続 |
| コメント | # ... / // ... | 行頭のみ。無視される |
| 種類 | 形 | 用途 |
|---|---|---|
start | 角丸(端子) | 開始 / 終了 |
task | 長方形 | 処理・作業(既定) |
decision | ひし形 | 条件分岐 |
io | 平行四辺形 | 入力 / 出力 |
id は空白なしの一意な識別子(例 a, n1, review)id は定義済みであること# を含む場合は "二重引用符" で囲む@レーン は定義済みのレーン名を指すphase の @ は定義済みのノードIDを指す(その列〜次フェーズ手前を覆う=範囲が一意に決まる)lane "カスタマー サポート" #06b6d4 n1 task "一次対応を行う" @"カスタマー サポート"
program = { line } ;
line = title | lane | phase | node | edge | comment | empty ;
title = "title" , string ;
lane = "lane" , name , [ color ] ;
phase = "phase" , name , "@" , id ; (* id = 開始ノード *)
node = id , [ type ] , string , "@" , name ;
edge = id , "->" , id , [ ":" , text ] ;
comment = ("#" | "//") , text ;
type = "start" | "task" | "decision" | "io" ;
name = bareword | string ; (* 空白や # を含むなら string *)
string = '"' , { char } , '"' ;
color = "#" , hex{3..8} ;
id = bareword ; (* 空白なし・一意 *)
このブロックをそのままシステムプロンプト等に貼り付ければ、AI が正しい DSL を出力できます。
あなたはスイムレーン図を「Swimlane DSL」で出力するアシスタントです。 次の規則に厳密に従い、DSL のコードブロックだけを出力してください。 # 構文(1行1要素) - title "図のタイトル" … 任意 - lane <レーン名> [#色] … 担当者/部門。最初に列挙する - phase <フェーズ名> @<開始ノードID> … 縦の工程区切り(任意)。開始ノードから次フェーズ手前まで - <id> <種類> "ラベル" @<レーン名> … 種類= start|task|decision|io - <from> -> <to> [: ラベル] … ノードIDを接続 - 行頭 # または // はコメント # ルール - id は空白なしで一意。矢印は定義済み id だけを参照する。 - 開始/終了は start、判断は decision、通常処理は task、入出力は io。 - 名前やラベルに空白・# を含むときは "ダブルクオート" で囲む。 - レーンは登場順に上から並ぶ。座標は書かない(自動レイアウトされる)。 - 分岐(decision)から出る矢印には「: はい / : いいえ」等のラベルを付ける。 - 差戻し等で前の工程へ戻る矢印(ループ)を書いてよい。 # 出力例 title "問い合わせ対応" lane 顧客 #4f9cf9 lane サポート #22c55e phase 受付 @q1 phase 対応 @q3 q1 start "問い合わせ" @顧客 q2 task "一次受付" @サポート q3 decision "解決した?" @サポート q4 start "完了" @顧客 q1 -> q2 q2 -> q3 q3 -> q4 : はい q3 -> q2 : いいえ