T-CREATOR

Mermaid グラフでネットワーク構成を一発ドキュメント化する方法

Mermaid グラフでネットワーク構成を一発ドキュメント化する方法

Mermaid グラフでネットワーク構成を一発ドキュメント化する方法

ネットワークエンジニアの皆様、毎日の業務でネットワーク構成図の作成や更新に時間を取られていませんか。PowerPointやVisioで図を作っては古くなり、また新しく作り直すという繰り返しに疲れてしまった方も多いのではないでしょうか。

今回ご紹介するMermaidを使った方法なら、コードを書くように簡潔にネットワーク構成を記述でき、しかもGitで管理できるため、チーム全体での情報共有がスムーズになります。初心者の方でも今日から始められる実践的な内容をお届けしますね。

背景

ネットワーク図作成の現状と課題

現在多くの企業では、ネットワーク構成図の作成にMicrosoft PowerPoint、Visio、Lucidchart、Cacooなどの専用ツールが使われています。これらのツールは確かに美しい図を作成できますが、日常的な運用においていくつかの問題を抱えているのが実情です。

特に問題となるのが、ネットワーク構成が変更された際の図の更新作業でしょう。新しいサーバーを追加したり、ネットワークセグメントを変更したりするたびに、図を開いて手動で修正する必要があります。この作業は時間がかかるだけでなく、更新し忘れによる情報の不整合も発生しやすいんです。

また、複数人でのコラボレーションも課題の一つですね。PowerPointファイルをメールで送り合ったり、クラウドストレージで共有したりしても、誰がいつ何を変更したかが分からず、結果的に複数のバージョンが存在してしまうことがあります。

Mermaidの特徴と利点

Mermaidは、テキストベースでフローチャートやダイアグラムを作成できるツールです。JavaScriptライブラリとして開発されており、Markdownファイルに埋め込んで使用できることが大きな特徴となっています。

最も注目すべき点は、コードライクな記法でネットワーク図を描けることでしょう。例えば、「A --> B」と書くだけでAからBへの矢印を描くことができます。この直感的な記法により、プログラマーでなくてもすぐに習得できるのが魅力です。

さらに、テキストファイルとして管理できるため、Gitによるバージョン管理が可能になります。これにより、いつ誰がどの部分を変更したかが明確になり、必要に応じて過去のバージョンに戻すこともできるんですね。

GitHub、GitLab、Notionなど、多くのプラットフォームがMermaidをネイティブサポートしているため、既存のワークフローに組み込みやすいのも大きなメリットです。

課題

従来のネットワーク図作成の問題点

従来のGUIベースのツールを使ったネットワーク図作成には、以下のような問題があります。

まず、更新コストの高さが挙げられるでしょう。ネットワーク構成が変更されるたびに、専用ソフトウェアを起動し、該当する図を開いて、手動で要素を追加・削除・移動する必要があります。この作業は一見簡単そうに見えますが、実際には相当な時間を要しますし、作業者のスキルによって図の品質にばらつきが生じてしまいます。

次に、一貫性の維持が困難という問題もあります。複数の担当者が異なるタイミングで図を更新すると、使用する色やアイコン、配置ルールなどが統一されず、見る人によって理解しにくい図になってしまうことがあります。

また、検索性の低さも深刻な問題です。PowerPointやVisioで作成された図は、基本的に画像として扱われるため、特定のサーバー名やIP アドレスで検索することができません。大規模なネットワーク環境では、目的の情報を見つけるのに時間がかかってしまいます。

従来の課題を可視化すると、以下のような状況になります:

mermaidflowchart TD
    A[ネットワーク変更発生] --> B[専用ツール起動]
    B --> C[ファイル検索・オープン]
    C --> D[手動での図の更新]
    D --> E[保存・共有]
    E --> F[他のメンバーへの通知]
    F --> G[同期待ち]
    G --> H{全員が最新版?}
    H -->|No| I[バージョン競合発生]
    H -->|Yes| J[完了]
    I --> B
    
    style A fill:#ffcccc
    style I fill:#ffcccc
    style G fill:#fff2cc
markdown```mermaid
flowchart TD
    A[ネットワーク変更発生] --> B[専用ツール起動]
    B --> C[ファイル検索・オープン]
    C --> D[手動での図の更新]
    D --> E[保存・共有]
    E --> F[他のメンバーへの通知]
    F --> G[同期待ち]
    G --> H{全員が最新版?}
    H -->|No| I[バージョン競合発生]
    H -->|Yes| J[完了]
    I --> B
    
    style A fill:#ffcccc
    style I fill:#ffcccc
    style G fill:#fff2cc
```

