🐵

PlantUMLで簡単に状態遷移図を書こう その1

2023/06/12に公開

はじめに

状態遷移図を早く書けるようにplantumlでの記述をマスターしようと思いました。
一応代替案はPaintで手書きですが、マウスだと難しく、板タブもありませんし、 再現性だったり、検索性や再利用性に乏しいです。plantumlなら最悪キーボードさえあればそれっぽく書けると考えています。
最初からはまったのではまったポイントを残しておきます。

環境

メインマシンはjavaとplantumlのコンポーネント、vscodeプラグインを入れてローカルで完結するようにしています。
モバイルマシン(windows11 SのPCなのでvscodeとかjavaとか入らない)で空き時間でも触れるようにkibe.laでマークダウンしてプレビューすることにしました。
本家でもサーバーサイドで動くように公開されていたりしますが、本家はhttpで筒抜けなので、用途が限られてしまいます。専用サーバー立てる場合はサーバー運用のリソースが必要になります。kibe.lanにてCotlinで描画サーバー実装してマークダウン対応してくれているので使わせていただく形としました。
https://kkeisuke.hatenablog.com/entry/2018/02/06/054803
https://blog.kibe.la/entry/2016/10/25/100000

お題1 ストップウォッチ

仕様

よくあるやつです。

1.「初期」状態から 「Sボタン」押下で、「計測中」状態
2.「計測中」状態から「Sボタン」押下で「一時停止」状態
3.「一時停止」状態から「Sボタン」押下で「計測中」状態
4.「一時停止」状態から「Rボタン」押下で「終了」状態

初期コード

これを最低限のルール([*]が初期状態終了状態、-->が矢印 矢印の後ろに : でラベル付けできる)で記載しました

@startuml ストップウォッチテスト状態遷移図
[*] --> 計測中 : Sボタン
計測中 --> 一時停止 : Sボタン
一時停止 --> 計測中 : Sボタン
一時停止 --> [*] : Rボタン
@enduml

図1.

改善したい点

よくある作図ツールをうまく使えてない感じの図になってしまっているので以下を改善します。

  1. 無駄に縦に長い
  2. 状態の下半分がムダ

解決策

  1. 縦に長いのはデフォルトの矢印指定だと思っているもの-->が縦方向の矢印という指示になってしまうからなのでプレビューしながら適宜->で横指定を含めるか-up->,-right->,-left->等で方向を指示する このケースならleft to right directionを入れるだけでもいいかもしれません
  2. 状態に説明を入れないなら、下半分はhide empty description指定で排除できるので常に冒頭に入れておきます

改善後のコード

図のレイアウトを調整したいなら、全矢印をガチガチに指定したパターン1よりは有る程度適当な指示2のほうがいい感じになりました。おそらく2.の指定のポイントは [*] -> 計測中を雑に横指定していい感じに収まった点かなと思います。

  1. 完成をイメージしてコントロールしたもの
@startuml テスト状態遷移図1
hide empty description
[*] --> 計測中 : Sボタン 
計測中 -right-> 一時停止 : Sボタン
一時停止 -left-> 計測中 : Sボタン
一時停止 -up-> [*] : Rボタン
@enduml

  1. 少し適当に調整したもの
@startuml テスト状態遷移図2
hide empty description
[*] -> 計測中 : Sボタン 
計測中 --> 一時停止 : Sボタン 
一時停止 -left-> 計測中 : Sボタン 
一時停止 -up-> [*] : Rボタン
@enduml

ついでにわかったこと

矛盾した場合は後ろが優先される
以下のように同じ要素に色指定を2回しても2回目の色指定#yellow で状態が描画されます。

state 一時停止 #red
state 一時停止 #yellow

最後に

もう少し難しいお題でいろいろ練習しようと思います。

参考文献

公式リファレンス
https://plantuml.com/ja/state-diagram

Discussion