はじめに:circoを活用した円形トポロジーの視覚化
Linux環境において、リング型トポロジーや循環型のワークフローを直感的な図面として表現したい場合、Graphvizファミリーのレイアウトエンジンである circo コマンドが絶大な効果を発揮します。本記事では、ツールの基本操作からPNG/SVG形式でのエクスポート手順、さらには mindist によるノード間隔の微調整やマルチバイト文字の文字化け対策に至るまで、実務で即座に役立つテクニックを体系的に解説します。
Graphvizの導入とcircoによる環状グラフの基本描画
まずはUbuntu環境下で円形グラフ生成環境を整えるため、graphviz パッケージをシステムにインストールします。

パッケージに含まれる circo は、環状(Circular)構造を美しく整列させる専用のレイアウトエンジンです。リングネットワークやトークンパッシング構造などの可視化に極めて適しています。
作業開始前に、-V フラグを実行して利用可能なツールのバージョンを把握しておきましょう。
⚙️ [主要オプション一覧]
-T<format> : レンダリングする画像形式(png、svg、pdf等)を選択します。-o <file> : 生成されたダイアグラムを保存するファイルパスを指定します。-O : 入力スクリプト名に拡張子を連結したファイル名で自動出力します。-V : インストール済みのGraphviz本体およびツールのバージョンを出力します。-v : グラフ配置の計算過程や詳細な実行ログをターミナルに表示します。-G<name>=<val> : グラフ全体に適用するグローバル属性をCLI引数から上書きします。-N<name>=<val> : 構成ノード全体の標準スタイル属性を一括指定します。-E<name>=<val> : エッジ(接続線)のスタイルプロパティをCLI引数から一括指定します。

検証用データとして、4台のルーター機器がリング状に結ばれた無向グラフ定義ファイル sample_ring.dot を作成します。
![cat « ‘EOF’ > sample_ring.dot
graph RingNetwork {
node [shape=circle, style=filled, fillcolor=lightblue];
Router1 – Router2;
Router2 – Router3;
Router3 – Router4;
Router4 – Router1;
}
EOF](/ubuntu/20261020_101858_107/captures/s01_c03_cat_____EOF____sample_ring_dot_graph_RingNetwork.png)
作成した sample_ring.dot を circo コマンドに入力し、環状配置されたPNG画像 sample_ring.png としてビルドします。生成後は ls -lh でファイル容量やメタデータを確認しましょう。
出力形式は -Tpng で指定し、書き出し先は -o パラメータで制御します。

有向グラフ(digraph)を用いた循環プロセスのSVGベクター出力
続いて、業務のライフサイクルや継続的運用フローをモデリングするため、計画から監視までがループする有向グラフ(digraph)構成の workflow_cycle.dot を準備します。
![cat « ‘EOF’ > workflow_cycle.dot
digraph WorkflowCycle {
node [shape=box, style=“rounded,filled”, fillcolor=lightyellow];
edge [color=darkslategray, arrowhead=vee];
Plan -> Develop -> Test -> Deploy -> Monitor -> Plan;
}
EOF](/ubuntu/20261020_101858_107/captures/s02_c01_cat_____EOF____workflow_cycle_dot_digraph_Workflow.png)
拡大縮小を行っても描画クオリティが劣化しないベクター形式(SVG)で出力するため、-Tsvg オプションを指定して workflow_cycle.dot を処理します。生成完了後、head コマンドで先頭10行の構造を検証します。
XMLヘッダーおよび <svg> ルート要素が正常に記述されたベクターデータが出力されていることが確認できます。

レイアウト最適化:ノード間隔(mindist)と中心ノードの指定
複合トポロジーの視認性を引き上げる実践的なアプローチとして、mindist 属性によるノード間隔の調整と、マスタ・ワーカー構成を模した star_ring.dot の定義を行います。
![cat « ‘EOF’ > star_ring.dot
graph StarRingTopology {
graph [mindist=1.2];
node [shape=ellipse, style=filled, fillcolor=honeydew];
Master [fillcolor=lightsalmon];
Master – {Worker1 Worker2 Worker3 Worker4};
Worker1 – Worker2 – Worker3 – Worker4 – Worker1;
}
EOF](/ubuntu/20261020_101858_107/captures/s03_c01_cat_____EOF____star_ring_dot_graph_StarRingTopolog.png)
中央に特定ノードを据えるため、コマンドライン引数に -Groot=Master を指定してレンダリングを実行し、出力された star_ring.png を file コマンドで検証します。
基準となるコア要素を -Groot で中心へピン留めすることにより、スター型とリング型が混在した複雑なインフラ構造でも、整然としたバランスのよい構図に仕上がります。

マルチバイト文字の文字化け対策と大規模グラフ運用の要点
非ASCII文字(ハングルや日本語など)を含むダイアグラムを生成する際、グリフ欠落によって文字が四角形(いわゆる豆腐文字)に化ける現象を防ぐため、fonts-nanum などの多言語対応フォントをシステムに導入します。

DOTスクリプト内のグラフ・ノード・エッジ各階層に対してフォントファミリ NanumGothic を明示的にバインドした korean_cycle.dot を用意します。
![cat « ‘EOF’ > korean_cycle.dot
digraph KoreanCycle {
graph [fontname=“NanumGothic”];
node [fontname=“NanumGothic”, shape=circle, style=filled, fillcolor=aliceblue];
edge [fontname=“NanumGothic”];
“기획” -> “개발” -> “검증” -> “배포” -> “운영” -> “기획”;
}
EOF](/ubuntu/20261020_101858_107/captures/s04_c02_cat_____EOF____korean_cycle_dot_digraph_KoreanCycl.png)
circo を通じて korean_cycle.dot をコンパイルし、出力画像 korean_cycle.png の詳細情報を ls -lh でチェックします。
適切なフォントがマッピングされたことで文字化けを起こさず、クリアなラベル表示を持つPNGファイルが正常に生成されました。
なお、円形レイアウトの性質上、ノード数が膨大になると中心領域を横断する接続線が密集し、可読性が著しく損なわれる恐れがあります。大規模システムを可視化する際は、mindist パラメータで半径を押し広げるか、サブグラフごとにクラスタ化して線の交差を最小限に抑える設計が推奨されます。

Graphvizの circo コマンドを駆使することで、通常の階層型ツリーでは表現しづらい循環関係やリングネットワークを極めて明瞭に図面化できます。
システムアーキテクチャのドキュメント化や監視マップの自動生成など、日々の設計・運用業務にぜひ役立ててください。