golangでvetコマンドやtestコマンドを実行したときにvendorディレクトリを除外する方法
下記の記事で書いたように、golangでディレクトリ(プロジェクト)をまるごとvetやtestしていると、たまに困ったことが起きるようになりました。 tsujitaku50.hatenablog.com
それは
「ディレクトリ(プロジェクト)をまるごとvetやtestしていると、vendorディレクトリも一緒にvetやtestする」
ということです。
つまりvendorディレクトリ配下にエラーが起きるようなコードが含まれている場合、それも同時に検出されてしまうということです。
これはめんどくさい。
できればvendorディレクトリだけ除外したいですよね。
ということで、調べました!
vendorディレクトリを除外して、プロジェクト(ディレクトリ)まるごとvetやtestするコマンドは
下記になります!
go vet $(go list ./... | grep -v /vendor/)
少し上記のコマンドについて説明すると、
まずgo list
コマンドですが、これはインポートパスを表示します。
上記の例では
go list ./...
としているので、ディレクトリ以下全てのインポートパスを表示しているのでvendorディレクトリも含まれています。
そしてgrep
コマンドのオプションが-v
でvendorディレクトリを除外しています。
これで「vendorディレクトリを除外したインポートパス」が表示されます。
そして「vendorディレクトリを除外したインポートパス」に対してgo vet
しているので
vendorディレクトリを除外した全てのファイルに対してgo vet
出来るというわけです。
普段go list
コマンドをまったく使わないので、「このコマンドなんのためにあるんだろう」と思っていたのですが
まさかこんな形で使えるとは。。!
あとはjenkinsなどでプッシュしたときや、プルリクを出したときに上記コマンドを仕込んだジョブが動くように設定してけば
自動テストの一種になると思います。
おわり!!