GitHubでプルリクをレビューするとき、こんな風にコード上に勝手にエラーがあるよ!って表示されたら嬉しいなあということがあります。
わざわざCIの実行結果を見に行ってひとつひとつエラーを確認するのは面倒ですからね。
というわけで、今回は上の画像のように自動でエラーがコード上に現れて教えてくれる環境をGitHub Actionsで作りたいと思います。
大前提
- PHPStanがプロジェクトに導入されている
- 今回はPHPStan 1.5.4を使用して検証しています
PHPStanが入ってないと話が始まらないので、まずは入れておきましょう。
GitHub ActionsからPHPStanが走るようにする
以下の設定を入れておきます。
name: PHPStan
on:
push:
branches:
- main
- master
- develop
pull_request:
types:
- opened
- synchronize
- reopened
jobs:
phpunit:
name: PHPStan (PHP ${{ matrix.php-versions }} on ${{ matrix.operating-system }})
runs-on: ${{ matrix.operating-system }}
strategy:
fail-fast: false
matrix:
operating-system: [ ubuntu-latest ]
php-versions: [ '8.1' ]
steps:
- name: Checkout
uses: actions/checkout@v2
- name: Setup PHP
uses: shivammathur/setup-php@v2
with:
php-version: ${{ matrix.php-versions }}
extensions: mbstring, dom, fileinfo, simplexml
coverage: xdebug
- name: Get composer cache directory
id: composer-cache
run: echo "::set-output name=dir::$(composer config cache-files-dir)"
- name: Cache composer dependencies
uses: actions/cache@v2
with:
path: ${{ steps.composer-cache.outputs.dir }}
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
restore-keys: ${{ runner.os }}-composer-
- name: Install Composer dependencies
run: composer install --no-progress --prefer-dist --optimize-autoloader
- name: Check with PHPStan
run: vendor/bin/phpstan --configuration=phpstan.neon
また、今回検証に使用した phpstan.neon
はこのように設定しました。
(ここは合わせる必要はないので、適宜使用している設定を利用してください)
parameters:
paths:
- src
- test
level: 9
設定を入れてPRを作れば勝手にPHPStanが走るようになりました。便利!!
設定はこれで完了なので、なにか静的解析でエラーが出るコードを書いてみてPRを作ってみて動作を見てみましょう!
エラーがコード上に出てくる仕組み
GitHub ActionsにはAnnotationという仕組みがあり、Actionsにどのファイルの何行目にこんなエラーがあるよと教えてあげると自動的にPRのUI上の該当箇所にエラーが出るようになっています。
今回の場合ですと、このような形に出ていますね。
でも... 何も設定した覚えがないが???
結論:何も設定しなくてもOK
本来であれば...
のドキュメントに従って、エラーのパターンを設定しておく、もしくは
の形式に沿ったエラーを出力をする必要があります。
手作業で設定しないといけないのか~~~と思うかもしれませんが、ちょっとまってください。
PHPStanにはOutput Formatという機能があり、GitHubやGitLabなどの主要なサービスに対応した形式に沿ったエラーを吐いてくれる機能があります。
オプションで指定するだけで自動で合わせてくれますね!便利。
ちなみに、明示的に --error-format=github
のオプションを付けてあげても良いですが、何もしなくてもActionsの環境を検出していい感じにしてくれるので設定しなくても大丈夫です。
さいごに
これによってUI上でコードの該当箇所にエラーが出てくるようになったので、レビュアーもレビューイもエラーを見に行くなんて非効率なことをしなくてもよくなってハッピー!
良いプルリク生活を!