sdedit-4.01.jarを使ってテキストファイルをシーケンス図に変換してみる
Quick Sequence Diagram Editorというシーケンス図を記述するプログラムを見つけたので触ってみた際の記録。
シーケンス図はphpでログインの仕組みを作ったと仮定してみました。
※Amazon Linux AMIでの動作確認の記録です。
インストール
javaをインストール
yum install java
wgetでjarファイル取得
wget http://cznic.dl.sourceforge.net/project/sdedit/sdedit/4.0/sdedit-4.01.jar
ヘルプの表示を確認
java -jar sdedit-4.01.jar -h
簡単なシーケンスを作成
シーケンス図作成用のtextファイル作成
vim test.sd
test.sdの内容
cl:browser[a] php1:index.php[a] php2:login.php[a] db:database[a] cl:location\: login.php=php1[s].GET / cl:login form=php2[s].GET /login.php cl:location\: index.php=php2[s].POST /login.php php2[s]: result=db.SELECT cl:response page=php1[s].GET /
シーケンス図(png画像)生成
java -jar sdedit-4.01.jar -o test.png -t png test.sd
結果
補足(日本語)
javaにそこまで詳しくないので正しい方法か分かりませんが、 以下の方法でひとまず日本語表示ができました。(環境は)
wget http://dl.ipafont.ipa.go.jp/IPAfont/ipam00303.zip unzip ipam00303.zip mkdir /usr/share/fonts/ipa-mincho mv ipam.ttf /usr/share/fonts/ipa-mincho/
ファイルに日本語を入力
test.sdの内容に日本語を含ませる
cl:ブラウザ[a] php1:index.php[a] php2:login.php[a] db:データベース[a] cl:location\: login.php(リダイレクト)=php1[s].GET / cl:login formを返却=php2[s].GET /login.php cl:location\: index.php(リダイレクト)=php2[s].POST /login.php php2[s]: result=db.SELECT cl:response page=php1[s].GET /
実行時にパラメータにフォント追加
java -jar sdedit-4.01.jar -o test.png -t png --font "IPA Mincho" test.sd
結果
アクターを追加してみる
テキストファル(設計)を以下のように修正
user:Actor cl:ブラウザ[a] php1:index.php[a] php2:login.php[a] db:データベース[a] user[s]:cl.ブラウザ起動 cl:location\: login.php(リダイレクト)=php1[s].GET / cl:login formを返却=php2.GET /login.php cl:user[s].ログイン画面表示 cl:stop user:cl.ユーザID、パスワード入力してログインボタン押下 cl:location\: index.php(リダイレクト)=php2[s].POST /login.php php2[s]: result=db.SELECT cl:response page=php1[s].GET / cl:user[s].ログイン後のページ表示 cl:stop
結果
枠を追加してみる
[c タイトル][/c]で囲むことで枠が追加される
user:Actor cl:ブラウザ[a] php1:index.php[a] php2:login.php[a] db:データベース[a] [c トップページを起動したが、cookieがないためログイン画面に遷移] user[s]:cl.ブラウザ起動 cl:location\: login.php(リダイレクト)=php1[s].GET / cl:login formを返却=php2.GET /login.php cl:user[s].ログイン画面表示 cl:stop [/c] [c ログイン画面よりログイン] user:cl.ユーザID、パスワード入力してログインボタン押下 cl:location\: index.php(リダイレクト)=php2[s].POST /login.php php2[s]: result=db.SELECT cl:response page=php1[s].GET / cl:user[s].ログイン後のページ表示 cl:stop [/c]
結果
分岐を作ってみる
user:Actor cl:ブラウザ[a] php1:index.php[a] php2:login.php[a] db:データベース[a] [c トップページを起動したが、cookieがないためログイン画面に遷移] user[s]:cl.ブラウザ起動 cl:location\: login.php(リダイレクト)=php1[s].GET / cl:login formを返却=php2.GET /login.php cl:user[s].ログイン画面表示 cl:stop [/c] [c ログイン画面よりログイン] user:cl.ユーザID、パスワード入力してログインボタン押下 [c ログインチェック] --[ログインに成功] cl:location\: index.php(リダイレクト)=php2[s].POST /login.php php2[s]: ユーザ存在あり=db.SELECT cl:response page=php1[s].GET / cl:user[s].ログイン後のページ表示 --[ログインに失敗] cl:ログインエラーを返却=php2[s].POST /login.php php2[s]: ユーザ存在なし=db.SELECT cl:user[s].ログインエラーの画面表示 [/c] cl:stop [/c]
結果
まとめ
結構利用できるかもしれない。
ただし、文法が間違ってるとすぐエラーになる。
エラー例1
Exception in thread "main" net.sf.sdedit.error.SemanticError: The mnemonic "s" is already defined for the lifeline "cl at net.sf.sdedit.diagram.Diagram.associateLifeline(Unknown Source) at net.sf.sdedit.diagram.MessageProcessor.findCallee(Unknown Source) at net.sf.sdedit.diagram.MessageProcessor._processMessage(Unknown Source) at net.sf.sdedit.diagram.MessageProcessor.processMessage(Unknown Source) at net.sf.sdedit.diagram.Diagram.readMessages(Unknown Source) at net.sf.sdedit.diagram.Diagram.generate(Unknown Source) at net.sf.sdedit.Main.createImage(Unknown Source) at net.sf.sdedit.Main.main(Unknown Source)
エラー例2
Exception in thread "main" net.sf.sdedit.error.SemanticError: Thread 1 has died at net.sf.sdedit.diagram.MessageProcessor.findCaller(Unknown Source) at net.sf.sdedit.diagram.MessageProcessor._processMessage(Unknown Source) at net.sf.sdedit.diagram.MessageProcessor.processMessage(Unknown Source) at net.sf.sdedit.diagram.Diagram.readMessages(Unknown Source) at net.sf.sdedit.diagram.Diagram.generate(Unknown Source) at net.sf.sdedit.Main.createImage(Unknown Source) at net.sf.sdedit.Main.main(Unknown Source)