おはようございます。@mnumaです。
Makuake Product Team Advent Calendar 2018 20日目の記事です。
こちらの記事でも触れさせて頂きましたが、株式会社マクアケではマイクロサービス化プロジェクトに伴い、バックエンドやツールにGo言語を採用することが増えています。というわけで今回もGoに関する記事を書きます。
go-callvis
go-callvisは、Goで書かれたプログラムのコールグラフを作成してくれるツールです。
コードレビューで誰かのコードを読む時や、複雑になってきたコードを把握したい時など、何か図形的な補助が欲しくなる事があります。
go-callvisは手軽にビジュアライズされたコールグラフを作成出来ます。今回は、このgo-callvisの使い方についてご紹介したいと思います。
使い方
go-callvisのリポジトリにちょうどいいサンプルがあるので、試しに実行してみましょう。
https://github.com/TrueFurby/go-callvis/tree/master/examples/main
中身はこんな感じです。
$ cd $GOPATH/src/github.com/TrueFurby/go-callvis/examples/main
$ tree .
├── main.go
└── mypkg
└── mypkg.go
main
パッケージがある所で go-callvis
コマンドを実行してみます。
$ go-callvis ./
-group
を使うと、パッケージや型でグループ化してくれます。
$ go-callvis -group pkg,type ./
パッケージでグループ化すると、各パッケージにフォーカスした画面にジャンプすることも出来ます。
標準ライブラリを除外したい場合は-nostd
オプションを使います。また、-nointer
で 非公開関数の除外になります。
$ go-callvis -nostd -nointer ./
Makefileから呼び出す場合は、こんな感じのタスクを用意しておくといいのかなと思います。
PKGS = $(shell go list ./... | grep `go list`/ | xargs | tr ' ' ,)
go-callvis:
go-callvis -focus "" -group pkg,type -limit "${PKGS}" `go list`
最後に
サンプルにはDockerの解析例も紹介されていました。
こういったコードも、俯瞰してみることでなんとなく設計を追うことが出来る気がします。
go-callvis複雑なコードの把握だけでなく、もちろん身近なプロジェクトの可視化にも利用する事が出来ます。
マクアケではGoを採用したプロジェクトが増えています。そういった中でプロジェクトを把握する方法の1つとしても使えるのではないかと思いました!
最後になりますが、株式会社マクアケでは一緒に働くメンバーを募集しております。💪
ご興味が有りましたらご連絡いただけると幸いです!💦
https://www.wantedly.com/projects/26807
Makuake Product Team Advent Calendar 2018 明日は @shiro-yamadaさんのマクアケ新オフィス紹介記事です。よろしくお願いします!