![見出し画像](https://assets.st-note.com/production/uploads/images/43048192/rectangle_large_type_2_b5a9f896fb8532fbf99d0f4e49442476.png?width=1200)
プログラムで描く構成図
ちょっと面白いものを見つけた。
Pythonでシステム構成を記述すると、構成図が出力されるというもの。
Diagramsという名前のオープンソースライブラリ。
例えばこんな感じ。説明するまでもないほど単純なコード。
from diagrams import Diagram
from diagrams.gcp.storage import GCS
from diagrams.gcp.compute import GCF
from diagrams.gcp.analytics import BigQuery
with Diagram("", show=False):
GCS("file") >> GCF("function") >> BigQuery("BigQuery")
サンプルとしてGCSを描いてみたんだけど、見ての通りライブラリをインポートして、オブジェクトを >> でつなぐとこんなpngファイルが吐き出される。
もう少し複雑なものだと(サンプルからのコピペ)
from diagrams import Cluster, Diagram
from diagrams.gcp.analytics import BigQuery, Dataflow, PubSub
from diagrams.gcp.compute import AppEngine, Functions
from diagrams.gcp.database import BigTable
from diagrams.gcp.iot import IotCore
from diagrams.gcp.storage import GCS
with Diagram("Message Collecting", show=False):
pubsub = PubSub("pubsub")
with Cluster("Source of Data"):
[IotCore("core1"),
IotCore("core2"),
IotCore("core3")] >> pubsub
with Cluster("Targets"):
with Cluster("Data Flow"):
flow = Dataflow("data flow")
with Cluster("Data Lake"):
flow >> [BigQuery("bq"),
GCS("storage")]
with Cluster("Event Driven"):
with Cluster("Processing"):
flow >> AppEngine("engine") >> BigTable("bigtable")
with Cluster("Serverless"):
flow >> Functions("func") >> AppEngine("appengine")
pubsub >> flow
Clusterオブジェクトを使ってwithブロックでまとめてあげると、枠で囲まれる。つまりPubSubオブジェクトの前後にClusterオブジェクトをつなげてるだけなんだけど、それぞれのClusterオブジェクトの中に個別のオブジェクトを作ると、その構造でよろしく構成図が描かれる。
こんな小さな構成図だったら適当なツールで描けるけど、複雑だったり大量だったりすると面倒くさい。
そういう面倒くさい話はプログラムで記述すると楽だからね。
そのうち使うかも。
日常的に必要な人はいるかもね。
この記事が気に入ったらサポートをしてみませんか?