Laravel で使いたい便利なパッケージ4選 (Pint, Larastan, Telescope, Insights)

# はじめに
**Laravel での開発効率・品質向上に繋がる便利なパッケージ**のまとめ記事です。

| パッケージ名 | 用途 | 対応バージョン |
| ---- | ---- | ---- |
| Laravel Pint | コード整形 | PHP 8.1 以上 |
| Larastan | 静的コード解析 | PHP 8.0 以上 かつ Laravel 9.x 以上 |
| Laravel Telescope | デバッグ | PHP 8.0 以上 かつ Laravel 8.37 以上|
| PHP Insights | コード品質分析 | PHP 7.4 以上 | 

# Laravel Pint

## 概要
PHP-CS-Fixer をベースとして作成された Laravel 用のコード整形ツール

https://laravel.com/docs/10.x/pint

## 対応バージョン
PHP 8.1 以上

## インストール手順
Laravel 9.x 以上のアプリケーションであれば基本的には不要です。
もしインストールされていなければ、以下のコマンドを実行してください。
```bash
composer require laravel/pint --dev
```

## 使い方
以下のコマンドを実行するとコードが整形され、ファイルが自動で変更されます。
```bash
./vendor/bin/pint
```

ファイルを自動で変更したくない場合は、`--test` オプションを付加して実行してください。
```bash
./vendor/bin/pint --test
```

