Golang で lint と test をしたい時の CircleCI の config.yml

Dai Kurosawa
4 min readFeb 20, 2019

--

https://brandfolder.com/circleci

TL;DR

https://gist.github.com/d-kuro/664bdc199ad8c95bbde8f9259e168f39

やりたいこと

  • Go Modules を用いた依存関係の解決
  • lint
  • test

これだけ。最低限実行しなきゃいけないものだけできていればいいかなという感じ。

Go Modules

commands:
go_mod_download:
steps:
- restore_cache:
name: Restore go modules cache
keys:
- go-modules-{{ checksum "go.sum" }}

- run: go mod download

- save_cache:
name: Save go modules cache
key: go-modules-{{ checksum "go.sum" }}
paths:
- "/go/pkg/mod"

go mod download というコマンドを使って依存パッケージのダウンロードを行います。事前にGO111MODULE という環境変数に on を突っ込んでおきます。

Go Modules でダウンロードしたあれこれの保存場所は $GOPATH/pkg/mod になるのでそこをキャッシュするようにしています。

Lint

https://github.com/golangci/golangci-lint

Lint は GolangCI-Lint を実行します。

GolangCI-Lint は Golang のいろんな Linter をまとめて実行してくれるやつです。ここら辺の話は「GolangCI を使ってコードの品質を保ちながら快適な Golang 生活を送る話」というタイトルである勉強会で LT をしているので、その資料をそのまま貼ります。

https://speakerdeck.com/daikurosawa/golangci

今回は複数人で開発する用に最低限の Linter を実行するようにしています。

  • goimports
  • golint
  • govet
  • errcheck
  • staticcheck

Test

特別書くことがない。

race オプションをつけとくとデータ競合を検知してくれます。

まとめ

最低限の Lint と Test だけならこれを使い回せば大丈夫かなって思ってます。CircleCI 2.1 のことを完全に理解してないのでもっといい書き方とかあれば改善していきたい。

おまけ

Go Modules を用いた依存解決は CircleCI Orbs が公開されていたりします。

https://circleci.com/orbs/registry/orb/timakin/go-module

--

--