![](https://kt-riman.com/wp-content/uploads/2024/04/0b063bf6df762e8729d55eea20fd93b5.jpg)
今回は、オープンソースのグラフ可視化ソフトウェアGraphvizを使って、ウェブサイト利用とPython実装で、効果的にネットワーク図を描く方法を紹介します。
Graphvizは、テキストベースの入力からグラフを視覚的に表現するためのオープンソースツールです。
ネットワーク構造、データフロー、階層関係などの複雑な情報を、ノードとエッジで構成される図として出力できるので、多様なレイアウトオプションやカスタマイズ機能を備え、ソフトウェア設計やデータ可視化など、幅広い分野で活用されています。
ネットワーク図のテンプレは存在しない
ネットワーク図を手書きしたり、パワーポイントで作成することは、修正が大変だったり、会話中にリアルタイムで描画しようとすると途中で議論が途切れてしまうことがあります。
課題 | Graphvizで解決 |
---|---|
修正が大変 | – データや関係性を更新するだけでネットワーク図を修正可能。 – 新情報を追加しても自動的に図が更新され、手間がかからない。 |
リアルタイムでの描画が難しい | – 会話中にリアルタイムにネットワーク図を描画可能。 – 参加者との議論を深めながら、図を作成・更新できる。 |
議論が途切れる | – すぐに図が修正されるので参加者がその場で変更内容を確認可能。 – 図の作成プロセスを可視化し、議論を具体的に進められる。 |
複雑な図が見づらい | – Graphvizアルゴリズムで複雑なネットワークもわかりやすく表示。 – プログラムによる生成で、正確性と見やすさを確保。 |
こうした課題に対処するために、Graphvizを使って効果的にネットワーク図の描画は有効です。
ネットワーク図は、さまざまな場面で活用できます。具体的な用途としては以下が挙げられます。
- データベースの構造やER図の表現
- 組織構造の表現
- ワークフローやプロセスの視覚化
![](https://kt-riman.com/wp-content/uploads/2024/04/cab2f393be2a69155c519d9b1e56a284.jpg)
Graphvizとは
Graphvizは、DOT言語を使ってグラフを記述、様々なレイアウトアルゴリズムを搭載、高品質な画像出力が可能の特徴を持つオープンソースのグラフ可視化ソフトウェアです。
ウェブサイトで活用できるので豊富なドキュメントやチュートリアルが掲載されているし、サンプルコードも提供されているので、誰でも簡単にすぐに使用することができます。
外部サイトなので個人情報や会社内の機密情報を取り扱う場合にはリスクが伴うので、そういう場合にはPython実装することでプログラムからGraphvizを簡単に呼び出して使うことができます。
またPython実装では動的なグラフ描画やMatplotlib等他のライブラリと連携できるので、自分好みのレイアウトにできたり、分析がしやすいメリットがあります。
Pythonを活用した使い方
- Graphvizのインストール
- Graphvizの公式サイトからダウンロードしてインストールします。
- DOWNLOADページに進み、私の場合は「graphviz-10.0.1 (64-bit) EXE installer [sha256]」をダウンロードしました。
- インストール画面の中でパスの設定が出来ますので、「Add Graphviz to the system PATH for all users」を選択すると、後で環境設定を自分で設定しなくてよいので楽です。
- Pythonコードの準備
- 必要なPythonパッケージをインストールします。
pip install graphviz
3. Pythonコードの準備
- ネットワーク図の構造をDOT言語で記述します。例えば、以下のような形式です。
# Graphvizのインポート
from graphviz import Digraph
# DOT言語でグラフを定義
dot = Digraph(comment='Network Topology')
dot.attr('node', shape='rectangle', style='filled', fillcolor='lightblue') # ノードの形を変えて色塗り
dot.node('Router', 'Router')
dot.node('Switch1', 'Switch1')
dot.node('Switch2', 'Switch2')
dot.attr('node', shape='oval', style='filled', fillcolor='lightgreen') # ノードの形を変えて色塗り
dot.node('Server1', 'Server1')
dot.node('Server2', 'Server2')
dot.edge('Router', 'Switch1')
dot.edge('Router', 'Switch2')
dot.edge('Switch1', 'Server1')
dot.edge('Switch2', 'Server2')
# グラフにタイトルを追加
dot.attr(label='Network Topology', labelloc='top', fontsize='20')
# 画像ファイルとして出力
dot.render('network_topology', format='png', view=True)
![](http://kt-riman.com/wp-content/uploads/2024/03/network_topology.png)
- 形状指定はshapeを使用。四角形はshape=’rectangle’、楕円はshape=’ellipse’。
- 塗りつぶしのスタイルはstyle=”filled” を使用。色は青色(
fillcolor='lightblue'
)、緑色(fillcolor='lightgreen'
)、白色(fillcolor='white'
)。
4. matplotlibとの連携
- GraphvizとMatplotlibを組み合わせることで、ネットワーク図をより柔軟に操作し、表示することができます。
from matplotlib import pyplot as plt
from PIL import Image
import io
# DOT言語からグラフを作成し、Matplotlibで表示する
plt.figure(figsize=(8, 6))
plt.axis('off')
# DOT言語を画像に変換
img_data = dot.pipe(format='png')
img = Image.open(io.BytesIO(img_data))
# Matplotlibで表示
plt.imshow(img)
plt.title('Network Topology', fontsize=16)
plt.show()
Webサイトを活用した使い方
- Graphvizのオンラインにアクセスする
- Graphvizのオンラインに遷移して、記載事項を削除する。
- コードを記載する
- 左側のエディタに上記のDOT言語のコードを貼り付けます。
- 簡単に作図できることを体感できると思います。
- またコードを記載してすぐに図示してくれるのでストレスなく使用できるのが良い点です。
// DOT言語でグラフを定義
digraph Network_Topology {
node [shape=rectangle, style=filled, fillcolor=blue] // ノードの形を変えて色塗り
Router [label="Router"]
Switch1 [label="Switch1"]
Switch2 [label="Switch2"]
node [shape=oval, style=filled, fillcolor=white] // ノードの形を変えて色塗り
Server1 [label="Server1"]
Server2 [label="Server2"]
Router -> Switch1
Router -> Switch2
Switch1 -> Server1
Switch2 -> Server2
Switch2 -> Server3
// グラフにタイトルを追加
label="Network Topology"
labelloc=top
fontsize=20
}
![](http://kt-riman.com/wp-content/uploads/2024/03/2edf58b1fb824079918fc7651753e0a7.png)
- ノードの定義 :
label
属性を使ってラベルを付けています。 - エッジの定義 :2つの有向エッジを定義。A -> Bで
A
からB
への有向エッジが生成されます。 - スタイル設定 :
node
やedge
によってスタイルを設定。ノードの形をcircle
、スタイルをfilled
、塗りつぶしの色をlightblue
に設定し、エッジの色をred
、線の太さを2.0
に設定しています。
![](https://kt-riman.com/wp-content/uploads/2024/04/9766f6d0f5497c553a16f931abfc435e-1.jpg)
無料でネットワーク図を描画しよう
以上、Graphvizを使ったネットワーク図の描画方法について解説しました。
コード例もあわせて、ぜひ試してみてください。
グラフ生成は本当に簡単!無料ツールGraphvizとPythonを使えば、今日からあなたもネットワーク図の達人です。
説明資料の充実、設計レビューの改善、皆の理解度アップが待っていますよ。
Graphvizでネットワーク図の描き方を教えます 【手書きから解放されたい方向け】簡単に構造図を可視化しよう因果ネット図&コーディング習得のススメ
ネットワーク図をカスタマイズして伝わりやすく描画するには理論&コーディングスキルがお勧めです。
勉強したいけどライフスタイルのバランスや家族関係、自己実現のための時間の問題でなかなか踏み出せない状況の方が多いと思います。
そこでお勧めなのが、勉強したい領域のみを自分で選んで、そこだけに特化して短時間で学べる『Schoo(スクー)』ライブ動画コミュニティと「PyQ」オンラインスクールです。
理論的に学ぶなら『Schoo(スクー)』ライブ動画コミュニティ
![](https://www19.a8.net/0.gif?a8mat=3Z313O+64AELU+58WK+5Z6WX)
【エンジニアのためのベイズ統計学】第7回エンジニアのためのベイズ統計学-ベイジアン・ネットによる「人工知能」を受講すれば、ベイズ統計学の基礎概念からベイジアンネットまでを、事例を交えながら学べます。
今なら7日間無料登録やってるみたいなのでお得ですね‼
Pythonコーディングを効率的に学びたいなら「PyQ」オンラインスクールです
![](http://image.moshimo.com/af-img/0408/000000017969.png)
今回であれば7days Python チャレンジ(17時間)とデータ分析(45時間)を受講すれば習得できるはずです。
- 7days Python チャレンジ:7日間の無料体験でプログラミングの基礎を学ぶ
- データ分析:Pythonでデータ分析を行うための基礎知識を身につけるためのコース
月額制なので忙しくなれば途中退会も可能ですので、リスクは低いと思います。
ぜひ一歩を踏み出して、あなたのキャリアが大きく飛躍させましょう。