Pythonでシステム構成図を自動生成する — Diagrams入門
はじめに
システム構成図を PowerPoint や Visio で手作業で描いていませんか?
構成が変わるたびに修正が必要になり、図の更新が追いつかないことも多いと思います。
そんなときに役立つのが Python 製のライブラリ「Diagrams」 です。
コードで構成図を定義すれば、変更点の反映や再利用が簡単になり、
常に最新の構成図を自動で生成できるようになります。
この記事では、Python の Diagrams を使って
手作業の構成図作成を自動化する方法 を紹介します。
セットアップ
この記事では、Google Colab 上で Diagrams を動かすことを前提に進めます。
ローカル環境でも同じ手順で構いませんが、Colab ならインストールと実行が手軽です。
1. ライブラリのインストール
まず、Diagramsをインストールします。
Colab のセルに以下を入力して実行してください。
!pip install diagrams
2. Google ドライブをマウント(任意)
Google ドライブに構成図を保存したい場合は、以下のコードを実行してマウントします。
from google.colab import drive
drive.mount('/content/drive')
Diagramsとは

Diagrams は Python で書ける構成図作成ライブラリです。
コードで構成を定義できるため、構成変更があっても自動で最新の図を生成できます。
Diagrams
Diagrams では、AWS や GCP、オンプレのサーバなどを簡単に図として表現できます。
Diagrams 自体は「描画キャンバス」の役割を持ち、そこにノード(Node)を配置し、エッジ(Edge)で接続することで構成図を作成できます。
Cluster
Cluster を使うと、サーバやサービスをグループ化して階層構造を表現できます。
例えば、同じ VPC 内の複数サーバをまとめるときに便利です。
from diagrams import Diagram, Cluster
from diagrams.aws.compute import EC2
from diagrams.aws.database import RDS
with Diagram("Cluster Example", show=False):
with Cluster("VPC"):
web = EC2("web")
db = RDS("db")
web >> db
Node
Node は構成図上の各要素(サーバ、データベース、サービスなど)を指します。
Node は必ず Diagram 内で定義します。
from diagrams.aws.compute import EC2
web = EC2("web-server")
Edge
Edge はノード同士の接続を表します。
「>>」または「<<」演算子で向きを指定できます。
from diagrams import Diagram
from diagrams.aws.compute import EC2
from diagrams.aws.database import RDS
with Diagram("Edge Example", show=False):
EC2("web") >> RDS("db")
プロンプトを作る
Diagrams を使った構成図作成は Python のコードで行いますがコードを書くのは手間がかかります。
そこで、DiagramsのPythonコードを生成するにプロンプトを作成しました。
以下プロンプトを編集して使います。
diagrams用のPythonコードを自動生成して出力してください
出力設定:
title:RPA Structure
outformat:png
filename:ファイルパス
show:True
描画設定:
以下条件で作成してください。()は表示名
Cluster("Client")
{
・OnPrem.client Users("user")
・Custom[/content/drive/MyDrive/Custom/SH.png]("SharePoint")
}
Cluster("Automation Gateway")
{
・Custom[/content/drive/MyDrive/Custom/PA.jpg]("PowerAutomate")
}
Cluster("UiPath\nExecutionLayer")
{
・Custom[/content/drive/MyDrive/Custom/Uipath.png]("UiPath\nOrchestrator")
・Custom[/content/drive/MyDrive/Custom/robot.png]("Robot")
}
Cluster("PowerAutomate\nExecutionLayer")
{
・Custom[/content/drive/MyDrive/Custom/PA.jpg]("PowerAutomate\nFrow")
}
接続線の設定:
結合は線のみ
繋ぐは矢印
()内は線のLavel,色,style
・userからSharePointを結合(SelectFlow,赤,点線)
・SharePointからPowerAutomateを繋ぐ(id,赤,実線)
・PowerAutomateからUiPath Orchestratorを繋ぐ(APICall,赤,実線)
・UiPath OrchestratorからRobotを繋ぐ(start,赤,実線)
・PowerAutomateからPowerAutomate\nFrowを繋ぐ(start,赤,実線)
python--------------------------------------------------------
■留意事項
1.importするものは描画内容に記載のものと一致させること
2.pythonコードは以下の構成を変えずに#codeを変更すること
3.末尾のdiを必ず入れること
4.インデントは以下のように記述すること
-With Cluster()の左はスペース2個分
with Diagram() as di:
#code
di
--------------------------------------------------------------
コードを生成する前に留意事項4点を確認すること
出力設定
■title
システム構成図の下に表示されるタイトルです。
■outformat
png, jpg, svg, pdfのいずれかを指定します。
■filename
ファイルパスを指定してください。
■show
trueにするとcolab上で表示されます。
描画設定
Cluster("Client")
{
・OnPrem.client Users("user")
}
Clusterとその中に入れるNodeを記述してください。
Nodeの記述方法
1.既存Node
Node名(表示名)
※Node一覧は以下参照
2.カスタムNode
Customノードを使う場合はアイコンを指定の場所に保存し、以下書式で入力してください。
Custom[アンコンのパス](表示名)
接続線の設定
どのNodeからどのNodeに繋ぐかを指定します。
・userからSharePointを結合(SelectFlow,赤,点線)
以下書式で入力してください
・{(1)}から{(2)}を{(3)}((4))
(1)From:表示名で記載
(2)To:表示名で記載
(3)結合 or 繋ぐ
※結合は線、繋ぐは矢印
(4)接続線のLaval,色、線をカンマ区切りで記載
構成図を作る
作成したプロンプトをChatGPTに張り付け
ChatGPTが自動生成したPythonコード
from diagrams import Diagram, Cluster, Edge
from diagrams.onprem.client import Users
from diagrams.custom import Custom
with Diagram("RPA Structure",outformat="png",filename="/content/drive/MyDrive/Output/rpa.png",show=True, direction="LR") as di:
with Cluster("Client"):
user = Users("user")
sharepoint = Custom("SharePoint", "/content/drive/MyDrive/Custom/SH.png")
with Cluster("Automation Gateway"):
powerautomate = Custom("PowerAutomate", "/content/drive/MyDrive/Custom/PA.jpg")
with Cluster("UiPath\nExecutionLayer"):
orchestrator = Custom("UiPath\nOrchestrator", "/content/drive/MyDrive/Custom/Uipath.png")
robot = Custom("Robot", "/content/drive/MyDrive/Custom/robot.png")
with Cluster("PowerAutomate\nExecutionLayer"):
paflow = Custom("PowerAutomate\nFrow", "/content/drive/MyDrive/Custom/PA.jpg")
# 接続線設定
user - Edge(label="SelectFlow", color="red", style="dotted") - sharepoint
sharepoint >> Edge(label="id", color="red", style="solid") >> powerautomate
powerautomate >> Edge(label="APICall", color="red", style="solid") >> orchestrator
orchestrator >> Edge(label="start", color="red", style="solid") >> robot
powerautomate >> Edge(label="start", color="red", style="solid") >> paflow
di
これをGoogleColabに張り付けて実行すると図が生成される

注意点
ChatGPTが出力するコードのインデントがおかしい場合がある。
with Clusterのインデントが下がっていない場合は以下のように修正すること
with Diagram()
with Cluster()
Discussion