この図からも分かるように、従来の方法では多くの手動作業と待ち時間が発生し、バージョン競合のリスクも常に存在しています。

ドキュメント管理の困難さ

ネットワーク図のドキュメント管理における課題は、技術的な側面だけでなく、組織運営の観点からも重要な問題となっています。

バージョン管理の複雑さが最も深刻な課題でしょう。「ネットワーク構成図_最新版.pptx」、「ネットワーク構成図_最新版_修正.pptx」、「ネットワーク構成図_最終版.pptx」といったファイル名を見たことがある方も多いのではないでしょうか。このような管理方法では、どれが本当に最新なのか分からなくなってしまいます。

変更履歴の追跡不能も大きな問題です。誰がいつ何を変更したかが記録されていないため、問題が発生した際の原因究明が困難になります。特に、複数の部門が関与する大規模なネットワーク環境では、この問題が顕著に現れます。

さらに、アクセス権限の管理も複雑になりがちです。機密性の高いネットワーク情報を含む図面を、誰がどの範囲まで閲覧・編集できるかを適切に管理するのは、ファイルベースでは限界があります。

承認プロセスの非効率性も見逃せません。ネットワーク構成の変更には通常、複数の関係者による承認が必要ですが、メールでファイルを送り合う方法では、承認の状況や待機中のタスクが見えにくくなってしまいます。

解決策

Mermaidによるネットワーク図の作成方法

Mermaidを使ったネットワーク図作成は、従来の問題を根本的に解決する革新的なアプローチです。テキストベースの記述により、コードを書くような感覚でネットワーク構成を表現できます。

基本的な記法はとてもシンプルです。ノード(機器)を定義し、それらの関係を矢印で表現するだけで美しい図が生成されます。

最も基本的なネットワーク接続を表現してみましょう:

mermaidgraph LR
    A[PC] --> B[スイッチ]
    B --> C[ルーター]
    C --> D[インターネット]
markdown```mermaid
graph LR
    A[PC] --> B[スイッチ]
    B --> C[ルーター]
    C --> D[インターネット]
```

この記述だけで、PC からインターネットまでの接続を示す図が生成されます。

より実践的な企業ネットワークの基本構成を表現する場合:

mermaidgraph TD
    Internet([インターネット])
    Firewall[ファイアウォール]
    DMZ[DMZ セグメント]
    CoreSwitch[コアスイッチ]
    WebServer[Webサーバー]
    DBServer[データベースサーバー]
    
    Internet --> Firewall
    Firewall --> DMZ
    Firewall --> CoreSwitch
    DMZ --> WebServer
    CoreSwitch --> DBServer
markdown```mermaid
graph TD
    Internet([インターネット])
    Firewall[ファイアウォール]
    DMZ[DMZ セグメント]
    CoreSwitch[コアスイッチ]
    WebServer[Webサーバー]
    DBServer[データベースサーバー]
    
    Internet --> Firewall
    Firewall --> DMZ
    Firewall --> CoreSwitch
    DMZ --> WebServer
    CoreSwitch --> DBServer
```

このように、実際のネットワーク構成に近い図を短いコードで表現できるのがMermaidの魅力です。

スタイリング機能を使えば、より視覚的に分かりやすい図を作成できます:

mermaidgraph TD
    A[PC] --> B[スイッチ]
    B --> C[ルーター]
    
    classDef pcStyle fill:#e1f5fe
    classDef networkStyle fill:#f3e5f5
    classDef internetStyle fill:#e8f5e8
    
    class A pcStyle
    class B,C networkStyle
markdown```mermaid
graph TD
    A[PC] --> B[スイッチ]
    B --> C[ルーター]
    
    classDef pcStyle fill:#e1f5fe
    classDef networkStyle fill:#f3e5f5
    classDef internetStyle fill:#e8f5e8
    
    class A pcStyle
    class B,C networkStyle
```

色分けにより、機器の種類や役割を直感的に理解できるようになります。

コードベースでの図表管理のメリット

コードとして管理することで得られるメリットは計り知れません。まず、バージョン管理システムとの完全な統合が可能になります。

