【Laravel10】Larastanを導入してみた

Laravel

Laravel10でLaravel用の静的解析ツールLarastanを導入して実施してみた際の記録と解説です。

GitHub - larastan/larastan: ⚗️ Adds code analysis to Laravel improving developer productivity and code quality.
⚗️ Adds code analysis to Laravel improving developer productivity and code quality. - GitHub - larastan/larastan: ⚗️ Add...

前提条件

  • Ubuntuで作業しています
  • PHP8.2以降インストール済
  • Composer2.xインストール済
  • Laravel10.xをインストールします
  • Larastan2.xをインストールします

Laravelプロジェクト作成

執筆時点でLaravelの最新版は10.3.2なので、このバージョン指定でインストールしていきます。

GitHub - laravel/laravel: Laravel is a web application framework with expressive, elegant syntax. We’ve already laid the foundation for your next big idea — freeing you to create without sweating the small things.
Laravel is a web application framework with expressive, elegant syntax. We’ve already laid the foundation for your next ...

作業ディレクトリ上でコマンド実行します。

composer create-project laravel/laravel webapp

プロジェクト作成が完了したら、プロジェクトフォルダに入ってWEBサービスを起動します。

cd webapp
php artisan serve

ブラウザでデフォルトページが表示されました。

Larastanインストール

プロジェクトトップでコマンド実行します。

composer require larastan/larastan:^2.0 --dev

設定ファイル作成

プロジェクトトップに「phpstan.neon」を作成します。

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

parameters:

    paths:
        - app/

    # Level 9 is the highest level
    level: 5

#    ignoreErrors:
#        - '#PHPDoc tag @var#'
#
#    excludePaths:
#        - ./*/*/FileToBeExcluded.php
#
#    checkMissingIterableValueType: false

同様に「phpstan.neon.dist」を作成します。

LarastanはPHPStanのラッパーなので、設定内容自体はPHPStanそのもので、Larastan拡張設定は最上部でincludeしています。

Larastan実行

プロジェクトトップでコマンド実行します。

./vendor/bin/phpstan analyse

「level:9」で実施しても「No errors」でした。

テスト対象を増やしてみる

「phpstan.neon」を次のように修正しました。

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

parameters:

    paths:
        - app/
        - config/
        - database/
        - resources/
        - routes/
        - tests/

    # Level 9 is the highest level
    level: 9

#    ignoreErrors:
#        - '#PHPDoc tag @var#'
#
#    excludePaths:
#        - ./*/*/FileToBeExcluded.php
#
#    checkMissingIterableValueType: false

これで実行してみたら、メモリ上限に達してクラッシュしました。。

メッセージ通りに「–memory-limit」オプションを付けて再実行してみます。

./vendor/bin/phpstan analyze --memory-limit 256M

ちょっとウルサイ感じですね。

「config」と「routes」は外してみましょう。

    paths:
        - app/
        #- config/
        - database/
        - resources/
        #- routes/
        - tests/

    # Level 9 is the highest level
    level: 9

再度実行してみます。

コントローラーを追加してテストする

コントローラーを追加してルーティングしてみます。

php artisan make:controller HelloController

ドキュメントブロック無しで適当に編集します。

ルーティングします。

ブラウザで表示確認してみます。

Larastanを実行してみます。

リターンタイプの指定が無いとのことで叱られました。

コントローラーにドキュメントブロックを追記します。

再度Larastanを実行してみます。

OKですね。

コメント

タイトルとURLをコピーしました