## 補足
整形ルールを変更する場合は、[PHP-CS-Fixer のドキュメント](https://mlocati.github.io/php-cs-fixer-configurator)を参照して `pint.json` に記載してください。

例）不要なPHPDocのタグを削除するルールを OFF にする
```json:pint.json
{
    "preset": "laravel",
    "rules": {
        "no_superfluous_phpdoc_tags": false
    }
}
```

# Larastan

## 概要
PHPStan をベースとして作成された Laravel 用の静的コード解析ツール

https://github.com/nunomaduro/larastan

## 対応バージョン
PHP 8.0 以上 かつ Laravel 9.x 以上
※ Laravel 9.x 未満の場合でも古いバージョンの Larastan であれば利用可能ですが、今回は対象外とさせていただきます。

## インストール手順
以下のコマンドを実行してください。
```bash
composer require nunomaduro/larastan:^2.0 --dev
```

`phpstan.neon` または `phpstan.neon.dist` の名称で設定ファイルを作成してください。

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

parameters:

    paths:
        - app/

    # Level 9 is the highest level
    level: 5
```

## 使い方
以下のコマンドを実行すると静的解析が実行され、コンソールに結果が出力されます。
```bash
./vendor/bin/phpstan analyse
```

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/339770/de3cf99c-5720-cf02-5f61-42d6f356632f.png" width="700" />

:::note warn
もし `Allowed memory size exhausted` のエラーが表示された場合は、`--memory-limit` オプションを付加してメモリの上限を上げて実行する必要があります。

```bash
./vendor/bin/phpstan analyse --memory-limit=2G
```
:::

## 補足
細かい設定を行いたい場合は、以下のリンクを参照して `phpstan.neon` または `phpstan.neon.dist` に記載してください。
* [全体に関する設定はこちら](https://phpstan.org/config-reference)
* [Laravel 固有の設定に関する変更はこちら](https://github.com/nunomaduro/larastan/blob/master/docs/rules.md)

例）`===` や `!==` で常に true となる条件文があればエラーとする
```:phpstan.neon
parameters:
    checkAlwaysTrueStrictComparison: true
```

また、**既存のプロジェクトに静的解析ツールを導入して現状のプログラムを修正するのはリスクを伴います。** そのような場合は `--generate-baseline` オプションを付加して静的解析を実行し、ベースラインファイルを作成すれば対応可能です。ベースラインファイルには現状のプログラムから検出されたエラーが出力されます。ファイルを読み込むことで、そのエラーを以降の静的解析で無視することができます。

```bash
./vendor/bin/phpstan analyse --generate-baseline

# メモリ不足の場合はこちら
./vendor/bin/phpstan analyse --memory-limit=2G --generate-baseline
```

なお、作成したベースラインファイルを読み込むためには `phpstan.neon` または `phpstan.neon.dist` に以下の追記が必要です。

```:phpstan.neon
includes:
    - ./phpstan-baseline.neon
```

# Laravel Telescope

## 概要
アプリケーションが受信するリクエスト、データベースのクエリ、実行した Artisan コマンド、発生した例外などをブラウザから確認できる Laravel のデバッグツール

https://laravel.com/docs/10.x/telescope

## 対応バージョン
PHP 8.0 以上 かつ Laravel 8.37 以上
※ Laravel 8.37 未満の場合でも古いバージョンの Telescope であれば利用可能ですが、今回は対象外とさせていただきます。

## インストール手順
**データベースに接続可能な状態**で、以下のコマンドを実行してください。
```bash
composer require laravel/telescope --dev
php artisan telescope:install
php artisan migrate
```

次に、ローカル環境でのみ Telescope を動作させるため、`config/app.php` から`app\Providers\TelescopeServiceProvider::class` の記述を削除してください。そして、その代わりに `app/Providers/AppServiceProvider.php` に以下の記述を追記してください。
```php:app/Providers/AppServiceProvider.php
    public function register(): void
    {
        if ($this->app->environment('local')) {
            $this->app->register(\Laravel\Telescope\TelescopeServiceProvider::class);
            $this->app->register(TelescopeServiceProvider::class);
        }
    }
```

最後に、Package Discovery の機能で Telescope が自動で検出されないように、`composer.json` の `"dont-discover"` に `"laravel/telescope"` を追記してください。
```json:composer.json
    "extra": {
        "laravel": {
            "dont-discover": [
                "laravel/telescope"
            ]
        }
    },
```

## 使い方
Laravel の開発用サーバを `php artisan serve` で起動して `/telescope` にアクセスすると Telescope のダッシュボードを開けます。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/339770/99a65082-9959-6225-ff3a-b3f88329c40d.png" width="800" />

## 補足
Telescope では `telescope_entries` テーブルに各種データを保存しており、あっという間に大量のデータが登録されます。したがって、以下のコマンドをスケジュール実行等で定期的に実行する必要があります。ちなみに、デフォルトで24時間を超過したデータが削除されます。

```bash
php artisan telescope:prune
```

また、もしローカル環境で Telescope を無効にしたくなった場合は `.env` に以下の記述を追記してください。

```:.env
TELESCOPE_ENABLED=false
```

# PHP Insights

## 概要
以下の観点でコードの品質を分析するツール

* コードの品質
    - 未使用の変数がないか
    - 等価演算子は `==` でなく `===` を使用しているか　など

* コーディングスタイル
    - 余分な空白行がないか
    - 1行の文字数が多すぎる行がないか　など

* アプリケーションアーキテクチャ
    - 1つの関数に多くの処理を記述していないか
    - 1つのファイルに複数のクラスが宣言されていないか　など

* コードの複雑さ
    - 循環的複雑度が高くないか

:::note info
循環的複雑度とは？（Wikipedia より引用）
> 循環的複雑度（英: Cyclomatic complexity）とは、ソフトウェア測定法の一種である。Thomas McCabe が開発したもので、プログラムの複雑度を測るのに使われる。プログラムのソースコードから、線形的に独立した経路の数を直接数える。
:::

https://phpinsights.com/get-started.html#within-laravel

## 対応バージョン
PHP 7.4 以上

## インストール手順
以下のコマンドを実行してください。
```bash
composer require nunomaduro/phpinsights --dev
php artisan vendor:publish --provider="NunoMaduro\PhpInsights\Application\Adapters\Laravel\InsightsServiceProvider"
```


## 使い方
以下のコマンドを実行すると分析が開始されます。
```bash
php artisan insights
```
分析が完了すると、コード全体に関する分析結果がコンソールに表示されます。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/339770/34e6b00d-92d0-8637-dad0-f6c7cc0fea04.png" width="750" />

Enter キーを押すと、続けて具体的に修正すべき箇所が表示されます。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/339770/910aaaf5-03bf-62f3-3e4a-a486e7b7696d.png" width="750" />

## 補足

自動で修正しても問題ないと思われる一部の箇所に関しては、`--fix` オプションを付加して実行すれば自動で修正を行うことができます。

```bash
php artisan insight --fix
```