Go モジュールの依存関係を可視化するツール ggm v0.2.0 をリリースした
前回「Go モジュールの依存関係を可視化するツールを作った」のだが,思ったより有用なことに気がついて「これはちゃんとコードを書こう」と思い立った。
ちうわけで,リリースしました。
今回はちゃんとバイナリも用意しているぞ(笑)
使い方はこんな感じ。
$ ggm -h
Usage:
ggm [flags] [input file]
Flags:
-c, --config string Configuration file
--debug Debug flag
-h, --help help for ggm
-v, --version Output version of ggm
前回と異なるのは -c
オプションを付けたことか。
たとえば以下の内容で ggm.toml
というファイルを作って
[node]
fontname = "Inconsolata"
以下のコマンドラインで DOT ファイルを生成すると
$ go mod graph | ggm -c ggm.toml
digraph G {
ID = "G";
n1[fontname="Inconsolata",label="github.com/spiegel-im-spiegel/ggm"];
n2[fontname="Inconsolata",label="github.com/BurntSushi/toml\nv0.3.1"];
n3[fontname="Inconsolata",label="github.com/emicklei/dot\nv0.9.3"];
n4[fontname="Inconsolata",label="github.com/spf13/cobra\nv0.0.3"];
n5[fontname="Inconsolata",label="github.com/spf13/pflag\nv1.0.3"];
n6[fontname="Inconsolata",label="github.com/spiegel-im-spiegel/gocli\nv0.9.5"];
n7[fontname="Inconsolata",label="golang.org/x/xerrors\nv0.0.0-20190410155217-1f06c39b4373"];
n1->n2;
n1->n3;
n1->n4;
n1->n5;
n1->n6;
n1->n7;
}
てな感じで fontname
属性を仕込むことができる。
これを dot
コマンドに流し込むと
$ go mod graph | ggm -c ggm.toml | dot -Tpng -o ggm.png
てな風にフォントを Inconsolata にすることができるのですよ(勿論あらかじめフォントがインストールされていることが条件ね)。
-c
オプションで指定するファイルは TOML 形式で node
と edge
の属性を設定することができる。
ただし手抜き実装で属性名やその値の正しさについてはノーチェックなのでご注意を(つまり key=value
で表されるものなら何でも入るw
)。
今回 DOT 言語用のビルダ・パッケージには github.com/emicklei/dot を利用している。 シンプルな設計で(簡単な図であれば)使い勝手がよい。
本当は本家の Go コンパイラが DOT 言語で吐いてくれればこんなの要らないんだけどねぇ。
ブックマーク
参考図書
- プログラミング言語Go (ADDISON-WESLEY PROFESSIONAL COMPUTING SERIES)
- Alan A.A. Donovan (著), Brian W. Kernighan (著), 柴田 芳樹 (翻訳)
- 丸善出版 2016-06-20
- 単行本(ソフトカバー)
- 4621300253 (ASIN), 9784621300251 (EAN), 4621300253 (ISBN), 9784621300251 (ISBN)
- 評価
著者のひとりは(あの「バイブル」とも呼ばれる)通称 “K&R” の K のほうである。この本は Go 言語の教科書と言ってもいいだろう。