Larastanインストール手順
投稿日:2026/01/07
今回はDocker環境でLarastan(Laravel 用 PHPStan)を導入・実行する手順をまとめます。
はじめに
Larastanとは何か?
Larastan(ララスタン) は、
Laravelアプリケーション専用に最適化された静的解析ツールです。
Larastan を使うことで、コードを実行せずに次のような問題を検出できます。
- 型の不一致(null の可能性がある変数など)
- 存在しないメソッド・プロパティの呼び出し
- Eloquent モデルの誤った使い方
- 将来的にバグになりやすい実装
つまり、「動くけど不安なコード」 を事前に見つけるためのツールです。
前提
- Laravel12 + PHP8.4のDocker環境構築メモの手順でローカル環境を作成済み
① 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に組み込むのがおすすめ