0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

golangci-lintをちょっくら使ってみる

Posted at

概要

少人数でgoを使用してプロダクトの開発を行っているのですが、私を含めメンバーもgoをそんなに触ってきていないので、コードの品質はあまり良くないのが最近の悩みです...
そこでgoのlintである「golangci-lint」があるというのを聞いたので軽く導入してみようかなと思い、この記事に簡単にまとめてみます。

ちなみに基本的には以下のサイトを参考にさせていただいていて、こちらの方がとっても詳しく書かれています!
ですが私は一瞬、軽くやりたかっただけなので最低限の事だけをなぞってメモしておきます🫠

やること

  • ローカル環境とPRを作成したときにlintを走らせて指摘してもらう

やってみる

● ローカルで指摘してもらうようにする

1. golangci-lintのインストール

以下を参考にしてローカルにgolangci-lintをインストールする

go getgo 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つ勉強しながら修正していこうと思います!🥳

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?