LoginSignup
34
25

More than 1 year has passed since last update.

【最強のプルリクレビュー環境】 GitHub ActionsとPHPStanを繋げてPRのコード上に自動で静的解析のエラーが出てくる仕組みを作る

Posted at

image.png

GitHubでプルリクをレビューするとき、こんな風にコード上に勝手にエラーがあるよ!って表示されたら嬉しいなあということがあります。

わざわざCIの実行結果を見に行ってひとつひとつエラーを確認するのは面倒ですからね。

というわけで、今回は上の画像のように自動でエラーがコード上に現れて教えてくれる環境をGitHub Actionsで作りたいと思います。

大前提

  • PHPStanがプロジェクトに導入されている
    • 今回はPHPStan 1.5.4を使用して検証しています

PHPStanが入ってないと話が始まらないので、まずは入れておきましょう。

GitHub ActionsからPHPStanが走るようにする

以下の設定を入れておきます。

.github/workflows/phpstan.yml
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上の該当箇所にエラーが出るようになっています。

今回の場合ですと、このような形に出ていますね。

image.png

でも... 何も設定した覚えがないが???

結論:何も設定しなくてもOK

本来であれば...

のドキュメントに従って、エラーのパターンを設定しておく、もしくは

の形式に沿ったエラーを出力をする必要があります。

手作業で設定しないといけないのか~~~と思うかもしれませんが、ちょっとまってください。

PHPStanにはOutput Formatという機能があり、GitHubやGitLabなどの主要なサービスに対応した形式に沿ったエラーを吐いてくれる機能があります。

オプションで指定するだけで自動で合わせてくれますね!便利。

ちなみに、明示的に --error-format=github のオプションを付けてあげても良いですが、何もしなくてもActionsの環境を検出していい感じにしてくれるので設定しなくても大丈夫です。

さいごに

これによってUI上でコードの該当箇所にエラーが出てくるようになったので、レビュアーもレビューイもエラーを見に行くなんて非効率なことをしなくてもよくなってハッピー!

良いプルリク生活を!

34
25
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
34
25