GoプロジェクトでのCircleCIによるコード検査 について #circlecijp
© - BASE, Inc. XGoプロジェクトでのCircleCIによるコード検査. . #circlecijp- @hgsgtk
View Slide
© - BASE, Inc.: @hgsgtk⾃⼰紹介東⼝ 和暉 ( Higashiguchi Kazuki )サーバーサイドエンジニアBASE BANK, IncCircleCIにチョットお世話になってます
© - BASE, Inc.このトークで得られること• GoプロジェクトにおけるCircleCIの活⽤事例• 「どういうチェックしてる?」• Lint‧テスト実⾏する config.yml• 「実際、どう設定するの?」• プロジェクトでのCircleCI活⽤⽅法振り返り知⾒• 「こういう活⽤の仕⽅は良かった。」
© - BASE, Inc.お題⽬• プロジェクトにおけるCircleCI利⽤の全体像• コード検査を⾏うための config.yml の中⾝• CircleCIを利⽤したプロジェクトの振り返り
© - BASE, Inc.プロジェクトにおけるCircleCI利⽤の全体像https://devblog.thebase.in/entry/ / / /
© - BASE, Inc.プロジェクトにおけるCircleCI利⽤の全体像https://devblog.thebase.in/entry/ / / /このトークのスコープ
© - BASE, Inc.全体像 .circleci/config.yml (コード検査部分)
完全に理解しましたね?
© - BASE, Inc.全体像 .circleci/config.yml (コード検査部分). 依存パッケージ解決. フォーマットチェック. Lintチェック. ビルド‧テスト. 循環複雑度計測
© - BASE, Inc.1. 依存パッケージ解決• Goの依存パッケージ関係解決に Go Modules を利⽤• See also: https://circleci.com/blog/go-v . -modules-and-circleci/• circleci/golang >= . . を利⽤• Go . MODULE = “on”
© - BASE, Inc.2. フォーマットチェック• `go fmt`でフォーマットチェック• ※ 依存パッケージ解決にて vendorディレクトリが作成される場合はvendorは除く設定が必要。• `go fmt`の結果をstderrへ
© - BASE, Inc.. Lintチェック• `golangci-lint run`の結果をstderrへ• golangci-lint を利⽤• GolangCI-Lint is alinters aggregator• See also: https://github.com/golangci/golangci-lint
© - BASE, Inc.. Lintチェック - golangci-lintのconfig• 設定 .golangci.yml• 複数のチェックツールをまとめて実⾏することができる
© - BASE, Inc.4. ビルド‧テスト• `go build`にてビルド• ビルドができるかをチェックする• `go test`にてテストgo test -p -race -cover ./...
© - BASE, Inc.5. 循環複雑度計測• 循環複雑度とは• ソフトウェ測定法の⼀つ• プログラムの複雑度を測る• fzipp/gocyclo を利⽤した循環複雑度計測• See also: https://github.com/fzipp/gocyclo
© - BASE, Inc.CircleCIを利⽤したプロジェクトの振り返り• CIが開発者にGo流を教えてくれる• コードを書く前にlint‧テストを設定した• チェックツールの追加に対する変更が発⽣• golangci-lintは途中から⼊れた• (※ go vet/go importsと⼊れ替え)• 最初は思いつく限り多めに⼊れて、外していくのがいいと思う
© - BASE, Inc.余談:デプロイパイプランについて知りたい⽅はhttps://devblog.thebase.in/entry/ / / /
© - BASE, Inc.余談:デプロイパイプランについて知りたい⽅はhttps://devblog.thebase.in/entry/ / / /「CircleCIとecspressoによるECSへのデプロイメントパイプライン」https://devblog.thebase.in/entry/ / / /
Thanks