【VSCodeとChatGPTで使う!】PlantUMLを使ったシーケンス図の作り方

UML (Unified Modeling Language) は、ソフトウェアやシステムの設計・開発を行う際に、その設計をモデル化するための標準化された図示記法のことです。例えば、あるアプリケーションの処理の流れをシーケンス図として描きたい場合に、ある種の共通言語ともいえるUML を活用することで、シンプルで、多くの人が理解でき、再利用性に優れた形式でシーケンス図を作成することができます。

PlantUMLは、UML をテキストファイルで記述し、それを画像にレンダリングするオープンソースのツールです。つまり、UML をより手軽に始められるツールということで、本記事ではさっそくPlantUML を使ってシーケンス図を実際に作ってみましょう。

目次

インストール方法

今回はVSCode 上でUML を作成する環境を整える方法を紹介します。OS はWindows を対象としますが、その他のOS でも基本的なインストール方法は同じです。インストールの流れは下記の通りです。

  1. VSCode パッケージのインストール
  2. OpenJDK のインストール
  3. (オプション) Graphviz のインストール
  4. 参考 : Web でのレンダリング

1. VSCode パッケージのインストール

まずはパッケージをインストールします。これはWeb サイトからでも、直接VSCode からパッケージ名「PlantUML」を検索しても構いません。

インストールが完了しても、残念ながらまだUML の図示はできません。というのも、要件としてJava 環境が必要なためです。

2. Java のインストール

基本的には下記ドキュメントのRequirements に従います。

https://marketplace.visualstudio.com/items?itemName=jebbs.plantuml

ただし、Java を新規でインストールする際は、例えばWindows の場合であれば下記からダウンロードできるMS Build 版OpenJDK のmsi ファイルを利用したほうがUI でインストールでき、自動的にパスを通してくれるのでオススメです。

https://learn.microsoft.com/en-us/java/openjdk/download

インストール完了後、正しくjava が実行できるかどうかを確認します。

plantuml> java --version
openjdk 21.0.2 2024-01-16 LTS
OpenJDK Runtime Environment Microsoft-8905927 (build 21.0.2+13-LTS)
OpenJDK 64-Bit Server VM Microsoft-8905927 (build 21.0.2+13-LTS, mixed mode, sharing)

3. (オプション) Graphviz のインストール

Windows の場合、現在では個別のインストールは必要ありません。Graphviz (のdot) を使用した図が作成できるかは下記コマンドで確認できます。plantuml.jar のインストールディレクトリは環境に合わせて適宜変更してください。

plantuml> java -jar C:\Users\${YOUR_USER_NAME}\.vscode\extensions\jebbs.plantuml-2.17.5\plantuml.jar -testdot
Dot version: dot - graphviz version 2.44.1 (20200629.0846)
Installation seems OK. File generation OK

Linux やmacOS の場合は現時点では追加でのGraphviz インストールが必要になるようです。詳細は先述したReuirements や下記ドキュメントを確認してください。

https://plantuml.com/en/graphviz-dot

参考までにmacOS の場合は下記コマンドでGraphviz をインストールできます。

brew install graphviz

4. 参考 : Web でのレンダリング

実はPlantUML はWeb ブラウザで実行できるサービスが提供されています。これにより、ローカルで表示する必要がないのであれば、Web 版を利用したほうが簡単に始めることができます。

https://www.plantuml.com/plantuml/uml/SyfFKj2rKt3CoKnELR1Io4ZDoSa70000

VSCode 版を使うメリットとしては、ファイル共有やバージョン管理、Github Copilot を使いたいといった時でしょう。PlantUML を簡単に試したい、けどJava のインストールなどは面倒……といった場合にはWeb 版を利用してください。

シーケンス図を作成してみよう

まずは「ユーザーがリクエストを送信し、システムが応答を返す」という簡単なシーケンス図を作成してみます。ファイル名はここではsample-diagram.puml とします。

@startuml
actor ユーザー
participant システム

ユーザー -> システム: リクエストを送信
activate システム
システム --> ユーザー: 応答を返す
deactivate システム
@enduml

VSCode の拡張をインストールしていれば、右上に図示用のアイコンが出ているはずなので、それをクリックします。