Gitを使った管理により、以下のような運用が実現できます:

bash# 新しいブランチでネットワーク変更を計画
git checkout -b feature/add-new-server

# ネットワーク図を更新
vim network-diagram.md

# 変更をコミット
git add network-diagram.md
git commit -m "Add new application server to DMZ"

# プルリクエストで承認プロセス
git push origin feature/add-new-server

このワークフローにより、ネットワーク変更の計画から実装まで、すべてが追跡可能になります。

差分表示機能も大きなメリットです。GitHubやGitLabでは、Mermaid図の変更を視覚的に確認できるため、何が変更されたかが一目で分かります。

さらに、自動化との連携も可能です。ネットワーク監視システムやインフラ管理ツールと連携して、実際の構成変更に応じて図を自動更新するスクリプトを作成できます:

javascript// 自動更新スクリプトの例
const fs = require('fs');
const networkConfig = require('./network-config.json');

function generateMermaidDiagram(config) {
    let diagram = 'graph TD\n';
    
    config.servers.forEach(server => {
        diagram += `    ${server.id}[${server.name}]\n`;
    });
    
    config.connections.forEach(conn => {
        diagram += `    ${conn.from} --> ${conn.to}\n`;
    });
    
    return diagram;
}

const updatedDiagram = generateMermaidDiagram(networkConfig);
fs.writeFileSync('./network-diagram.md', updatedDiagram);

このような自動化により、設定ファイルの変更が即座にドキュメントに反映されるようになります。

具体例

基本的なネットワーク構成図の作成

実際にMermaidを使って、段階的にネットワーク構成図を作成してみましょう。最初は小規模オフィスの基本的な構成から始めます。

まず、最もシンプルな構成を定義します:

mermaidgraph LR
    PC1[営業部PC] --> SW1[フロアスイッチ]
    PC2[経理部PC] --> SW1
    PC3[総務部PC] --> SW1
    SW1 --> RTR1[ルーター]
    RTR1 --> INET([インターネット])
markdown```mermaid
graph LR
    PC1[営業部PC] --> SW1[フロアスイッチ]
    PC2[経理部PC] --> SW1
    PC3[総務部PC] --> SW1
    SW1 --> RTR1[ルーター]
    RTR1 --> INET([インターネット])
```

この基本構成に、サーバーとセキュリティ機器を追加してみます:

mermaidgraph TD
    INET([インターネット])
    FW[ファイアウォール]
    RTR1[メインルーター]
    SW1[フロアスイッチ]
    
    %% クライアント機器
    PC1[営業部PC]
    PC2[経理部PC]
    PC3[総務部PC]
    
    %% サーバー
    FILE[ファイルサーバー]
    MAIL[メールサーバー]
    
    %% 接続関係
    INET --> FW
    FW --> RTR1
    RTR1 --> SW1
    
    SW1 --> PC1
    SW1 --> PC2
    SW1 --> PC3
    SW1 --> FILE
    SW1 --> MAIL
markdown```mermaid
graph TD
    INET([インターネット])
    FW[ファイアウォール]
    RTR1[メインルーター]
    SW1[フロアスイッチ]
    
    %% クライアント機器
    PC1[営業部PC]
    PC2[経理部PC]
    PC3[総務部PC]
    
    %% サーバー
    FILE[ファイルサーバー]
    MAIL[メールサーバー]
    
    %% 接続関係
    INET --> FW
    FW --> RTR1
    RTR1 --> SW1
    
    SW1 --> PC1
    SW1 --> PC2
    SW1 --> PC3
    SW1 --> FILE
    SW1 --> MAIL
```

さらに、IP アドレス情報を含めた詳細な構成にしてみましょう:

mermaidgraph TD
    INET([インターネット<br/>])
    FW["ファイアウォール<br/>192.168.1.1"]
    RTR1["メインルーター<br/>192.168.1.254"]
    SW1["フロアスイッチ<br/>192.168.10.1"]
    
    %% クライアント機器
    PC1["営業部PC<br/>192.168.10.11"]
    PC2["経理部PC<br/>192.168.10.12"]
    PC3["総務部PC<br/>192.168.10.13"]
    
    %% サーバー
    FILE["ファイルサーバー<br/>192.168.10.100"]
    MAIL["メールサーバー<br/>192.168.10.101"]
    
    %% 接続関係
    INET --> FW
    FW --> RTR1
    RTR1 --> SW1
    
    SW1 --> PC1
    SW1 --> PC2
    SW1 --> PC3
    SW1 --> FILE
    SW1 --> MAIL
    
    %% スタイル定義
    classDef internet fill:#e3f2fd
    classDef security fill:#ffebee
    classDef network fill:#f3e5f5
    classDef client fill:#e8f5e8
    classDef server fill:#fff3e0
    
    class INET internet
    class FW security
    class RTR1,SW1 network
    class PC1,PC2,PC3 client
    class FILE,MAIL server
