goumlでgoプロジェクトのUML図を出力する


goプロジェクトの依存をグラフとして可視化できるツールとして kisielk/godepgraphpaulbuis/golistdepgraph がありますが、その粒度は少し荒いものでした。(パッケージ間の依存を解析)

そこに颯爽と登場したのが kazukousen/gouml です。

goプロジェクトを解析してumlファイルを出力してくれる素晴らしいツールで、実際に出力してみた図はこのような感じになります。UMLですね〜

以下でコマンドの実行し、画像として保存するところまでを紹介していきます。

インストール

go get -u github.com/kazukousen/gouml/cmd/gouml

goumlを実行しumlファイルを出力する

gouml init

対象のディレクトリを指定する場合は -d or --dir を指定します。

gouml init -d ./src/

出力するumlファイル名を指定する場合は -o or --out を指定します。

gouml init -o xxxx

umlファイルを画像ファイルに変換する

いくつか方法がありますが、goumlは標準でhttp://plantuml.com/plantuml/svg/からはじまる、図を表示するためのリンクを出力してくれます。これを開くのが最も簡単な方法です。

あるいはローカルのplantumlコマンドを使うこともできます。

brew install plantuml
brew install graphviz
brew install gnu-sed
cat xxxx.uml | gsed  '1i @startuml' | gsed '$a @enduml' > xxxx.pu
plantuml -tpng xxxx.pu

ここでxxxx.pngという画像が生成されているはずです。ご確認ください。

注1: 出力されるpngファイルについて、デフォルトでは縦横ともに4096に制限されています。

画像にuml図の全体が収まっていないときは以下の環境変数のことを思い出してください。

echo 'export PLANTUML_LIMIT_SIZE=32768' >> ~/.bash_profile

注2: 現状では特定の条件下でグラフがちょっと悲しい感じになることがあります。
ものすごい勢いで開発されており、以下の問題も爆速で解消されました。

僕が遭遇したのは、string型のグローバル変数が宣言されている場合で、これに対処するパッチを一応投げて置きました