概要
少人数でgoを使用してプロダクトの開発を行っているのですが、私を含めメンバーもgoをそんなに触ってきていないので、コードの品質はあまり良くないのが最近の悩みです...
そこでgoのlintである「golangci-lint」があるというのを聞いたので軽く導入してみようかなと思い、この記事に簡単にまとめてみます。
ちなみに基本的には以下のサイトを参考にさせていただいていて、こちらの方がとっても詳しく書かれています!
ですが私は一瞬、軽くやりたかっただけなので最低限の事だけをなぞってメモしておきます🫠
やること
- ローカル環境とPRを作成したときにlintを走らせて指摘してもらう
やってみる
● ローカルで指摘してもらうようにする
1. golangci-lintのインストール
以下を参考にしてローカルにgolangci-lintをインストールする
go get
やgo install
でのインストールは推奨されておらず、macであればbrewなどを使ってインストールする方がいいみたいです。
Note: such go install/go get installation aren't guaranteed to work. We recommend using binary installation.
2. 対象のプロジェクトのディレクトでlintを走らせる
あとは以下のコマンドを実行するだけで、プロジェクトのコードに対する指摘内容がコンソールに表示されます!
golangci-lint run
3. 凝りたい場合は設定ファイルを書く
設定ファイルがなくてもgolangci-lint run
は使用できますが、凝りたい場合はプロジェクトのルートディレクトリに以下のどれかのファイルを配置する
.golangci.yml
.golangci.yaml
.golangci.toml
.golangci.json
設定項目はたくさんありますが、私は実行したくないlintだけを指定するようにしました!
指定の仕方は以下の項目を使って設定します。
disable-all →全てのlinterを無効にする(デフォルトで有効なlinterも無効になります)
enable-all →全てのlinterを有効にする
disable → 指定したlinterを無効にする
enable → 指定したlinterを有効にする
私はブラックリスト方式(一旦全部ONにして実行したくないやつだけ指定)で以下にのように指定しました!
linters:
enable-all: true
disable:
- prealloc
- godot
- depguard
〜〜〜〜〜〜〜〜〜〜〜〜
disable
洗い出し方としては、一度lintを走らせてみて、細かいことやしょうもないことを指摘しているものを実行しないように設定しました。😇
もっと詳しくlintの機能を見てみて吟味されたい方は以下の際を参考にされると良いと思います!
● githubでPRを出したときに指摘してもらうようにする
1. github action用のファイルをpushできるようにする
初めてworkflowを編集する場合personal access tokenの設定によってはファイルがpushできないので以下サイトを参考に設定を変更しておきます。
2. github actionに必要なファイルを作成
必要なファイルはシンプルで.github/workflows/golangci-lint.yml
を作成するだけです!
公式のreadmeがあるので詳しくみたい方はそちらを参考にしてください🫡
私はSimple Example
を参考に作成しました。
name: golangci-lint
on:
push:
branches:
- main
- develop
pull_request:
permissions:
contents: read
pull-requests: read
jobs:
golangci:
name: lint
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-go@v5
with:
go-version: ^1.22
- name: golangci-lint
uses: golangci/golangci-lint-action@v6
with:
version: v1.59
only-new-issues: true #プルリクエストにアクセスするために必要
github-token: ${{ secrets.github_token }} #only-new-issuesを使う時は必要
args: --timeout=30m --config=.golangci.yml --issues-exit-code=0
ちなみにsecrets.github_token
はgithubが自動で発行してくれるものなので、こちらで変数に格納しておくなどは必要ないです
また設定ファイルを作成している場合は、github actionのymlファイルの位置は関係なくルートディレクトリの位置からのlinter用の設定ファイル(.golangci.yml
)の位置を指定してあげれば大丈夫です!🤛
3. 何かしらのPRを出してみる
PRを出してみるとマージするボタンらへんでlintがチェックしている感じの表示が出ると思います。
failed
となる場合はDetailからエラーの内容を確認してみましょう! 私は設定ファイルの位置がおかしくて何度もエラーになりました。🥲
まとめ
私はgoにも明るくなく、github actionも使ったことがなかったので、今回の作業はとても勉強になりました。
またlintを導入してから、指摘内容から学ぶこともたくさんありました!
実装もそれなりに進んでおり、指摘内容に対して修正できていない部分もあるので1つ1つ勉強しながら修正していこうと思います!🥳