markdown```mermaid
graph TD
    INET([インターネット<br/>])
    FW["ファイアウォール<br/>192.168.1.1"]
    RTR1["メインルーター<br/>192.168.1.254"]
    SW1["フロアスイッチ<br/>192.168.10.1"]
    
    %% クライアント機器
    PC1["営業部PC<br/>192.168.10.11"]
    PC2["経理部PC<br/>192.168.10.12"]
    PC3["総務部PC<br/>192.168.10.13"]
    
    %% サーバー
    FILE["ファイルサーバー<br/>192.168.10.100"]
    MAIL["メールサーバー<br/>192.168.10.101"]
    
    %% 接続関係
    INET --> FW
    FW --> RTR1
    RTR1 --> SW1
    
    SW1 --> PC1
    SW1 --> PC2
    SW1 --> PC3
    SW1 --> FILE
    SW1 --> MAIL
    
    %% スタイル定義
    classDef internet fill:#e3f2fd
    classDef security fill:#ffebee
    classDef network fill:#f3e5f5
    classDef client fill:#e8f5e8
    classDef server fill:#fff3e0
    
    class INET internet
    class FW security
    class RTR1,SW1 network
    class PC1,PC2,PC3 client
    class FILE,MAIL server
```

このように、段階的に情報を追加することで、複雑なネットワーク構成も理解しやすく表現できます。

VLAN 構成の表現も可能です:

mermaidgraph TD
    SW1[コアスイッチ]
    
    %% VLAN 10: 営業部
    subgraph VLAN10 ["VLAN 10 (営業部)"]
        PC11[営業PC1]
        PC12[営業PC2]
        SALES[営業サーバー]
    end
    
    %% VLAN 20: 経理部
    subgraph VLAN20 ["VLAN 20 (経理部)"]
        PC21[経理PC1]
        PC22[経理PC2]
        ACC[経理サーバー]
    end
    
    %% VLAN 99: 管理
    subgraph VLAN99 ["VLAN 99 (管理)"]
        ADM[管理サーバー]
        MON[監視サーバー]
    end
    
    SW1 --> VLAN10
    SW1 --> VLAN20
    SW1 --> VLAN99
markdown```mermaid
graph TD
    SW1[コアスイッチ]
    
    %% VLAN 10: 営業部
    subgraph VLAN10 ["VLAN 10 (営業部)"]
        PC11[営業PC1]
        PC12[営業PC2]
        SALES[営業サーバー]
    end
    
    %% VLAN 20: 経理部
    subgraph VLAN20 ["VLAN 20 (経理部)"]
        PC21[経理PC1]
        PC22[経理PC2]
        ACC[経理サーバー]
    end
    
    %% VLAN 99: 管理
    subgraph VLAN99 ["VLAN 99 (管理)"]
        ADM[管理サーバー]
        MON[監視サーバー]
    end
    
    SW1 --> VLAN10
    SW1 --> VLAN20
    SW1 --> VLAN99
```

複雑なネットワーク構成の表現

大規模企業のネットワーク構成では、より複雑な要素を扱う必要があります。データセンター、クラウド環境、リモートオフィスなどを含む構成を表現してみましょう。

まず、マルチサイト構成の全体像を示します:

