見出し画像

【Larastan】Laravelプロジェクトのコードの品質を向上

はじめに

コードの品質を保つためほとんどの開発プロジェクトではコードレビューを実施していると思いますが、型定義のミスなどわかりやすい部分はともかく、エラーに繋がるような実装ミスを見逃してしまうこともあると思います。
静的解析は、コードの実行前にエラーや警告を検出するための効果的なツールです。Laravelのプロジェクトでは、PHPStanをベースにしたLarastanを使用することで、より厳密なコードチェックを行い、バグの予防やコード品質の向上を図ることができます。
この記事では、LarastanをLaravelプロジェクトに導入する手順を紹介します。

PHP: 8.1
Laravel: 10.10
Larastan: 2.6

🔰 Larastan(PHPStan)とは
LarastanはPHPStanのLaravel向けラッパーで、コード内のエラーを見つけることにフォーカスしており、テストコードを書く前にバグを検知できる便利なライブラリです。

🚧 検知レベル
Larastanは解析を行う際にレベルを設定できます。レベルは9が最大で、数字が大きくなるほどより厳格な解析を行います。
レベル9よりも厳格にしたり追加の解析ルールを設定したい場合は、phpstan-strict-rulesライブラリを使えば実現できるようです。今回はこちらの検証は省きます。

導入

https://github.com/larastan/larastan

composer require --dev "larastan/larastan:^2.0"

設定ファイル作成

次に、PHPStanの設定ファイルphpstan.neonをプロジェクトのルートディレクトリに作成します。

parameters:
    paths:
        - app/
    level: 5

解析レベルは5で、appディレクトリを解析対象としています。

● 特定のエラーを無視したい場合
https://phpstan.org/user-guide/ignoring-errors
parametersにignoreErrorsを設定します。
ignoreErrorsセクションは、PHPStanやLarastanによる静的解析の際に、特定のエラーや警告を無視したい場合に使用します。特定のエラーを無視することで、解析結果が実際の問題に集中するようになりますが、乱用すると本来検出すべきエラーを見逃してしまうリスクもあるため、慎重に設定する必要があります。

メソッド未定義のエラーを無視する例
parameters:
    ignoreErrors:
        - '#Call to an undefined method App\\Models\\User::nonExistentMethod#'

● 特定のディレクトリやファイルを除外したい場合
https://phpstan.org/user-guide/ignoring-errors#excluding-whole-files
parametersにexcludePathsを設定します。
excludePathsは、静的解析の対象から特定のファイルやディレクトリを除外するために使用します。これにより、解析の範囲を必要な箇所に限定し、不要なエラーや警告の発生を防ぐことができます。

レガシーコードを解析対象外にする例
parameters:
    excludePaths:
        - app/Helpers/LegacyHelper.php

解析

設定が完了したら、以下のコマンドで静的解析を実行します。

./vendor/bin/phpstan analyse
今はNo errorsとなっています

● わざとバグを埋め込んでみる
では、わざとエラーコードを記述してテストしてみます。

<?php

namespace App\Http\Controllers;

use App\Http\Controllers\Controller;

class IndexController extends Controller
{
    public function index()
    {
        // 存在しないメソッドを実行
        $this->nonExistentMethod();
    }
}

再度解析を実行すると以下のようにエラー内容が出力されました。

Call to an undefined method App\Http\Controllers\IndexController::nonExistentMethod()

● ファイルを除外してテスト
先ほど紹介した excludePathsを使ってテストしてみます。

parameters:
    paths:
        - app/
    excludePaths:
        analyse:
            - app/Http/Controllers/
    level: 5
再度、No errorsで出力

エラーのあるディレクトリを無視して解析していることを確認できました。

まとめ

Larastanを使った静的解析は、Laravelアプリケーションの安定化や品質確保だけでなく、コードレビューの負担軽減や効率化にも貢献してくれます。

ユニットテストに加えてLarastanを導入することで、実行時に見つかるような不具合を早期に見つけることができ、手戻り等も減らせるのではないでしょうか。

プラスジャムはWeb制作会社です。
ウェブサイト制作、システム開発、Webマーケティングなど、さまざまな課題解決やアイデアを具現化するWebソリューションを提案・提供しています。

プラスジャムのお問い合わせページへ遷移します

noteでプラスジャムを見つけてくださった方は、お時間あればコーポレートサイトや他の記事もご覧いただければ幸いです。

\コーポレートサイトはこちら/

\関連記事はこちら/

プラスジャム製作開発部メンバーがWeb制作技術を紹介
案件で実装した機能や自己学習で得た知識を発信していきます。
[今回の記事担当]バックエンドエンジニア k.m