よしたく blog

ほぼ週刊で記事を書いています

コードでシステムアーキテクチャを描く「Diagrams」

「Diagrams」 を使うと、システムのアーキテクチャ図をPythonのコードで作成できる。 各クラウドサービスはもちろんのこと、OSSで使われているソフトウェアのアイコンまで用意されており、もう自分で画像探しの旅に出る必要がない。 プレゼンテーションツールでサイズや位置を微調整で苦労していた人は「Diagrams」に乗り換えて、スクリプトで一発作成できるのメリットを体感してみよう!

diagrams.mingrammer.com

「Diagrams」「Nodes」「Clusters」

Diagramsは大きく分けて「Diagrams」「Nodes」「Clusters」の3つで構成されている。

「Diagrams」

ライブラリの名前にもなっている「Diagrams」は、後に登場する「Nodes」「Clusters」をまとめる一番外側の枠組みとなる。「Diagrams」に設定した名前が出力される画像の名前にもなる。

他にもいくつかのパラメータを設定することで柔軟に画像を出力することができる。

  • direction
    • データフローの方向
    • デフォルトは左から右
    • 上から下に流れを変更したい場合はTBと入れる
  • outformat
    • 出力ファイルの形式
    • デフォルトはpng
  • show
    • コマンド実行後に保存されたファイルを開くかどうか
    • デフォルトはTrue
      • システムのデフォルトアプリケーションで開かれるためWSLを使っている場合はFalseを使ったほうがいい

Diagrams · Diagrams

「Nodes」

「Nodes」はアプリケーション1つつを表すオブジェクトになり、EC2であったりBLOBのアイコンを表す。ノードごとのひも付きは、ソースコード上で「>>」「<<」と表す。

Nodes · Diagrams

「Clusters」

「Clusters」はノードをグループ化することができる。Webサーバとして3台EC2を立てているときなどまとめて表現することができる。「Diagrams」と同じくdirectionがあるので処理の方向性の調整ができる。

Clusters · Diagrams

Diagramsでラムダアーキテクチャを表現してみる

公式ページにいくつかサンプルとして載っているので、こちらを参考にしながらOSSを利用し簡単なラムダアーキテクチャを描いてみた。これだけで図を表現でき、またバージョン管理をおこなえることも考えると大規模な案件のときはメリットが大きいと思う。

Examples · Diagrams

from diagrams import Diagram
from diagrams import Cluster
from diagrams.onprem.logging import Fluentd
from diagrams.onprem.analytics import Hadoop
from diagrams.onprem.analytics import Spark
from diagrams.onprem.analytics import Storm
from diagrams.onprem.queue import Kafka
from diagrams.onprem.client import Client
from diagrams.onprem.client import Users

with Diagram("lambda architecture", show=False):
    client = Client("Data")

    with Cluster("Batch"):
        hadoop = Hadoop("Hadoop")
        spark =  Spark("Spark")

    with Cluster("Speed"):
        storm = Storm("Storm")
        kafka = Kafka("Kafka")

    users = Users("Users")

    client >> hadoop >> spark >> users
    client >> storm >> kafka >> users

f:id:yoshitaku_jp:20200331173842p:plain
出力される画像

github.com

参考文献

tadaさんに「Diagrams」を教えていただいたのだが、tadaさんも「Diagrams」の記事を書いてくださっていた。インストールの方法から多くの例題が載っているので、作成する際はこちらも参考にしていただけたら。

sadayoshi-tada.hatenablog.com