2
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

VSCode で Laravel 用の静的解析ツール larastan を使えるようにする

Last updated at Posted at 2023-08-31

Laravelのプロジェクトにおいて、静的解析ツールlarastanVSCodeで使えるようにしたので、その備忘録です。

以下環境で実施しました。

PHP : 8.2.9
Laravel : 10.20.0
VSCode : 1.81.1

# WSL
WSL バージョン: 1.2.5.0
カーネル バージョン: 5.15.90.1
Ubuntu 20.04.6 LTS

拡張機能PHPStanをインストールする

拡張機能を「PHPStan」で検索すると複数ヒットするのですが、今回は以下の拡張機能をインストールしました。

以下の理由でこちらの拡張機能を選定しました。

  • インストール数は類似拡張機能の中で最多ではないが、引けを取らない数字である
  • 最終更新日が唯一年内(2023年8月末現在)であった
  • ファイル単位で解析できる
    • 他の拡張機能だと「指定ディレクトリ以下全て」に対してしか行えないものもあるため

バージョン 3.0以降(2024年4月~)
単一ファイルのチェックではなく、常にリポジトリ全体のチェックを行うようになっています。設定で単一ファイルチェックにすることも可能ですが、キャッシュを破壊するため推奨しないとしています。

phpstan.neonを配置する

PHPStanの設定ファイルphpstan.neonをディレクトリ直下に配置します。
※ディレクトリ直下以外に配置する場合は、拡張機能の設定からパスの修正が必要です

ひとまずPHPStanのレベル(今回は最大レベル)と、チェック対象パスを指定します。

phpstan.neon
parameters:
	level: 9
    paths:
        - app

larastanのインストール

以下コマンドからプロジェクトにlarastanをインストールします。

composer require nunomaduro/larastan:^2.0 --dev

larastanのバージョンについて
larastanのバージョン2.0.0以上を使用するには

  • PHP 8.0+,
  • Laravel 9.0+
    が必要です。

それ未満のPHP/Laravelバージョンの場合は上記コマンドではエラーとなります。
その場合は、^2.0^1.9に置き換えるなどで実行してください。

larastanをインストールすると、PHPStanも含まれています。
そのため、この時点で静的解析(larastan的には「コード解析」という言葉を用いるそう)ができると思います。

任意のphpファイルを開き、Ctrl + Shift + pでコマンドパレットを開きます。
PHPStan: Scan current file for errorsを選ぶことでも静的解析を実行できます。
screenshot_02.jpg

PHPStanも静的解析ツールなのですから、それだけがあれば良いような気もします。

ただ、現状larastanの設定がないままPHPStanだけを使うと、以下ではUser::create()redirect()->action()などがCall to an undefined (static) method ...という解析結果になってしまいます:disappointed_relieved:

screenshot_02.jpg

larastanを利用するための設定を追加する

phpstan.neonlarastanの設定を追加することで、Laravel用の解析を実行することができます。

phpstan.neon
# larastanを使用する
includes:
	- ./vendor/nunomaduro/larastan/extension.neon

parameters:
	level: 9

上記includesを追加することで、先程のCall to an undefined (static) method ...というエラーがなくなります:cherry_blossom:
screenshot_03.jpg

larastanに怒られないようにコードを書きたい!と意気込みながら生きています。
(でもlevelをmaxに設定すると結構大変なので、levelを1つ1つ上げていきながら解消するのがいいのかなと思ったり:sweat_smile:

余談ですが、

  • プロジェクトのcomposer.jsonに記載のPHPバージョン
  • ローカルのPHPのバージョン
    が合っていない場合はエラーで動かないのでお気をつけください!
# composer.jsonには">= 8.1.0"という指定なのに、ローカルのPHPバージョンが7.4.33で怒られる
PHPStan process exited with error  filteredErr=PHP Fatal error:  Composer detected issues in your platform: Your Composer dependencies require a PHP version ">= 8.1.0". You are running 7.4.33.

プロジェクトごとにPHPのバージョンが違うこともあります。
そのため、私は以下を参考にして、適宜切り替えられるようにしています。

2
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?