テキストでネットワーク図を作ろう!nwdiag

417件のシェア(そこそこ話題の記事)

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

nwdiagって何?

ブロック図生成ツール blockdiagシリーズの1つです。きれいな論理ネットワーク図を作成することができます!

公式サイト(http://blockdiag.com/ja/nwdiag/introduction.html)

特徴

  • テキストベース
  • 自動レイアウト
  • SVG出力可能

インストール方法

Pythonで動き、Win・Mac・Linuxすべて対応しています。今回はMacでのインストール方法を紹介します。 Windowsの場合は事前にPythonのインストールを行ってください。2系、3系はお好みでどうぞ!

インストール

一行で簡単にインストール完了です。

pip install nwdiag

サンプルコードを使って動作を確認します。

まず以下のファイルを作成してください。

sample001.nwdiag

nwdiag {
  network dmz {
      address = "210.x.x.x/24"

      web01 [address = "210.x.x.1"];
      web02 [address = "210.x.x.2"];
  }
  network internal {
      address = "172.x.x.x/24";

      web01 [address = "172.x.x.1"];
      web02 [address = "172.x.x.2"];
      db01;
      db02;
  }
}

早速変換してみましょう。

nwdiag sample001.nwdiag

sample001.png

え?なにこれフォント汚い...

フォント指定

きれいな図を作れると言っておいてこれだと不味いのでフォントを変更します。 (USERNAME)を自身の環境に合わせて置換し、お好きなフォントパスを指定しましょう。私はNotoSansを指定しました。

~/.blockdiagrc

[nwdiag]
fontpath = /Users/<<USERNAME>>/Library/Fonts/NotoSansCJK.ttc

Winの場合は以下の場所に作成してください。
%USERPROFILE%\.blockdiagrc

さらに、出力フォーマットをSVGで指定しましょう。最終的にPNGやPDFが欲しい場合も一度SVGを経由するときれいになります。 それでは。もう一度変換してみましょう。

nwdiag -Tsvg sample001.nwdiag
qlmanage -t -s 1000 -o . sample001.svg

sample001.svg.png

いい感じになりました!

Win・Linuxの方はImageMagickやWebサービスを使って変換してください。

サンプルコード

明日から使える実践的なオプションを組み込んだコードを作ってみました。参考にして頂ければ幸いです。 もっと詳しく知りたい!という方は以下のリンクが参考になります。

ノード属性の設定(http://blockdiag.com/ja/blockdiag/attributes/node.attributes.html)

sample002.nwdiag

nwdiag {

  inet [shape = cloud, color = "lightpink"];
  inet -- utm;

  network dmz{
    color = "#FF7777";
    address = "192.168.0.0/24"

    utm [address = ".254"];
    web01 [address = ".8", icon = "./256px-NewTux.svg.png" ];
    web02 [address = ".9", icon = "./256px-NewTux.svg.png" ];
  }

  network intra {
    color = "lightcyan"
    address = "192.168.1.0/24"

    utm [address = ".254"];
    ad01 [address = ".8", icon = "./256px-Microsoft_logo.svg.png" ];
    ad02 [address = ".9", icon = "./256px-Microsoft_logo.svg.png" ];
  }
}

sample002.svg.png