フューチャー技術ブログ

Go Tips 連載7:【golangci-lint】lint issueを新たに作り出さないためのTips

Go Tips連載の第6弾です。

Gopherの佐藤です。今回はgolangci-lintの軽めのGoTipsネタを取り上げます。

Goのコード品質のベースラインを上げる目的でgolangci-lintというlintアグリゲーターを利用されているかたも多いかと思います。

コードベースがlint issue(Linterにより検出された問題)がないクリーンな状態に保たれていることが望ましいのですが、必ずしもそういった状態を維持できるとはかぎりません。

例えば以下のような場合、コードベースにlint issueが大量に存在している状態で、golngci-lintを利用していかなければなりません。

  • 既にあるコードベースにgolangci-lintを新たに適用しようとした場合
  • 何らかの理由でbaseブランチ(develop, master etc…)にlint issueが大量に混入してしまった場合

このような場合、いったんbaseブランチに存在しているlint issueを無視して開発を進め、あとでまとめてlint issueの改修を行うというのか定石かと思います。

さて、この暫定対応をしている最中でも、lint issueが混入し続ける可能性があります。既存の大量のlint issueに埋もれて、開発中に新たに生み出してしまったlint issueに気づきにくいためです。

そんなときは、以下のコマンドを打つことで、「baseブランチから作業ブランチ切った断面」の間で新たに生み出してしまってlint issueがないかのチェックができます。

新たに発生したlint-issueが無いかチェックする
golangci-lint run --new-from-rev=`git merge-base HEAD origin/develop` ./...

少しコマンドを解説します。
git merge-base HEAD origin/develop は今checkoutしているコミットとbaseブランチ(この場合はorigin/develop)との分岐点となるコミット(merge base)のcommit_idを教えてくれるコマンドです。

これをgolangci-lint--new-from-rev=オプションに渡してあげると、そのコミット断面から作業ブランチのHEADまでに新たに生み出してしまったlint issueのみがレポートされます。

PullRequestを出す前に、このコマンドでlint issueがないかのチェックをしてあげるとよいのではないかと思います!