12
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

reviewdogによるコードレビューの省力化

Posted at

些細な指摘に時間を取られないようにreviewdogを導入してみました。
弊社のプランではGitHub Actionsが利用できないためJenkinsでの導入です。

導入の背景

ここ数ヶ月でチームの開発スピードが上がり、PRの数が増えてきました。
PRが増えるということはそれだけコードレビューに割く時間も増えることになります。

そうなってくると些細な指摘をするのが面倒になってきます。

def func():
    ...
    if condition:
        return result
    else:
        return None

「これ、elseいらないけど。でもわざわざ指摘するほどでもないかな、、」

こういうのは事前にlintして潰しておいてほしいと思いつつも、すべてのPRがlinterの指摘を修正しているとは保証できません。
うっかりlintを忘れることもある。

じゃあ単純にCIでlintすればいいかと言うとそれも難しい。
なぜなら修正範囲外の古いコードまで指摘を受けて、どこがPRに関係する指摘なのかわからなくなるから。

そこでreviewdogの出番です。
このツールはlinterの指摘を変更のあった行だけに絞ってくれます。
さらににGitHubにコメントしてくれるので指摘を確認しやすいというオマケ付き。

早速設定していきます。

reviewdogのインストール

今回はdocker上で動くJenkinsへインストールします。

Dockerfile
WORKDIR /tmp
RUN curl -sfL https://raw.githubusercontent.com/reviewdog/reviewdog/master/install.sh | sh -s \
    && mv /tmp/bin/reviewdog /usr/local/bin \
    && rm -rf /tmp/bin

GitHubのトークン発行

PRにコメントを残してもらうためにPersonal Access Tokenを発行します。
プライベートリポジトリなのでrepoにチェックをつけます。それ以外の権限は不要です。

Screen Shot 2021-07-20 at 14.42.37.png

Jenkinsの設定

予め上で発行したトークンを認証情報に追加しておきます。
Screen Shot 2021-07-20 at 14.51.07.png

reviewdogを動かすプロジェクトを作成してリポジトリをクローンします。
Screen Shot 2021-07-20 at 15.15.26.png

READMEによると4つの環境変数を設定するだけでGitHubにコメントしてくれるようです。
まず先程の認証情報をプロジェクトの設定でREVIEWDOG_GITHUB_API_TOKENという変数に紐付けます。
Screen Shot 2021-07-20 at 14.58.32.png

続いてプロジェクトの実行コマンドで残りの環境変数を設定します。

export CI_REPO_OWNER=xxx
export CI_REPO_NAME=yyy
export CI_COMMIT=$(git rev-parse HEAD)

最後にpylintの結果をreviewdogに食べさせます。

pip install pylint
pylint src/ | reviewdog -efm="%f:%l:%c: %m" -reporter=github-pr-review -diff="git diff origin/release"

あとはPRに反応してJenkinsプロジェクトを実行する設定ですが、これは省略。
GitHub Pull Request BuilderGeneric Webhook Triggerを使って実現できます。
ここは一旦手動で動かします。

動かしてみる

冒頭の不要なelseを含むPRを出してみると、

Screen Shot 2021-07-20 at 16.17.34.png

できたー🎉

まとめ

Jenkinsでreviewdogを導入しているケースが少ないので調べるのに時間がかかりましたが、設定自体は簡単でした。

実は執筆時点で数ヶ月運用しているのですが、開発者以上にレビューしてくれることもあり助かっています。

download.png

現在はpylintのみ実行していますが、任意のlinterで使用可能なので今後mypyなどにも活用できたらと考えています。

12
6
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
12
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?