Tech Starlog

Larastanインストール手順

投稿日:2026/01/07

今回はDocker環境でLarastan(Laravel 用 PHPStan)を導入・実行する手順をまとめます。


はじめに

Larastanとは何か?

Larastan(ララスタン) は、
Laravelアプリケーション専用に最適化された静的解析ツールです。

Larastan を使うことで、コードを実行せずに次のような問題を検出できます。

  • 型の不一致(null の可能性がある変数など)
  • 存在しないメソッド・プロパティの呼び出し
  • Eloquent モデルの誤った使い方
  • 将来的にバグになりやすい実装

つまり、「動くけど不安なコード」 を事前に見つけるためのツールです。


前提


① Larastanをインストール

まずはappコンテナ内でComposerインストールします。

docker compose exec app composer require nunomaduro/larastan --dev

成功すると:

  • composer.json
  • composer.lock

が更新されます。


② phpstan.neon(設定ファイル)を作成

Laravel 用の最低限構成を作ります。

touch phpstan.neon

※ 上記コマンドは、artisanやcomposer.jsonがある場所で実行

phpstan.neon(最小構成例)

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

parameters:
    paths:
        - app

    level: 5

    excludePaths:
        - storage
        - bootstrap/cache

補足

  • paths:解析対象(まずはappのみ)
  • level:ルールレベル(ますは5から)
    • 0が最も緩く、10が最も厳密
    • 最初は低いルールレベルから使い始め、必要に応じてレベルを上げる
  • excludePaths:解析対象外

③ Larastan(PHPStan)を実行

ocker compose exec app vendor/bin/phpstan analyse

または短縮形:

docker compose exec app ./vendor/bin/phpstan

よくあるエラー(PHPメモリ不足)

% docker compose exec app vendor/bin/phpstan analyse
Note: Using configuration file /var/www/html/phpstan.neon.
 19/19 [▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓] 100%

 -- --------------------------------------------------------------------------------------------------- 
     Error                                                                                              
 -- --------------------------------------------------------------------------------------------------- 
     Child process error: PHPStan process crashed because it reached configured PHP memory limit: 128M  
     Increase your memory limit in php.ini or run PHPStan with --memory-limit CLI option.               
      while running parallel worker                                                                     
 -- --------------------------------------------------------------------------------------------------- 


                                                                                                                        
 [ERROR] Found 1 error                                                                                                  
                                                                                                                        

⚠️  Result is incomplete because of severe errors. ⚠️
   Fix these errors first and then re-run PHPStan
   to get all reported errors.

解決策:CLIオプションでメモリ制限を解除

docker compose exec app vendor/bin/phpstan analyse --memory-limit=1G

補足

  • LarastanはDocker・ローカル・CI(GitHub Actions等)全て同じコマンドで動く

④ 実行結果の確認

エラーなし時

% docker compose exec app vendor/bin/phpstan analyse --memory-limit=1G
Note: Using configuration file /var/www/html/phpstan.neon.
 19/19 [▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓] 100%


                                                                                                                        
 [OK] No errors                                                                                                         
                                                                                                                        

エラーあり時(例:型の不一致)

% docker compose exec app vendor/bin/phpstan analyse --memory-limit=1G
Note: Using configuration file /var/www/html/phpstan.neon.
 19/19 [▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓] 100%

 ------ -------------------------------------------------------------------------------------------------------------------------------------------------------- 
  Line   Http/Controllers/Auth/VerifyEmailController.php                                                                                                         
 ------ -------------------------------------------------------------------------------------------------------------------------------------------------------- 
  22     Parameter #1 $user of class Illuminate\Auth\Events\Verified constructor expects Illuminate\Contracts\Auth\MustVerifyEmail, App\Models\User|null given.  
         🪪  argument.type                                                                                                                                       
 ------ -------------------------------------------------------------------------------------------------------------------------------------------------------- 


                                                                                                                        
 [ERROR] Found 1 error                                                                                                  
                                                                                                                        

上記エラーの対応例

🔽 対象コード(Laravel Breeze 標準):app/Http/Controllers/Auth/VerifyEmailController.php

event(new Verified($request->user()));

🔽 エラーの内容

  • VerifiedイベントはMustVerifyEmailを実装したUserを要求
  • しかしコード上では$request->user()の戻り値がUser|nullと推論されている
  • Larastanがnullが来る可能性あると指摘している

🔽 修正後コード(型を明示してnullを排除)

$user = $request->user();

if ($user instanceof \Illuminate\Contracts\Auth\MustVerifyEmail) {
    event(new Verified($user));
}

Larastan的に

  • null ではない
  • MustVerifyEmailを満たしている

ことが明確になる


まとめ

  • LarastanはLaravel用PHPStan
  • 最初はlevel: 5で段階的に上げる
  • app配下だけ解析するのが現実的
  • 将来的にCIに組み込むのがおすすめ