Larastanは、PHPStanのLaravel版であり、ソースコードの静的解析ツールです。
Larastanを使うことで、開発効率やコード品質の向上につながります。
環境
Larastanを試してみた環境です。
ソフトウェア | バージョン |
---|---|
PHP | 8.2.6 |
Laravel | 10.13.5 |
準備
インストール
Laravelプロジェクト直下で、以下コマンドを実行します。
PHP 8.0以上、Laravel 9.0以上 が必要です。
composer require nunomaduro/larastan:^2.0 --dev
設定ファイル作成
Laravelプロジェクト直下に、「phpstan.neon」というファイルを作成します。
解析対象として「app」フォルダー以下、解析レベルを5と指定しています。
※解析レベルは、0~9の範囲で指定できます。値が大きいほど、解析が厳しくなります。
includes:
- ./vendor/nunomaduro/larastan/extension.neon
parameters:
paths:
- app/
# Level 9 is the highest level
level: 5
# ignoreErrors:
# - '#PHPDoc tag @var#'
#
# excludePaths:
# - ./*/*/FileToBeExcluded.php
#
# checkMissingIterableValueType: false
お試し
解析対象
静的解析の対象とするコードです。
「use App\Models\Todo」をコメントアウトし、わざとエラーが1件発生するようにしています。
<?php
namespace App\Http\Controllers;
// use App\Models\Todo;
use Illuminate\Http\Request;
class TodoController extends Controller
{
public function getStatus(Request $request)
{
$todo = Todo::find($request['id']);
if ($todo) {
switch ($todo->isComplete) {
case 0:
return ['status' => 'unfinished'];
case 1:
return ['status' => 'finished'];
}
} else {
return ['status' => 'none'];
}
}
}
実行結果
静的解析を実行します。
./vendor/bin/phpstan analyse
実行結果が表示されます。
不明なクラスがあり、エラーが1件出ています。
エラーの原因は、「use App\Models\Todo」をコメントアウトしているためです。
今回のようなuse宣言忘れは、よくありそうですね。
アプリケーション実行時に今回のエラーを発見することもできますが、静的解析により、実行前にエラーを発見できています!
Larastanは、静的解析ツールです。
Larastanを使うことで、アプリケーション実行前に問題を発見でき、開発効率やコード品質の向上につながります。
コメント