LoginSignup
47
43

More than 5 years have passed since last update.

goの静的解析ライブラリのいろいろまとめ

Last updated at Posted at 2017-04-04

はしがき

以前、go vetについて触れましたが、
公式以外でも循環複雑度解析をしてくれたりとか、
いろいろ良いライブラリがあるので、その辺の紹介を。(後おまけでvimの設定:p

静的解析ライブラリ 御三家的なアレ。

前の記事でも紹介したgo謹製のツールですね。

保存時とかに掛けると、使ってないimportを自動でお掃除してくれたり、追加してくれたりする、賢い子です。

構文上微妙なものとかをsuggestしてくれます。
私はvimのファイル保存時にgo fmt,go lintは自動で掛けるようにしています :)

静的解析ライブラリ 複雑度、重複コードチェックとか少し凝ったやつ

分岐数などのプログラムの構造の複雑さ、循環複雑度を測ってくれます。
あくまで指標なので普段からゴリゴリ使うものでもないですが、リファクタの対象探しとかに良いかなと。
-over とかで閾値を決めて定期的に探したり、大きいモジュールを作った時にチェックしてみると楽しい。

エラーハンドリングしてない奴を抽出してくれます。
個人的にはエラーはちまちまハンドリングするんじゃなくて、上の層でごそっと捕まえてロギングするなりしたいので
そんな使ってない。(下手に握り潰されてもやなので、回復処理がないならとりあえず上にちゃんと返せ派)

重複コード検出をしてくれます。

vimmer向け

go imports,go vet,go lint 周りは保存時にかけちゃうのがオススメです。(go fmtは言わずもがな)
syntasticあたりとか
vim-goとかで。
vim-goはチュートリアルも充実してて便利です。

 NeoBundle 'scrooloose/syntastic'
 let g:syntastic_mode_map = {
 \ "mode" : "active",
 \ "active_filetypes" : ["go"],
 \}
 let g:syntastic_go_checkers = ['go', 'golint', 'govet']
 let g:go_fmt_autosave = 1
 let g:syntastic_aggregate_errors = 1
 augroup GoSaveHook
 autocmd!
 autocmd BufWritePre *.go GoImports
 augroup END

とか(適当ですいません。)
そういえば最近NeoBundle聞かないなぁ。

YOU全てかけちゃいなよ なライブラリ

だいたい上で紹介したもの+αをまとめて全部かけてくれる子もいます。
全ての項目を有効にした場合、結構な時間が掛かるのでCIで常時回すのは自己判断で..。
ただ手軽なので、一度回してみると良いと思います :)

gometalinter

gometalinter --install --update
gometalinter ./...

サボってると大量に出るので、metalinterのformatがしたくなると言う。

私見

個人的に、レビューでの構文指摘などは不毛なので、lint,vet,fmt通ればOK、みたいなボーダーラインやルールを作ると、
構造設計・パフォーマンスなど本来レビューするべきことに集中できるのでオススメです。
duplやerrcheck,cycloなどは定常的にCIで,,ってほどには正直思わないのですが、
コードベースが大きくなるにつれ、複雑度がおかしくなってゼウスクラスが出来上がったりするので
コードベースのたまのヘルスチェック くらいな気持ちで良いかなーと思ってます。

47
43
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
47
43