テキストから図を生成するツールの一つにblockdiagがある。 次のような特徴を持つ。
- ブロック図の生成
- シーケンス図の生成
- アクティビティ図の生成
- ネットワーク図の生成
- パケット図の生成
- ラック図の生成
パケット図の生成は他のツールを使用していた時に、微妙に困ったのでこれは良さそう。 また、日本人が開発していることも都合が良さそう。日本語への対応もある。
plantumlやgraphvizとかぶっているところもあるが、たとえば、ブロック図ではgraphvizに比べてノードシェイプの種類やスタック属性が書けるなど、比較的こちらのほうがやりたいことに近いかもしれない。
インストール
$ sudo pip install blockdiag actdiag seqdiag nwdiag
ブロック図
blockdiag { A -> B -> C }
実行方法
$ blockdiag simple.diag -Tsvg
emacsとの連携
blockdiag-mode
blockdiag-modeがmelpaからインストールできる。
M-x list-packages
-> blockdiag-mode
を検索しInstall
する。
プレビュー
blockdiagのプレビューは次のようなelispで行う。
(defun blockdiag-buffer () (interactive) (let ((blockdiag-output "/tmp/blockdiag-buffer.png") (current-file (buffer-file-name (current-buffer)))) (call-process "blockdiag" nil nil t "-o" blockdiag-output current-file) (switch-to-buffer-other-window (get-buffer-create "*blockdiag*")) (erase-buffer) (insert-file blockdiag-output) (image-mode))) (push '("*blockdiag*") popwin:special-display-config)
出典はここ
pandocから使用する
フィルタを入手
matthiasbeyerさんのpandoc-paper-templateから使用させてもらう。
$ ~/bin $ wget https://raw.githubusercontent.com/matthiasbeyer/pandoc-paper-template/master/scripts/blockdiag-filter.py $ chmod +x blockdiag-filter.py
日本語対応パッチ
labelなどに日本語を食わすと「UnicodeEncodeError: ‘ascii’ codec can’t encode characters in position 」とエラーを吐くので、パッチを当てる。
--- blockdiag-filter.py.orig 2016-11-01 13:06:12.199636652 +0900 +++ blockdiag-filter.py 2017-04-12 09:17:00.707985814 +0900 @@ -13,7 +13,7 @@ from pandocfilters import toJSONFilter, Str, Para, Image, attributes def sha1(x): - return hashlib.sha1(x).hexdigest() + return hashlib.sha1(x.encode('utf-8')).hexdigest() imagedir = "blockdiag-images" @@ -22,7 +22,7 @@ def save(data): fd, name = tempfile.mkstemp() - os.write(fd, data) + os.write(fd, data.encode('utf-8')) os.close(fd) return name
使用方法
次のように使用する。
$ pandoc -F blockdiag-filter.py [PANDOC-OPTIONS] [FILE-NAME ...]
次のようなマークダウンから
```rackdiag
rackdiag {
7U;
1: MAC
2: IP
3: TCP
3: UDP
}
```
このようになる。
rackdiag { 7U; 1: MAC 2: IP 3: TCP 3: UDP }