mermaidgraph TD
    %% インターネット
    INET([インターネット])
    
    %% 本社
    subgraph HQ ["本社"]
        HQ_FW[本社FW]
        HQ_RTR[本社ルーター]
        HQ_SW[本社スイッチ]
        HQ_SRV[本社サーバー群]
    end
    
    %% 支社A
    subgraph BR_A ["支社A"]
        BRA_FW[支社A FW]
        BRA_RTR[支社A ルーター]
        BRA_SW[支社A スイッチ]
    end
    
    %% 支社B
    subgraph BR_B ["支社B"]
        BRB_FW[支社B FW]
        BRB_RTR[支社B ルーター]
        BRB_SW[支社B スイッチ]
    end
    
    %% クラウド
    subgraph CLOUD ["クラウド (AWS)"]
        AWS_VPC[VPC]
        AWS_ALB[ロードバランサー]
        AWS_EC2[Webサーバー群]
        AWS_RDS[データベース]
    end
    
    %% 接続関係
    INET --> HQ_FW
    INET --> BRA_FW
    INET --> BRB_FW
    INET --> AWS_VPC
    
    HQ_FW --> HQ_RTR
    HQ_RTR --> HQ_SW
    HQ_SW --> HQ_SRV
    
    BRA_FW --> BRA_RTR
    BRA_RTR --> BRA_SW
    
    BRB_FW --> BRB_RTR
    BRB_RTR --> BRB_SW
    
    AWS_VPC --> AWS_ALB
    AWS_ALB --> AWS_EC2
    AWS_EC2 --> AWS_RDS
    
    %% VPN接続
    HQ_RTR -.->|VPN| BRA_RTR
    HQ_RTR -.->|VPN| BRB_RTR
    HQ_RTR -.->|VPN| AWS_VPC
markdown```mermaid
graph TD
    %% インターネット
    INET([インターネット])
    
    %% 本社
    subgraph HQ ["本社"]
        HQ_FW[本社FW]
        HQ_RTR[本社ルーター]
        HQ_SW[本社スイッチ]
        HQ_SRV[本社サーバー群]
    end
    
    %% 支社A
    subgraph BR_A ["支社A"]
        BRA_FW[支社A FW]
        BRA_RTR[支社A ルーター]
        BRA_SW[支社A スイッチ]
    end
    
    %% 支社B
    subgraph BR_B ["支社B"]
        BRB_FW[支社B FW]
        BRB_RTR[支社B ルーター]
        BRB_SW[支社B スイッチ]
    end
    
    %% クラウド
    subgraph CLOUD ["クラウド (AWS)"]
        AWS_VPC[VPC]
        AWS_ALB[ロードバランサー]
        AWS_EC2[Webサーバー群]
        AWS_RDS[データベース]
    end
    
    %% 接続関係
    INET --> HQ_FW
    INET --> BRA_FW
    INET --> BRB_FW
    INET --> AWS_VPC
    
    HQ_FW --> HQ_RTR
    HQ_RTR --> HQ_SW
    HQ_SW --> HQ_SRV
    
    BRA_FW --> BRA_RTR
    BRA_RTR --> BRA_SW
    
    BRB_FW --> BRB_RTR
    BRB_RTR --> BRB_SW
    
    AWS_VPC --> AWS_ALB
    AWS_ALB --> AWS_EC2
    AWS_EC2 --> AWS_RDS
    
    %% VPN接続
    HQ_RTR -.->|VPN| BRA_RTR
    HQ_RTR -.->|VPN| BRB_RTR
    HQ_RTR -.->|VPN| AWS_VPC
```

次に、データセンター内部の詳細な構成を表現します:

mermaidgraph TD
    %% 外部接続
    ISP1[ISP-A]
    ISP2[ISP-B]
    
    %% 境界層
    subgraph EDGE ["境界層"]
        FW1[ファイアウォール1]
        FW2[ファイアウォール2]
        LB[ロードバランサー]
    end
    
    %% コア層
    subgraph CORE ["コア層"]
        CORE1[コアスイッチ1]
        CORE2[コアスイッチ2]
    end
    
    %% 集約層
    subgraph AGG ["集約層"]
        AGG1[集約SW1]
        AGG2[集約SW2]
        AGG3[集約SW3]
        AGG4[集約SW4]
    end
    
    %% アクセス層
    subgraph ACCESS ["アクセス層"]
        direction TB
        ACC1[アクセスSW1]
        ACC2[アクセスSW2]
        ACC3[アクセスSW3]
        ACC4[アクセスSW4]
    end
    
    %% サーバー群
    subgraph SERVERS ["サーバー層"]
        WEB[Webサーバー群]
        APP[APサーバー群]
        DB[DBサーバー群]
        STORAGE[ストレージ]
    end
    
    %% 冗長接続
    ISP1 --> FW1
    ISP2 --> FW2
    FW1 --> LB
    FW2 --> LB
    
    LB --> CORE1
    LB --> CORE2
    
    CORE1 --> AGG1
    CORE1 --> AGG2
    CORE2 --> AGG3
    CORE2 --> AGG4
    
    AGG1 --> ACC1
    AGG2 --> ACC2
    AGG3 --> ACC3
    AGG4 --> ACC4
    
    ACC1 --> WEB
    ACC2 --> APP
    ACC3 --> DB
    ACC4 --> STORAGE
    
    %% 冗長パス(点線で表現)
    CORE1 -.-> AGG3
    CORE1 -.-> AGG4
    CORE2 -.-> AGG1
    CORE2 -.-> AGG2
