PlantUMLで簡単に状態遷移図を書こう その1
はじめに
状態遷移図を早く書けるようにplantumlでの記述をマスターしようと思いました。
一応代替案はPaintで手書きですが、マウスだと難しく、板タブもありませんし、 再現性だったり、検索性や再利用性に乏しいです。plantumlなら最悪キーボードさえあればそれっぽく書けると考えています。
最初からはまったのではまったポイントを残しておきます。
環境
メインマシンはjavaとplantumlのコンポーネント、vscodeプラグインを入れてローカルで完結するようにしています。
モバイルマシン(windows11 SのPCなのでvscodeとかjavaとか入らない)で空き時間でも触れるようにkibe.laでマークダウンしてプレビューすることにしました。
本家でもサーバーサイドで動くように公開されていたりしますが、本家はhttpで筒抜けなので、用途が限られてしまいます。専用サーバー立てる場合はサーバー運用のリソースが必要になります。kibe.lanにてCotlinで描画サーバー実装してマークダウン対応してくれているので使わせていただく形としました。
お題1 ストップウォッチ
仕様
よくあるやつです。
1.「初期」状態から 「Sボタン」押下で、「計測中」状態
2.「計測中」状態から「Sボタン」押下で「一時停止」状態
3.「一時停止」状態から「Sボタン」押下で「計測中」状態
4.「一時停止」状態から「Rボタン」押下で「終了」状態
初期コード
これを最低限のルール([*]が初期状態終了状態、-->が矢印 矢印の後ろに : でラベル付けできる)で記載しました
@startuml ストップウォッチテスト状態遷移図
[*] --> 計測中 : Sボタン
計測中 --> 一時停止 : Sボタン
一時停止 --> 計測中 : Sボタン
一時停止 --> [*] : Rボタン
@enduml
改善したい点
よくある作図ツールをうまく使えてない感じの図になってしまっているので以下を改善します。
- 無駄に縦に長い
- 状態の下半分がムダ
解決策
- 縦に長いのはデフォルトの矢印指定だと思っているもの
-->
が縦方向の矢印という指示になってしまうからなのでプレビューしながら適宜->
で横指定を含めるか-up->
,-right->
,-left->
等で方向を指示する このケースならleft to right direction
を入れるだけでもいいかもしれません - 状態に説明を入れないなら、下半分は
hide empty description
指定で排除できるので常に冒頭に入れておきます
改善後のコード
図のレイアウトを調整したいなら、全矢印をガチガチに指定したパターン1よりは有る程度適当な指示2のほうがいい感じになりました。おそらく2.の指定のポイントは [*] -> 計測中を雑に横指定していい感じに収まった点かなと思います。
- 完成をイメージしてコントロールしたもの
@startuml テスト状態遷移図1
hide empty description
[*] --> 計測中 : Sボタン
計測中 -right-> 一時停止 : Sボタン
一時停止 -left-> 計測中 : Sボタン
一時停止 -up-> [*] : Rボタン
@enduml
- 少し適当に調整したもの
@startuml テスト状態遷移図2
hide empty description
[*] -> 計測中 : Sボタン
計測中 --> 一時停止 : Sボタン
一時停止 -left-> 計測中 : Sボタン
一時停止 -up-> [*] : Rボタン
@enduml
ついでにわかったこと
矛盾した場合は後ろが優先される
以下のように同じ要素に色指定を2回しても2回目の色指定#yellow
で状態が描画されます。
state 一時停止 #red
state 一時停止 #yellow
最後に
もう少し難しいお題でいろいろ練習しようと思います。
参考文献
公式リファレンス
Discussion