reviewdog-golangci-lint を使う

公開:2020/10/09
更新:2020/10/09
2 min読了の目安(約2500字TECH技術記事

概要

Github Actions への移行の一環として、これまで使っていた Sider というサービスを reviewdog + golangci-lint に移行してみました。結構ハマったのでメモ。

ちなみに Sider というのはいろいろな lint から好きなのを選んで、Pull Request の時に警告があれば差し込んでくれるサービスです。Sider は設定が簡単で、いろいろな言語、linter を UI でぽちぽち選択できとても便利なので、積極的に置き換える必要もないのですが(むしろ置き換えない方がいいのかも知れない)、GitHub Actions に置き換える気運が起きてしまったので仕方なかった・・・。

Sider

golangci-lint の設定

golangci-lint の設定を reviewdog に直接設定することも可能ですが、開発時にも利用することを見越して .golangci-lint.yml に設定を書くことにします。設定の書き方はドキュメントに丁寧に書いてあるのでここの値を試行錯誤します。試行錯誤した → .golangci-lint.yml

reviewdog-golang-ci の設定

lint の警告をどのレベルで指摘するか

lint は過剰に検出をすることがままあります。また、警告されるけどあとで直すつもりとかいう場合に、毎回チェックが failed してしまうのはちょっとやりすぎな感があります。逆に、どんな警告が出ていても無視せずに failed にしたい場合もあるでしょう。reviewdog はその点考慮されていて、警告を

  • Error
  • Warning
  • Info

のどのレベルで扱うかを指定できます。すばらしい。

コメントで指摘できる範囲

さて Pull Request で lint の指摘をしてくれるようになるわけですが、すべての lint エラーを PR のコメントにしてくれるわけではありません。コメントを入れてくれるのは(というか、入れられるのは)差分の対象になっている場合だけです。

差分に警告が含まれる場合のコメント

差分の対象になっていない範囲に lint エラーがあってもコメントは入りません。ただ、filter_modenofilter にしておけば Github Actions の Annotations のところには出してくれるようです。

差分の対象でない部分の警告

golangci-lint の設定を指定

reviewdog に lint の設定を指定します。設定ファイルを作ってるので、それを指定すればいいです。"--config=.golangci.yml" のようにファイルを指定します。パスはレポジトリからの相対パスになってます。たとえば、.gitnub に入れておくなら "-config=.github/.golangci.yml" のように指定します。

GitHub Token

reviewdog は Pull Request にコメントしたりするので GitHub Token を必要とします。GitHub は最初からこれを用意してくれているので、それを指定するだけで特に何か手順がいるわけではないです。GitHub がデフォルトで用意してくれている Token は secrets.GITHUB_TOKEN と指定するか、github.token と指定すれば参照できるようです。

結論

name: Reviewdog

on:
  pull_request:
    types: [opened, synchronize]

jobs:
  golangci-lint:
    name: golangci-lint
    runs-on: ubuntu-latest
    steps:
      - name: Check out code into the Go module directory
        uses: actions/checkout@v2
      - name: golangci-lint
        uses: reviewdog/action-golangci-lint@v1
        with:
          github_token: ${{ github.token }}
          level: warning
          golangci_lint_flags: "--config=.golangci.yml"
          filter_mode: nofilter
          reporter: github-pr-review

ここ間違ってるよ!とか、もっと便利に出来るよ! とかあったら教えてください。

Happy hacking!