markdown```mermaid
graph TD
    %% 外部接続
    ISP1[ISP-A]
    ISP2[ISP-B]
    
    %% 境界層
    subgraph EDGE ["境界層"]
        FW1[ファイアウォール1]
        FW2[ファイアウォール2]
        LB[ロードバランサー]
    end
    
    %% コア層
    subgraph CORE ["コア層"]
        CORE1[コアスイッチ1]
        CORE2[コアスイッチ2]
    end
    
    %% 集約層
    subgraph AGG ["集約層"]
        AGG1[集約SW1]
        AGG2[集約SW2]
        AGG3[集約SW3]
        AGG4[集約SW4]
    end
    
    %% アクセス層
    subgraph ACCESS ["アクセス層"]
        direction TB
        ACC1[アクセスSW1]
        ACC2[アクセスSW2]
        ACC3[アクセスSW3]
        ACC4[アクセスSW4]
    end
    
    %% サーバー群
    subgraph SERVERS ["サーバー層"]
        WEB[Webサーバー群]
        APP[APサーバー群]
        DB[DBサーバー群]
        STORAGE[ストレージ]
    end
    
    %% 冗長接続
    ISP1 --> FW1
    ISP2 --> FW2
    FW1 --> LB
    FW2 --> LB
    
    LB --> CORE1
    LB --> CORE2
    
    CORE1 --> AGG1
    CORE1 --> AGG2
    CORE2 --> AGG3
    CORE2 --> AGG4
    
    AGG1 --> ACC1
    AGG2 --> ACC2
    AGG3 --> ACC3
    AGG4 --> ACC4
    
    ACC1 --> WEB
    ACC2 --> APP
    ACC3 --> DB
    ACC4 --> STORAGE
    
    %% 冗長パス(点線で表現)
    CORE1 -.-> AGG3
    CORE1 -.-> AGG4
    CORE2 -.-> AGG1
    CORE2 -.-> AGG2
```

セキュリティゾーンを明確に分けた構成も重要です:

mermaidgraph TD
    INET([インターネット])
    
    %% DMZ
    subgraph DMZ ["DMZ"]
        DMZ_FW[DMZ ファイアウォール]
        WEB_PROXY[Webプロキシ]
        MAIL_RELAY[メールリレー]
        DNS_EXT[外部DNS]
    end
    
    %% 内部ネットワーク
    subgraph INTERNAL ["内部ネットワーク"]
        INT_FW[内部ファイアウォール]
        
        subgraph MGMT ["管理セグメント"]
            AD[Active Directory]
            BACKUP[バックアップサーバー]
            MON[監視サーバー]
        end
        
        subgraph USERS ["ユーザーセグメント"]
            USER_SW[ユーザースイッチ]
            PC_GROUP[クライアントPC群]
        end
        
        subgraph SERVERS ["サーバーセグメント"]
            APP_SRV[アプリケーションサーバー]
            DB_SRV[データベースサーバー]
            FILE_SRV[ファイルサーバー]
        end
    end
    
    %% 接続関係
    INET --> DMZ_FW
    DMZ_FW --> WEB_PROXY
    DMZ_FW --> MAIL_RELAY
    DMZ_FW --> DNS_EXT
    
    DMZ_FW --> INT_FW
    INT_FW --> MGMT
    INT_FW --> USERS
    INT_FW --> SERVERS
    
    USER_SW --> PC_GROUP
    
    %% セキュリティ境界を色分け
    classDef dmz fill:#ffebee
    classDef internal fill:#e8f5e8
    classDef mgmt fill:#fff3e0
    classDef critical fill:#f3e5f5
    
    class DMZ_FW,WEB_PROXY,MAIL_RELAY,DNS_EXT dmz
    class INT_FW,USER_SW,PC_GROUP internal
    class AD,BACKUP,MON mgmt
    class APP_SRV,DB_SRV,FILE_SRV critical
