良いNW構成図の「理由」について考えてみる (4) - そのほか

## はじめに

全4回の4回目です:

* [良いNW構成図の「理由」について考えてみる \(1\)](https://qiita.com/corestate55/items/cc04bfd4c0bd1bcca789)
* [良いNW構成図の「理由」について考えてみる \(2\) \- 箱](https://qiita.com/corestate55/items/0bf658c494098e143e30)
* [良いNW構成図の「理由」について考えてみる \(3\) \- ヒモ](https://qiita.com/corestate55/items/c8c904bc1814b74384eb)
* 良いNW構成図の「理由」について考えてみる (4) - そのほか

[(2)では箱](https://qiita.com/corestate55/items/0bf658c494098e143e30)、[(3)ではヒモ](https://qiita.com/corestate55/items/c8c904bc1814b74384eb)の原理原則という話をしてきましたが、実際図にするうえですべての条件をきれいに満たせるかというとそんなことないですよね。制約がぶつかる場合にどういう工夫があるかを見てみましょう。あと、図の描き方としての工夫というところでいくつか小ネタを取り上げてみます。

## ヒモと箱の競合回避・例外処理について

印刷を前提にする構成図では特に、スペースやレイアウトに制約がある中で情報を埋め込むので、どこかで競合が起きてしまうことがあります。それをどうにかしないといけない。Interop 図から「線を曲げない」「箱の位置をそろえる」の競合についてみてみましょう。

![4-1a.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/154230/135daa82-2d75-f8f1-8bd0-426d52269632.png)
図1: Original: Interop2016図

図1(B) 4段目のルータは縦に整列 (B/C列) せずに内側に入っています (b/c列)。流れで行くと 1-2 段目と同じ間隔になる 3段目にルータを置いて [B3][C3] の位置に来そうですが、そうすると A列下 ～ [B2][C2] への斜めのリンクにかぶるので、それを避けたと思われます。仮に線を曲げたとすると (B)の黄色点線のようなラインになりますが、そうなると今度はその上の線 ([A3]-[C2], 紫色) とかぶってくるんですよね。Interop 2016 図ではヒモを曲げるほうが全体のレイアウトとの競合が起きやすい状態だったため、バックボーンの "はしご" をちょっとずらしているのでしょう。

対して Interop 2019 では同じ状況で「位置をそろえる」ことを優先して線を曲げています。

![4-2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/154230/1820abc5-2a0e-2977-2464-432292cf9550.png)
図2: Original: Interop2019図

図2 の ex4300 No.0-3 (B/C列の4つのスイッチ) はひとつのクラスタ (Virtual Chassis) を形成しています。この位置関係を保持することで「かたまり」に見せるほうを優先したと思われます。A列下のスイッチから [C1] に伸びている線はまげてありますが、その上の [A2]-[B1] のリンクと並行になるように線を引くことで "セット" として見せるように工夫されています。

Interop 2016図/2019図、線を曲げるか箱の配置を変えるか、どっちが良い悪いじゃなくて、何を優先して表現するかによって選択が変わるってことですね。

余談: ルータのアイコンだとリンクの集約ポイントがアイコン中点になってるけど、スイッチだとアイコンの角のところにも集約ポイントがあるようです。なかなか高度な操作をしている……。

## そのほかの工夫ポイント

### ノードのグルーピング

複数のノードを何らかの形でグルーピングする際の工夫を見てみましょう。
![4-3a.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/154230/487da624-0f04-7dd7-ddaa-d47cc832b50c.png)
図3: Original: Interop2019図

これは「併合の法則」そのままですね。併合の法則は、単純な閉じた図形を作っているものはまとまって見えるというものです。あいまいな部分や欠けている部分を補ってひとつのグループとしてとらえる。

![4-4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/154230/07fa5a46-eead-f661-236b-d8d6dd889d30.png)
図4: [情報整理に役立つ「ゲシュタルトの法則」│Design and](https://design-and.com/post-863)

図3 では明示的に線で囲んだりはしていません。カッコ状のグラデーションで、枠線などをつけないことで背景としてグルーピングを表現しています。もちろん線で囲ってしまってもよいし、実際 Interop 図のなかでも線によるグルーピングも使われています。枠線をつけて明示的にグループを作ると、図の構成要素として見えてしまいます。特に数が多い・入れ子があるとなると図を読み取りにくくなっていくので。ここではほかの要素(箱・ヒモ)を妨げないこと・背景に近いものとしてとらえられることを意識されていると思われます。

### 動き・向き・順序

「動き」も前注意処理される属性です。紙に印刷する静的な図でも、色や線 (間隔・太さ) をうまく使うことで動きや向き・順序を表すことができます。

![4-6a.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/154230/c1a14d4a-475f-5438-d011-e3dde211a76b.png)
図5: [Creating Advanced Network Diagrams \| networkdiagram101\.com](http://networkdiagram101.com/?page_id=19421), Chap.1 Design and Color Theory, p.12 (一部抜粋)

このあたりは「共通運命の法則」と関係がありそうです。共通運命の法則は、同じ方向に動いている(と判断できる)ものは同じグループだと認識される、という法則です。ここでは静的に動きを表現する例を取り上げていますが、コンピュータ上のインタラクティブな図では実際に動く・変化するもの (同時に移動する・点滅する etc) がひとつのまとまりとして認識されます。
![4-5a.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/154230/1f1ec017-dfdb-35dd-6401-679b36468adb.png)
図6: [ゲシュタルトの法則とは？　資料作りの前にチェック！ \- STUDY HACKER｜これからの学びを考える、勉強法のハッキングメディア](https://studyhacker.net/gestalt-law#5-%E5%85%B1%E9%80%9A%E9%81%8B%E5%91%BD%E3%81%AE%E6%B3%95%E5%89%87)

![4-7a.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/154230/073dee14-e6d1-435e-4ec2-7369b136c752.png)
図7: [Creating Advanced Network Diagrams \| networkdiagram101\.com](http://networkdiagram101.com/?page_id=19421), Chap.1 Design and Color Theory, p.16 (一部抜粋) & Chap.12 Technical Diagram Examples, p.264 (一部抜粋)

図7 はどちらも Wifi アクセスポイント (AP) に対する表現ですが、左は同心円の線の太さと間隔、右は色を使って「空間的な広がり」中心から外に向かう方向性を表現しています。アイコン等でデバイスの種別が明示されていますが、こうした表現を使うことで電波を発するものであること (図7右)、実際の空間内でそれがどこまで広がるのか (図7左)、というのを表しています。

### 図全体のレイアウト・対称性

「箱の位置をそろえる」ところでも触れましたが、システムの対称性を意識して図を描くことで構造や個々の関係性をとらえやすくなります。これは図全体のレイアウトについても同じ。Interop2019図だと特に fp1/2 の配置や各 Pod について、同等の機能グループを対称に配置するようになっています。

![4-5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/154230/2e78a664-6357-bab0-cd81-eebe65b12c76.png)
図8: Original: Interop2019図


## 構成図を書く際の考慮ポイント

全体のレイアウトを考える: まず、図の大枠・全体感を考えてトップダウンに作っていきましょう。

[図面とともにあらんことを！\-\-ShowNetのトポロジ図 \(2/4\)](https://www.f2ff.jp/interop/2013/noc/-shownet-topology-map2.php) では、図面担当のスタート地点として、粗くレイアウトを決めた PowerPoint の図が紹介されています。 [TIP 1 \- Use a pencil and paper](http://networkdiagram101.com/?page_id=13) は紙とペンでスケッチを描くことから始めようとなっています。

大きなシステム・複雑な図であればあるほど、まずは抽象的な図、全体感をつかむ図から初めて詳細化していくトップダウンなアプローチをとるべきでしょう。システムの構成を、より抽象度の高いグループでとらえてどこに何を配置するか決めてください。これは、システムの名称、セキュリティゾーン、部署名・地域名など様々な見方が想定されます。この図では何を示したいのか、それはどういったグループ・コンポーネントからなっているのかを置いてていきます。

個人的な失敗として、これをやらずにボトムアップでやった結果レイアウトが崩壊したことがあります……印刷したら紙面にうまく入らなかったり、全体のレイアウト調整を繰り返すことになって必要以上に時間を食ったり。大きなレイアウト変更は読む人にとっても負担になります。それまでの図で「どこに何があるのか」を覚えていたのに、地殻変動が起きて大陸移動しましたみたいのが起こると混乱してしまう……。

* 取りこぼしがないようにしましょう (あとから大きなパートを差し込むのは難しい)
* おおよその必要なスペースを設定しましょう (そこにはどんなものがどれくらい入るのか)
    * "今後" 拡張されることがわかっているのであればそれを見越してレイアウトを考えておくとよいです。

図面に収めるべきもの、何のために、それをどう見せるかというのがある程度整理できたら、あとはそれをどう表現するかというところです。箱・ヒモの話の中で、視覚変数をどう選ぶか、という話を入れてきました。図の中に埋め込みたい (埋め込むべき) 構成要素・それに対する情報は何か、などをざっと書き出しておくとよいです。あとからあれもこれもとネットワーク図に含める要素や情報を増やすと、それに対応する「視覚変数」のルールが追いつかなくなってしまいます。

* 先に凡例を書く……この図で使うべき視覚変数 =「語彙」は何か、そこにどんな意味をコーディングするか。
    * 視覚変数が語彙なら凡例は「辞書」です。
    * 見やすさ: 色や形の識別がしにくいものがないか → あとから視覚変数の見直しなどにならないように、なるべく早いうちに視覚変数を固めましょう。
* ラベルとして表記する情報
    * [図面とともにあらんことを！：第二面 \- ネットワークのゲンバ\(2014\)](https://www.f2ff.jp/interop/2014/noc/shownet-topology-map_4.php) や  [TIP 2 \- Enhance your type](http://networkdiagram101.com/?page_id=109) では、図のラベル (ラベルとして記載すべき内容) やフォントの選択など見せ方の工夫についても触れられています。文字情報も重要です。

図の中に、順序・繰り返し・パターンを作る : これもひとつの「図のルール」ですが、同じつくりのもの・順序があるものなどは、それが明確にわかるような位置・並び・色などのパターンを作ります。設計上決められたルール (パターン) を図として明確に表現できるようなレイアウト、あるいはルールわかりやすい図に基づいた設計、それぞれのフィードバックがちゃんとできること。パターンがはっきりしていると、そこから外れるもの・イレギュラーなものがわかりやすくなります。個別に見るべき「木」とまとめて扱える「森」を分けられるかどうか考えましょう。


* 図の中でパターンを明確にすることで、そこを多少ふさいでも意味が取れるようになったり、抽象化や省略ができるようになったりします。
* 逆に、図の中からそうしたパターンが見つけられないものは、何か設計が怪しいのか、歴史的経緯でポリシがそろえられていないのか、何かしらのマイナス要因があることが疑われます。通常、ネットワーク設計・運用では同じものを展開しよう、イレギュラーを減らそう、という方向に動くので。

## おわりに

わかりやすいネットワーク構成図は「どういう理由で」わかりやすいのかという話を、認知心理学の話を基に[^A] いくつか考えてみました。ネットワーク図での構成要素や定石にどんな原理原則があるのか、位置・色・形などを統一することがなぜ重要なのか、競合するところやケースバイケースになることはどういうところなのか、そうしたケースではどういった描き方の工夫があるのか、というのがちょっとでも伝わるとよいのですがどうでしょうね?

[第1回](https://qiita.com/corestate55/items/cc04bfd4c0bd1bcca789) で[紹介した資料](https://speakerdeck.com/corestate55/osc-2020-tokyo-spring) ではモデルベースに考えるという話を入れていますが、モデルベースで考えることで、図の構成要素・視覚変数へのマッピング、規則を統一しやすくなります。そのうえで今回 (2)-(4) で上げたような原理原則を踏まえて意味を加えつつ図の形にしていきます。

個人的な感覚では、見やすい図を描くというのは、構造の明確なドキュメントを描く、という感覚に近いです。文体、セクションの立て方やフォントの選び方、文書全体のスタイルを統一して「余計なことに気を使わせない」「本題に集中させる」こと。図 (ネットワーク構成図) の場合そうした「語彙」「スタイル」を 色・形・動き・空間位置 で表現するので、バリエーションが多く、感覚的でなかなか明文化しにくい……。

本当は今回やったような話と合わせて、ネットワーク構成図でよくあるパターンみたいな話……パターンランゲージ的な形でネットワーク構成図を語ることができないものだろうかと考えてたんですが、そこまで枠を広げてしまうとうまくまとめられる気がしなかったので、いったんここまでで放出しておきます。

[^A]: 最初のほうでも書きましたが、この辺の知識は割と付け焼刃なので、変な解釈をしているようなのがあったらコメントください…。