見出し画像

プログラムで描く構成図


ちょっと面白いものを見つけた。
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ファイルが吐き出される。

画像1

もう少し複雑なものだと(サンプルからのコピペ)

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オブジェクトの中に個別のオブジェクトを作ると、その構造でよろしく構成図が描かれる。

画像2

こんな小さな構成図だったら適当なツールで描けるけど、複雑だったり大量だったりすると面倒くさい。

そういう面倒くさい話はプログラムで記述すると楽だからね。

そのうち使うかも。
日常的に必要な人はいるかもね。

この記事が気に入ったらサポートをしてみませんか?