PlantUMLでシーケンス図を描こう!

ソフトウェア開発ツール

PlantUMLは、シンプルなテキストベースの言語を使ってUML図を描くことができるオープンソースツールです。Pythonから簡単にPlantUMLを使うことができ、シーケンス図やクラス図などを手軽に作成できます。

ここでは、PlantUMLを使ってシーケンス図を描く方法を、Pythonのサンプルコードを交えて解説していきます。

環境設定

まず、PlantUMLをPythonから使うために、plantumlパッケージをインストールします。


pip install plantuml

基本的なシーケンス図の描き方

PlantUMLでシーケンス図を描くには、@startuml@endumlで図の範囲を指定し、その間にシーケンス図の要素を記述していきます。

以下は、クライアントとサーバー間の簡単なやり取りを表したシーケンス図の例です。


from plantuml import PlantUML

server = PlantUML(url='http://www.plantuml.com/plantuml/svg/')

source = """
@startuml
participant Client
participant Server

Client -> Server: Request
activate Server
Server --> Client: Response
deactivate Server
@enduml
"""

output = server.processes(source)

with open('sequence.svg', 'wb') as f:
    f.write(output)

file

このコードでは、PlantUMLクラスを使ってPlantUMLサーバーに接続し、source変数にシーケンス図の内容を記述しています。processesメソッドでソースコードを処理し、生成された画像をsequence.svgファイルに保存しています。

複雑なシーケンス図の例

次に、もう少し複雑なシーケンス図の例を見てみましょう。


from plantuml import PlantUML

server = PlantUML(url='http://www.plantuml.com/plantuml/svg/')

source = """
@startuml
actor 開発者
participant IssueWise
participant CommitCraft
participant DocuMind
participant GitHub
database リポジトリ

開発者 -> IssueWise : 1. オープンIssueを取得
IssueWise -> GitHub : GitHubからIssueを取得
GitHub --> IssueWise : Issueデータ
IssueWise --> 開発者 : Issueデータをマークダウン化

開発者 -> IssueWise : 2. AIにIssueとコードを入力
IssueWise -> DocuMind : コードの構造をマークダウン化
DocuMind -> リポジトリ : リポジトリの情報を取得
リポジトリ --> DocuMind : ファイル構造とコードスニペット
DocuMind --> IssueWise : マークダウン化されたコード
IssueWise --> 開発者 : マークダウン化された課題とコード

開発者 -> CommitCraft : 3. ステージング済み変更を取得  
CommitCraft -> リポジトリ : ステージング済み変更を取得
リポジトリ --> CommitCraft : 変更差分
CommitCraft --> 開発者 : 変更差分のマークダウン

開発者 -> CommitCraft : 4. AIにコミットメッセージを生成させる
CommitCraft --> 開発者 : コミットメッセージ

開発者 -> DocuMind : 5. ドキュメント化
DocuMind -> GitHub : 変更履歴を取得
GitHub --> DocuMind : コミットログ
DocuMind -> リポジトリ : リポジトリ情報を統合
リポジトリ --> DocuMind : ファイル構造とコードスニペット 
DocuMind --> 開発者 : マークダウン化されたドキュメント

@enduml
"""

output = server.processes(source)

with open('sequence02.svg', 'wb') as f:
    f.write(output)

このシーケンス図では、開発者とツール(IssueWise, CommitCraft, DocuMind)、そしてGitHubやリポジトリとの間のやり取りを表現しています。矢印(->)でメッセージの方向を示し、メッセージ名を記述することで、処理の流れを表現しています。

file

シーケンス図のカスタマイズ

PlantUMLでは、シーケンス図の見た目をカスタマイズすることもできます。以下の例では、skinparamコマンドを使って、様々な要素の色や太さを変更しています。


from plantuml import PlantUML

server = PlantUML(url='http://www.plantuml.com/plantuml/svg/')

source = """
@startuml

skinparam sequenceArrowThickness 3
skinparam ParticipantBorderColor LightCyan/CadetBlue
skinparam SequenceLifeLineBorderColor DarkCyan/CadetBlue
skinparam SequenceLifeLineBorderThickness 9
skinparam noteBorderColor Bisque/LightYellow
skinparam ActorBorderColor CadetBlue/LightSlateGray
skinparam ActorBackgroundColor Azure/LightSteelBlue

actor "<color:DarkSlateGray>開発者</color>" as 開発者 #Azure/LightSteelBlue
participant "<&SourceSage>SourceSage</&SourceSage>" as SourceSage #PowderBlue/LightPink
participant "<color:DarkSlateGray>IssueWise</color>" as IssueWise #MistyRose/LightSkyBlue
participant "<color:DarkSlateGray>CommitCraft</color>" as CommitCraft #PeachPuff/LightSteelBlue
participant "<color:DarkSlateGray>DocuMind</color>" as DocuMind #SeaShell/LightCoral
participant "<color:DarkSlateGray>GitHub</color>" as GitHub #Lavender/LightGoldenRodYellow
database "<color:DarkSlateGray>リポジトリ</color>" as リポジトリ #LavenderBlush/LightCyan

開発者 -> IssueWise : 1. オープンIssueを取得
IssueWise -> GitHub : GitHubからIssueを取得
GitHub --> IssueWise : Issueデータ
IssueWise --> 開発者 : Issueデータをマークダウン化

開発者 -> IssueWise : 2. AIにIssueとコードを入力
IssueWise -> DocuMind : コードの構造をマークダウン化
DocuMind -> リポジトリ : リポジトリの情報を取得
リポジトリ --> DocuMind : ファイル構造とコードスニペット
DocuMind --> IssueWise : マークダウン化されたコード
IssueWise --> 開発者 : マークダウン化された課題とコード

開発者 -> CommitCraft : 3. ステージング済み変更を取得  
CommitCraft -> リポジトリ : ステージング済み変更を取得
リポジトリ --> CommitCraft : 変更差分
CommitCraft --> 開発者 : 変更差分のマークダウン

開発者 -> CommitCraft : 4. AIにコミットメッセージを生成させる
CommitCraft --> 開発者 : コミットメッセージ

開発者 -> DocuMind : 5. ドキュメント化
DocuMind -> GitHub : 変更履歴を取得
GitHub --> DocuMind : コミットログ
DocuMind -> リポジトリ : リポジトリ情報を統合
リポジトリ --> DocuMind : ファイル構造とコードスニペット 
DocuMind --> 開発者 : マークダウン化されたドキュメント

@enduml
"""

output = server.processes(source)

with open('sequence03.svg', 'wb') as f:
    f.write(output)

この例では、矢印の太さ、参加者の枠線の色、ライフラインの色と太さ、ノートの枠線の色、アクターの枠線と背景色を変更しています。また、<color>タグを使って参加者の名前の色を指定したり、#に続けて色名を指定することで背景色を変更したりしています。

file

まとめ

PlantUMLを使えば、シンプルなテキストベースの記法で様々なUML図を描くことができます。PythonからPlantUMLを使う方法を覚えておけば、シーケンス図やクラス図などを手軽に作成・更新できるようになるでしょう。

リポジトリ

GitHub - Sunwood-ai-labs/PythonDiagrammatic at develop
Contribute to Sunwood-ai-labs/PythonDiagrammatic development by creating an account on GitHub.

ここで紹介した例を参考に、自分だけのシーケンス図を描いてみてください。色やスタイルをカスタマイズして、見やすく美しい図を作成しましょう。

コメント

タイトルとURLをコピーしました