(16日目) 平行世界の blockdiag シリーズ(2)

今日のアドベントカレンダーはおとといに引き続き、未だ見ぬ blockdiag の紹介をしたいと思います。

フローチャート

最初の図はフローチャートです。プログラムの流れを可視化するための図ですね。

フローチャート自体は blockdiag でも書くことができますが、
アイディアとしてはフローチャート用のツールをつくろうと考えています。
フローチャート専用の blockdiag をつくろうと思っているのは主に文法面です。
blockdiag を使って簡単なフローチャートを書いてみると、実は結構記述数が多くなります。

blockdiag {
  edge_layout = flowchart;

  B [shape = flowchart.condition];
  A -> B;
       B -> C [label = Yes];
       B -> D [label = No];
}

記述量が多くなってしまうのは、分岐のところでノードの形をひし形に変えたり、
分岐条件のラベルを定義するのに記述しなくてはならないことが多いためです。

まだ時間をかけて考えたわけではありませんが、
次のような文法にすると書きやすく読みやすくなるのではないかと考えています。

flowchartdiag {
  A -> <B>: Yes -> C,
            No  -> D;
}

書きやすさについては何度か実際に書いてみるのがいいと思っているので、
どこかまとまった時間が取れるようになったら手をかけてみる予定です。

でも、文法を増やすことで混乱してしまうかも…という考えも頭をよぎるので、
形になるのはしばらく後になるかもしれません:p

その図は必要なものなのか: あればやや嬉しい
図である必要はあるか: はい
すでにツールは存在しないか: あると思う
文法: 練り込みが必要
レイアウト方法: blockdiag のもので OK

物理ネットワーク図

次の図は物理ネットワーク図です。
nwdiag で扱っている論理ネットワーク図は IP をベースにした図ですが、
物理ネットワーク図では物理的な結線を表現します。

nwdiag 系のツールとして次に取り組もうと思っているものです。
物理と論理、両方のツールを組み合わせることで、
ネットワークのドキュメントがカバーできるんじゃないかと考えています。

とはいえ、物理ネットワーク図は統一化されたフォーマットが存在しないため、
どういった図にすると利用者が満足できるのかがまだつかめていません。
また、担当しているネットワークの規模やレイヤーによって記述する対象が変わってくるため、
物理ネットワーク図に正解はないのではないかと感じています。

nwdiag をきっかけにネットワーク技術者とお話する機会がよくあるので、
物理ネットワーク図については気長にアイディアをまとめていく予定です。


その図は必要なものなのか: はい
図である必要はあるか: はい
すでにツールは存在しないか: 大量にある。有償ツールもある。自動レイアウトできるツールは要調査。
文法: 未定
レイアウト方法: 未定 (まずは書くべき図を理解する)

回路図

次の図は電子回路などの配線を示した回路図です。
僕自身はほとんど関わらない分野なのですが、
ブロック図に比較的近い図としてリクエストをもらったことがああります。

シンプルな図なので描画自体は大変ではないと思うのですが、
どういうルールで並べるのかというのがさっぱり理解できないので、
作る上ではそこが問題になりそうです。

おそらくこのツールの延長線上にハードウェア記述言語(HDL)があるんじゃないかと思うのと、
LSI のレイアウト部分は集積度を上げるためにいろんな会社が苦労している部分だったはずなので、
いろいろ考えると終わりのない世界に向かっていきそうな気がしています。

その図は必要なものなのか: おそらく…
図である必要はあるか: はい
すでにツールは存在しないか: あるはず。
文法: 考えてません
レイアウト方法: ルールを把握しないといけない

プロパティグラフ

プロパティグラフは GraphDB の根底にある概念で、ノード間の関係にプロパティが付与されたものです。
MongoDB などの定義の可視化用にツールをリクエストされました。

詳しく調べてはいないのですが、レイアウト面で非常に手こずる予感がしています。
簡単な所ではばねモデルを使って均等配置すればよいのではないかと思っていますが、
数式を見てやる気が落ちているところです。

その図は必要なものなのか: おそらく必要
図である必要はあるか: はい
すでにツールは存在しないか: 似たようなツールはいくつかあるみたい
文法: まだ考えてない
レイアウト方法: まずはばねモデルを理解するところから…

時計

なんという図なのかは分からないのですが、
一日の時間の使い方などを模した図が簡単に作れるとおもしろいかなーと考えたことがあります。

間取り図、座席表

部屋の間取り図や座席表が作れると面白いんじゃないか、と言われたことがあります。
…がそもそもテキストで表現できるものではないので、
聞き流しているネタツールのひとつです。

その図は必要なものなのか: 知らんがな
図である必要はあるか: 知らんがな
すでにツールは存在しないか: 知らんがな
文法: 知らんがな
レイアウト方法: 知らんがな

まとめ

今日は今後作るかもしれない blockdiag シリーズを紹介しました。

手元にスタックしてあったものをとりあえず書いてしまおうと思って書き始めたのですが、
前回の分と合わせると随分数がありますね。
とりあえず今僕の手元にあるアイディアはこれでおしまいです。

今はまだ blockdiag や seqdiag など、いまあるツールのメンテナンスで手一杯ですが、
そろそろ視点を変えるためにこれらのツールにも手を出せると面白いな、と思っています。

もしあなたも面白いアイディアがあれば是非教えて下さい。