25
18

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

コールグラフで始めるGoコードリーディング

Last updated at Posted at 2018-12-19

おはようございます。@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の解析例も紹介されていました。
こういったコードも、俯瞰してみることでなんとなく設計を追うことが出来る気がします。

Docker

go-callvis複雑なコードの把握だけでなく、もちろん身近なプロジェクトの可視化にも利用する事が出来ます。
マクアケではGoを採用したプロジェクトが増えています。そういった中でプロジェクトを把握する方法の1つとしても使えるのではないかと思いました!

最後になりますが、株式会社マクアケでは一緒に働くメンバーを募集しております。💪
ご興味が有りましたらご連絡いただけると幸いです!💦
https://www.wantedly.com/projects/26807

Makuake Product Team Advent Calendar 2018 明日は @shiro-yamadaさんのマクアケ新オフィス紹介記事です。よろしくお願いします!

25
18
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
25
18

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?