markdown```mermaid
graph TD
    INET([インターネット])
    
    %% DMZ
    subgraph DMZ ["DMZ"]
        DMZ_FW[DMZ ファイアウォール]
        WEB_PROXY[Webプロキシ]
        MAIL_RELAY[メールリレー]
        DNS_EXT[外部DNS]
    end
    
    %% 内部ネットワーク
    subgraph INTERNAL ["内部ネットワーク"]
        INT_FW[内部ファイアウォール]
        
        subgraph MGMT ["管理セグメント"]
            AD[Active Directory]
            BACKUP[バックアップサーバー]
            MON[監視サーバー]
        end
        
        subgraph USERS ["ユーザーセグメント"]
            USER_SW[ユーザースイッチ]
            PC_GROUP[クライアントPC群]
        end
        
        subgraph SERVERS ["サーバーセグメント"]
            APP_SRV[アプリケーションサーバー]
            DB_SRV[データベースサーバー]
            FILE_SRV[ファイルサーバー]
        end
    end
    
    %% 接続関係
    INET --> DMZ_FW
    DMZ_FW --> WEB_PROXY
    DMZ_FW --> MAIL_RELAY
    DMZ_FW --> DNS_EXT
    
    DMZ_FW --> INT_FW
    INT_FW --> MGMT
    INT_FW --> USERS
    INT_FW --> SERVERS
    
    USER_SW --> PC_GROUP
    
    %% セキュリティ境界を色分け
    classDef dmz fill:#ffebee
    classDef internal fill:#e8f5e8
    classDef mgmt fill:#fff3e0
    classDef critical fill:#f3e5f5
    
    class DMZ_FW,WEB_PROXY,MAIL_RELAY,DNS_EXT dmz
    class INT_FW,USER_SW,PC_GROUP internal
    class AD,BACKUP,MON mgmt
    class APP_SRV,DB_SRV,FILE_SRV critical
```

これらの例から分かるように、Mermaidを使えば、シンプルな構成から複雑なエンタープライズレベルの構成まで、統一された記法で表現できます。重要なのは、段階的に情報を追加していくことで、読む人のレベルに応じた図を提供できることです。

図で理解できる要点:

  • 基本構成から複雑な構成まで、同じ記法で統一的に表現可能
  • セキュリティゾーンや VLAN などの論理的な分離も直感的に表現
  • 冗長構成や接続関係を明確に可視化

まとめ

Mermaidを使ったネットワーク構成図の作成は、従来の手法が抱えていた多くの課題を解決する画期的なアプローチです。テキストベースの記述により、コードのように管理できるネットワークドキュメントが実現できます。

最も重要なメリットは、バージョン管理との完全な統合でしょう。Gitを使った変更履歴の追跡、ブランチを使った変更計画の管理、プルリクエストによる承認プロセスなど、ソフトウェア開発で培われたベストプラクティスをネットワーク管理にも適用できるようになります。

学習コストの低さも見逃せません。基本的な記法は非常にシンプルで、プログラマーでなくても数時間で習得できます。一度覚えてしまえば、従来よりもはるかに効率的に図を作成・更新できるようになるでしょう。

自動化への道筋も開けます。設定管理ツールや監視システムと連携することで、実際のネットワーク構成変更に応じて図を自動更新するワークフローも構築可能です。これにより、ドキュメントと実際の構成の乖離という長年の課題も解決できます。

また、検索性の向上により、大規模なネットワーク環境でも必要な情報を素早く見つけられるようになります。特定のサーバー名や IP アドレスでの検索が可能になることで、トラブルシューティングの効率も大幅に改善されるはずです。

チームコラボレーションの強化という観点でも、Mermaidの価値は計り知れません。GitHub や GitLab での図の共有、差分の確認、コメントでの議論など、現代的な開発ワークフローをネットワーク管理にも取り入れることができます。

導入を検討される際は、まず小さなプロジェクトから始めることをお勧めします。既存の簡単なネットワーク図をMermaidで再現してみて、チームメンバーの反応を見ながら徐々に適用範囲を広げていくのが成功への近道です。

現在のネットワーク運用に課題を感じている方は、ぜひMermaidを試してみてください。きっと、新しい可能性を発見できるはずです。

関連リンク