良いNW構成図の「理由」について考えてみる (1)

## はじめに

これまで、[システムの構成をモデル中心に操作したい、そのためにモデルをもっと構成図の形で分かりやすく可視化できないか、という話をしてきました](https://qiita.com/corestate55/items/8a39af553785fd77c20a#%E8%AA%B2%E9%A1%8C%E6%84%9F)。いくつか可視化を[試してみた](https://qiita.com/corestate55/items/849b8a204e24a2e7a8fb)のですが、この先どう改良できるかとか、ほかにどんな可視化の方法が考えられるかとか考えようと思うと、モデル (データ) を図として表現するための原理原則や基礎知識が必要になるよね……と思ったわけです。ネットワーク構成図を見て、わかりやすい図と分かりにくい図では何が違うのか? 良いネットワーク構成図では「なぜ・どこが」良いのか?

考えていたことの一部を [ネットワーク構成図を考える: NW図の基本とモデル指向NW図のススメ](https://speakerdeck.com/corestate55/osc-2020-tokyo-spring) という資料に起こしてみたところ、思ったよりも反響がありました。なのでこの辺の話もそこそこ興味のある人はいるだろうと。この資料の前半では、そもそもネットワーク構成図として何を表現したいのか、対象となるネットワークのこと・その構成要素やレイヤ間の関係性をちゃんと知ろうという話をしています。後半では、ネットワークの構成要素を図として表現する際にどういったことを考えるのか、図の目的を明確にする、モデルベースに考える、ということを解説しています。

ただ、この「モデルベースに考える」のところは、これだとやっぱりちょっとネットワークやってる人向けの説明になってる気がする。あと、ネットワークのことがわかっていても必ずしも「わかりやすい」図に起こせるわけではないので、「図の描きかたの良し悪し」についての話を入れたい。そのあたり、システム構成を図の形で表現するとき、「図を描く」にあたってどういう原理原則があるのかをもうちょっと説明できないか。

そんなわけで、直観的に良い構成図は「なぜ」良いのだろう? ネットワークを図として表現するときの原理原則って何だろう? それを基にどんな工夫をしているのだろう? 図を描くときにどういったポイントがあるのだろう? という話を考えてみたいと思います。[上に挙げた資料](https://speakerdeck.com/corestate55/osc-2020-tokyo-spring)に入れたの内容については特に触れないので、下敷きとして一度見ておいてもらえるとよいかと。

全4回です。

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

[2020-07-17 追記]

一連の記事を基に OSC でセミナーとかをやってたりしました。動画と資料をのせておきますのでこちらもどうぞ!

<iframe width="560" height="315" src="https://www.youtube.com/embed/RZRphyEas4E" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>

<script async class="speakerdeck-embed" data-id="c238caf7c7214131bb45551076e2ae53" data-ratio="1.77777777777778" src="//speakerdeck.com/assets/embed.js"></script>

<iframe width="560" height="315" src="https://www.youtube.com/embed/Vw4INUiX_n4" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>

<script async class="speakerdeck-embed" data-id="2d298c9cf87d432ea1ca4abd6b743014" data-ratio="1.77777777777778" src="//speakerdeck.com/assets/embed.js"></script>

## 定石とこの後解説することの概要

ネットワーク構成図の描き方について、Tipsとか解説記事とかあるのでまずはそこをおさらいしてみましょう。

* [わかるネットワーク図の書き方 \| 日経クロステック(xTECH)](https://xtech.nikkei.com/it/article/COLUMN/20091119/340757/) (日経ネットワーク, 2009)
    * 論理構成と物理構成を分けよ
    * 大胆に省略せよ
    * ルールを決めよ
* [O'Reilly Japan \- ネットワークウォリア](https://www.oreilly.co.jp/books/9784873113548/) (O'Reilly, 2007)
    * 簡潔さを保つ
    * 物理的な概念と論理的な概念を分離する
    * 線を交差させない
    * 直線をそろえる
    * アイコンを整列させる
* [Interopのネットワーク図を描くエンジニア:Geekなぺーじ](https://www.geekpage.jp/blog/?id=2010/6/10/2) (2010)
    * 全体を見渡すことができる
    * 運用に必要な情報が網羅されている
    * まとまっている
    * 目線移動が自然
    * 説明が不要であること
* [図面とともにあらんことを!:第二面 \- ネットワークのゲンバ\(2014\) \| Interop Tokyo 2014](https://www.f2ff.jp/interop/2014/noc/shownet-topology-map_4.php) (2014)
    * 箱の配置をトポロジレイヤでそろえること
    * ヒモを曲げないこと
    * ヒモの交差を最小にすること
    * 色に統一感とメリハリを与えること
    * 冗長な情報をできるだけ排除すること
* [17 Tips for Creating Better Network Diagrams](http://networkdiagram101.com/) &  eBook, [Creating Advanced Network Diagrams \| networkdiagram101\.com](http://networkdiagram101.com/?page_id=19421)
    * 紙とペンから始めよう (Start with paper and pencil)
    * 文字を強調しよう (Enhance type)
    * レイヤーを使おう (Use layers)
    * 線の交差を避けよう (Avoid crossing links)
    * 詳細な図には差し込み図を使おう (Use inset for detail)
    * グリッドとガイドを使おう (Use grids and guides)
    * 凡例またはキーワードを使おう (Use legend or key)
    * 枠線を使おう (Use a border)
    * アンカーポイントを使おう (Use anchor points)
    * 読者を知ろう (Know your audience)
    * 透明度を使おう (Use transparency)
    * カスタムアイコンを作ろう (Make custom icon sets)
    * 汎用アイコンをカスタマイズしよう (Customize generic iconws)
    * 会社のテーマカラーを使おう (Use company colors)
    * 階層的に描こう (Draw hierarchically)
    * オブジェクトをロックしよう (Lock objects)
    * フェイルオーバーシナリオを示そう (Show failover scenarios)

[networkdiagram101.com](http://networkdiagram101.com/) は最近見たサイトなんですが、Visio ベースのよくできた図を掲載しています。電子書籍のほうも買ってみたけど Visio の使い方の Tips をはじめ Web で取り上げた内容のより詳細な解説とかいろいろなサンプルの例示とかがあって面白い。

というのを含めてざっと並べてしまうと、図の描き方の話もツールの使い方等テクニックの話もあるのですが、今回取り上げるのは共通して取り上げられる定石と「なぜ」それが重要なのか、という話です。

* 箱 (アイコン) の統一と配置(整列)
* ヒモ (リンク) のひき方・交差を避けること

それらに対する原理として、ゲシュタルトの法則 (プレグナンツの法則、群化の法則とも呼ばれる) をもとに「なぜ・どうして」という理由を考えてみたいと思います。このあたりは認知心理学 (視覚心理学) とかの話になるんですが、いくつか資料を読みかじっただけなので説明としてはちょっと怪しくなるかもしれません……変な内容があったら指摘ください。ゲシュタルトの法則がどんなものなのかは Web 検索するとある程度分かると思います。私が見ていたサイトはこの辺です。

* [ゲシュタルト心理学 \- Wikipedia](https://ja.wikipedia.org/wiki/%E3%82%B2%E3%82%B7%E3%83%A5%E3%82%BF%E3%83%AB%E3%83%88%E5%BF%83%E7%90%86%E5%AD%A6)
* [ゲシュタルト要因(プレグナンツの法則)とは? デザインを見やすくする7つの法則を活用しよう│LearnTern(ラン・タン)](https://learn-tern.com/gestalt/)
* [ゲシュタルトの法則とは? 資料作りの前にチェック! \- STUDY HACKER|これからの学びを考える、勉強法のハッキングメディア](https://studyhacker.net/gestalt-law)
* [情報整理に役立つ「ゲシュタルトの法則」│Design and](https://design-and.com/post-863)
* [プレグナンツの法則|3inowayosuke|note](https://note.com/3inowayosuke/n/n10bb3ee4e25c)

## 視覚処理について

ゲシュタルトの法則で心理学の話が出てきたのでついでに。図 (diagram) は「視覚変数」によって構成されています。視覚変数が表現するものは数値 (quantitative)・順序 (ordinal)・名目 (nominal) とあるんだけど、それらを表現するために適した視覚変数と適していない視覚変数がある (Channel)。このへんは[先に挙げた資料](https://speakerdeck.com/corestate55/osc-2020-tokyo-spring)でも触れました。

データを図に表現するときの原理的な話については  [改訂版: プログラマーが効果的な可視化を作成する (前編) \- Qiita](https://qiita.com/keiono/items/9042bf58224ca54bdb45)  の解説がわかりやすいです。あと、[情報を見える形にする技術 \| ボーンデジタル](https://www.borndigital.co.jp/book/203.html) はコンピュータによる図形の表現や人とのインタラクション等について解説が載っていてとても良いです。
[![1-1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/154230/d853ba08-bbb6-dbd4-9aeb-daa8e7651408.png)](https://www.borndigital.co.jp/book/203.html)

この本の中では、脳で視覚情報がどのように処理されているのかという点についても解説されています。

* 視覚はまず感覚記憶(アイコニック記憶)→短期記憶→長期記憶へと移っていって処理される。
* 感覚記憶では、意識的な制御とは関係なく目からの視覚情報が自動的に保管されるため、注意の集中を必要としない処理がある (これを前注意処理と呼ぶ)。ここでは色・形・動き・空間位置に関する視覚特性が処理される。
* 短期記憶からあとは意識の集中が必要な処理になる (後注意処理)。

> 特に感覚記憶で発生する前注意視覚の処理は、前注意視覚属性が意識の介在なしで、ほぼ瞬間的に読者に知覚されるので、視覚表現作成の基礎です。それらの属性は周りから「浮かび上がる」ので、最も重要なデータ属性や、グループとして一緒に表現しなければならない項目は、前注意属性を使って符号化すべきです。
> Riccardo Mazza, [情報を見える形にする技術](https://www.borndigital.co.jp/book/203.html), 3.1 記憶, p.41, ボーンデジタル, 2011.

どうして図を描くのか、図を描く際に視覚変数の選択が重要なのか、という理由がこのあたりにありますよね。視覚処理には「注意の集中を必要としない」処理がある。上に挙げた [ShowNet 図解説記事](https://www.geekpage.jp/blog/?id=2010/6/10/2)では「説明が不要であること」というのがありますが、これは前注意処理で認識できること、 **色・形・動き・空間位置** で何を表現しているかを認識できること、ということなんじゃないかなーと思ったりするわけです。

## まとめ

今回は前置きの整理でした。[次回](https://qiita.com/corestate55/items/0bf658c494098e143e30)以降、「説明をしなくてもわかる」ためにどんな図の描きかたの工夫があるのか、それがどんな原理原則を基に理由付けできるのか、というのを考えてみます。