【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