【Laravel】Larastanの導入

php で有名な PHPStan という静的解析ツールがあります。

その Laravel 版として Larastan というものがあります。

こちらを利用することで、Laravel のソースコードの静的解析が可能となります。

Larastanのインストール

Larastan は composer を使ってインストールします。

composer --dev require nunomaduro/larastan

vender ディレクトリの中にインストールされましたので、インストールされたかを確認します。

./vendor/bin/phpstan analyse -V
PHPStan - PHP Static Analysis Tool 1.10.15

設定ファイルの作成

Larastan を実行する際の設定ファイルを作成します。

ファイル名は、「phpstan.neon」で作成します。

includes:
    - ./vendor/nunomaduro/larastan/extension.neon

parameters:

    paths:
        - app

    # The level 9 is the highest level
    level: 5

    ignoreErrors:
        - '#Unsafe usage of new static#'

    excludePaths:
        - ./*/*/FileToBeExcluded.php

    checkMissingIterableValueType: false

解析実行

./vendor/bin/phpstan analyse

※実行時のエラー対応

  • メモリ不足でのエラー
Child process error (exit code 255): [2022-05-02 00:50:29] local.ERROR: Allowed memory size of 134217728 bytes exhausted (tried to allocate 20480 bytes) {"exception":"[object] (Symfony\\Component\\ErrorHandler\\Error\\FatalError(code: 0): Allowed memory size of 134217728
     bytes exhausted (tried to allocate 20480 bytes) at phar:

↓対応内容

メモリ上限を上昇させる

./vendor/bin/phpstan analyse --memory-limit=2G

解析を無視

その時は、baseline ファイルを作成すると良いです。

./vendor/bin/phpstan analyse --generate-baseline

実行後、phpstan-baseline.neon ファイルが作成され、実際に無視されるエラー内容が記載されます。

parameters:
    ignoreErrors:
        -
            message: "#^Call to an undefined static method Foo\\:\\:sub\\(\\)\\.$#"
            count: 1
            path: index.php

解析の自動化

実際に Larastan を導入しても各自がチェックしないと意味がないため、強制的に Github へ commit したらチェックするように自動化します。

まずは、.github/workflows/phpstan.yaml として下記ファイルを作成します。

name: larastan

on:
  pull_request:
    paths:
      - "**.php"

jobs:
  laravel:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v2
    - name: Setup PHP
      uses: shivammathur/setup-php@v2
      with:
        php-version: '8.0'
        tools: composer:v2
    - name: Resolve dependencies
      run: composer install --no-progress --prefer-dist --optimize-autoloader
    - name: Run larastan
      run: ./vendor/bin/phpstan analyse --memory-limit=2G --configuration=phpstan.neon