omohayui blog

おも‐はゆ・い【面映ゆい】[形][文]おもはゆ・し[ク]《顔を合わせるとまばゆく感じられる意》きまりが悪い。てれくさい。

Go Meta Linter から GolangCI-Lint に乗り換える

GoのLinter使ってる?

自分は Local で開発するときに intelliJ を使ってるんですが(ultimate版)、
FileWatcher という plugin を使って、ファイルを編集保存したタイミングで、
gofmt や gometalinter を実行するようにしてます。
PullReqでレビュー投げる前にここもっとsimpleに書けるよーとかコメント間違ってるよーとか教えてくれるので大変便利です。

GoMetaLinter が重い遅い件

ファイルを編集する度に gometalinter が実行されるとたまに結果が返ってくるのやたら遅かったり、
PCのファンが猛烈に回りだしたりします。
そこで、 golangci-lint に乗り換えてみました。

比較

下記はとあるアプリケーションの一部のソースコードに同じ linter設定で gometalinter と golangci-lint それぞれ実行結果を取ってみたものです。

% /usr/bin/time gometalinter --disable-all -E errcheck -E ineffassign -E interfacer -E unconvert -E misspell -E unparam -E nakedret -E dupl -E goconst -E gocyclo --cyclo-over=15 src/hoge/model
       19.64 real        35.53 user        10.96 sys

% /usr/bin/time golangci-lint run --disable-all -E errcheck -E ineffassign -E interfacer -E unconvert -E misspell -E unparam -E nakedret -E dupl -E goconst -E gocyclo --gocyclo.min-complexity 15 src/hoge/model
        6.24 real        11.33 user         2.99 sys

golangci-lint の実行時間が gometalinter の 1/3 以下に。

結論

github.com

GolangCI-Lint is a linters aggregator. It's fast: on average 5 times faster than gometalinter.

そもそも golangci-lint の README に gometalinter より5倍速いぜ!って書いてあるの見ずに使ってました・・・
時間あるときに中のソースまで見たい。