下記スクリーンショットのように、ユーザーとシステムの間の関係がシーケンス図として出力されます。

ここで、いくつかPlantUML 特有の代表的な記法を確認します。まず、PlantUML ファイルは必ず@startuml/@enduml で囲みます(' で始まる記載はコメントです)。

@startuml
'Line comments use a single apostrophe
@enduml

-> または-->(逆向きは<- <-- でもOK)でシーケンス図を書く際の処理の流れを図示できます。

@startuml
Alice -> Bob: Authentication Request
Bob --> Alice: Authentication Response

Alice -> Bob: Another authentication Request
Alice <-- Bob: Another authentication Response
@enduml

分類子(participant)はシーケンス図に出てくる登場人物のようなものです。

@startuml
participant Participant as Foo
actor       Actor       as Foo1
boundary    Boundary    as Foo2
control     Control     as Foo3
entity      Entity      as Foo4
database    Database    as Foo5
collections Collections as Foo6
queue       Queue       as Foo7
Foo -> Foo1 : To actor 
Foo -> Foo2 : To boundary
Foo -> Foo3 : To control
Foo -> Foo4 : To entity
Foo -> Foo5 : To database
Foo -> Foo6 : To collections
Foo -> Foo7: To queue
@enduml

対応している分類子は下記の通りです。

  • actor
  • boundary
  • control
  • entity
  • database
  • collections
  • queue

https://github.com/plantuml/plantuml/blob/master/src/net/sourceforge/plantuml/sequencediagram/ParticipantType.java

メッセージに自動的に番号を振ることができます。

@startuml
autonumber
Bob -> Alice : Authentication Request
Bob <- Alice : Authentication Response

autonumber 15
Bob -> Alice : Another authentication Request
Bob <- Alice : Another authentication Response

autonumber 40 10
Bob -> Alice : Yet another authentication Request
Bob <- Alice : Yet another authentication Response
@enduml

メッセージをalt/else, opt, loop, group などといったワードでグルーピングできます。

@startuml
Alice -> Bob: Authentication Request

alt successful case

    Bob -> Alice: Authentication Accepted

else some kind of failure

    Bob -> Alice: Authentication Failure
    group My own label
    Alice -> Log : Log attack start
        loop 1000 times
            Alice -> Bob: DNS Attack
        end
    Alice -> Log : Log attack end
    end

else Another type of failure

   Bob -> Alice: Please repeat

end
@enduml

ここまで、代表的な記法をいくつか紹介しましたが、ほかにもシーケンス図を作成するうえで役立つ記法があります。詳細は下記ドキュメントを参照してください。

https://plantuml.com/en/sequence-diagram

生成AI を活用したシーケンス図の作成

ここまででいくつかPlantUML の記法を紹介しましたが、ある程度UML を描けるようになるためには当然それなりのスキルセットが必要になります。そこで、ChatGPT などの生成AI を活用することで、このハードルを大きく下げることができます。

たとえば、TCP 3 way handshake をシーケンス図にしたい場合、これをChatGPT で作ってしまうことができます。

PlantUML diagram

とはいえ、実際に生成AI で作成する場合は必ずしも意図したものができるわけではないため、UML 作成のベースとして活用し、細かい表記を調整していくことになります。

参考までに、ChatGPT では画像の入力もできるため、Web から拾ってきたシーケンス図や手書きのシーケンス図をPlantUML に変換することができます。

もちろん、得られた結果が正しくない場合もありますが、いずれにせよ、PlantUML の目的である、UML をコード化して標準化するための支援ツールとして、生成AI は大いに活用できると思います。

まとめ

本記事では、PlantUML とVSCode を使った基本的なシーケンス図の作成の流れを紹介しました。また、ChatGPT のような生成AI を活用することで、PlantUML によるUML の標準化をより手軽に始められることができます。例えば、ミーティングの最中にホワイトボードに書き起こしたシーケンス図の写真を撮影し、ChatGPT に入力してコード化してから社内共有といったこともユースケースとして考えられます(もっとも、セキュリティの問題はつきまとうのですが)。

本記事がPlantUML を始めるきっかけになれば幸いです。