今回はチェックツールなどの結果を自動でプルリクにコメントなどをしてくれるreviewdogについてまとめてみます。
reviewdog自体はいろんな言語に対応していますが、今回はPHPをメインで進めます。
ソースコードチェックに使用するのは構文チェックをするPHP_CodeSnifferと静的解析を行うPHPStanです。
かなりシンプルですがサンプルコードもGitHub上にあります。
プルリクを見てもらえればどのようにreviewdogがコメントしているかもわかります。
reviewdogとは
reviewdogとはlinterなどを使ってソースコードレビューを行ってくれる補助ツールです。
linterの実行結果を自動でGitHubのプルリクエストにコメントしたりしてくれます。
こんな感じです↓
人的にコードをレビューする際にロジック部分を確認することはもちろん必要です。
しかしコードの可読性や保守性を上げるためにも構文チェックや静的解析も必要になってきます。
1行1行しっかり見てレビューしたいところですが、レビューにそこまで時間を取れない場合はスペースが足りないなど細かいところまで目が行かなかったりします。
後は単純に見落としたりすることもあります。
そういった時にreviewdogを使えば解決してくれます。
わざわざコメントするところでもないなぁと思っていたところや見落としていたところまでコメントしてくれるので、レビュアーはロジックの部分だけを重点的にレビューするだけで済みます。
プロジェクトを全体的に見てこういった労力を減らせるのは地味に大きいと思います。
今回はGitHub Actionsを利用してmainブランチへのプルリク時に実行結果のエラーをコメントするよう実装していきます。
reviewdog用のyamlファイルの用意
まずGitHub Actionsを使用するためにプロジェクトリポジトリにyamlファイルを作成します。
.github/workflow/reviewdog.yml
を作成し、このファイルの中でGitHub Actionsで実行する内容を記述していきます。
name: reviewdog
on:
pull_request:
branches:
- main
jobs:
# 構文チェック
lint:
# 静的解析
analyse:
name
でワークフロー名を指定
on
でワークフローファイルを自動的にトリガーするイベントを指定
今回だとmainブランチにプルリクを上げたタイミングでこのワークフローが実行されます。
jobs
でワークフローファイルで実行されるすべてのジョブをグループ化
jobsの中身は後述していきます。
GitHubActionsの詳しい設定についてはこちら↓
reviewdogにPHP_CodeSnifferの結果をコメント出力する
jobs:
# 構文チェック
lint:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
# ①
- uses: reviewdog/action-setup@v1
with:
reviewdog_version: latest
# ②
- name: code snifffer install
run: composer require squizlabs/php_codesniffer
- name: lint
# ③
env:
REVIEWDOG_GITHUB_API_TOKEN: ${{ secrets.GITHUB_TOKEN }}
# ④
run: ./vendor/bin/phpcs --report=emacs --standard=phpcs.xml ./ | reviewdog -reporter=github-pr-review -efm='%f:%l:%c:%m'
①reviewdogをセットアップし導入
②PHP_CodeSnifferをインストール
③reviewdogがコメントを書き込めるようにトークンを設定
④構文チェックの結果をreviewdogに渡す
ここで確認する必要があるのが、GitHubのPersonal Access Tokensの権限スコープの設定です。
workflow
の項目にチェックがないと書き込みの権限がないため失敗してしまいます。
もう一つ気をつけるポイントとして、PHP_CodeSnifferの出力フォーマットです。
通常の出力フォーマットではreviewdog側で読み取れないためフォーマットを–report=emacsに変更して出力しています。
reviewdogにPHPStanの結果をコメントする
# 静的解析
analyse:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
# ①
- uses: reviewdog/action-setup@v1
with:
reviewdog_version: latest
# ②
- name: phpstan install
run: composer require phpstan/phpstan
- name: analyse
env:
# ③
REVIEWDOG_GITHUB_API_TOKEN: ${{ secrets.GITHUB_TOKEN }}
# ④
run: ./vendor/bin/phpstan analyse --error-format=raw --no-progress -l 5 index.php | reviewdog -reporter=github-pr-review -f=phpstan
基本的に構文チェックと流れは同じです。
異なる部分として、PHPStanをインストールしている点とこちらも–error-format=rawと指定してフォーマットを変更しています。
ちなみに今回はPHPStanのレベルを5に設定して実行しました。
しっかりと型が違うことを指摘してくれました。
最後に
今回は取り上げませんでしたが、改修のあった部分のみを警告できることも可能です。
プルリクの差分に含まれない行の警告をフィルタリングしてくれます。
こういった便利ツールは実装以外のコスト削減にもつながるので、積極的に活用しより良い実装に集中したいものです。
参考
reviewdog で構文チェックや静的解析の結果をプルリクのレビューコメントとして出力する(GithubActions)
コメント
改修のあった部分のみを警告するようにするには何を参考にされましたでしょうか。