VSCodeにPHPStanを導入してバグ防止

  •  
 
TaKo2023年11月1日 - 16:57 に投稿

概要

PHPStanはPHPのソースコードを検証し、バグの原因になりうる記述や非推奨・廃止されたメソッド等を警告してくれる静的分析ツール。

本稿では、PHPStanを導入しVSCodeで自動チェックする方法を紹介する。

PHPStanを導入することで、バグを未然に防ぐことができるようになる。

またここでは、Drupalの開発で利用する想定で紹介する。

環境情報

  • Mac Monterey 12.7
  • Apple M1
  • composer:2.6.5

    • HomeBrewでインストール
    • 以下のパスが通っていること
    export PATH=$HOME/.composer/vendor/bin:$PATH
    
  • *Drupal 9, 10 で動作確認 済

手順

PHPStanをcomposerでインストール

  1. composerを使って、PHPStanとDrupal用のPHPStanプラグインをGrobalにインストールする。

    • *プロジェクト(composer local)に導入するのが一般的。その場合は --devオプションをつけることを推奨する。
    • ここでは~/.composer/vendorにインストールされる。
    composer global require phpstan/phpstan phpstan/extension-installer mglaman/phpstan-drupal phpstan/phpstan-deprecation-rules
    
  2. phpstanがインストールできたことを確認する。

    phpstan --version
    
    PHPStan - PHP Static Analysis Tool 1.10.40
    

phpstanの設定ファイルを作成

  1. 任意の場所にphpstan.neonを作成する。

    • ファイル名は任意に変えて良い。
    • ここでは~/.composer/に作成する。*プロジェクトルートに作成するのが一般的。
    vi ~/.composer/phpstan.neon
    
  2. 以下の内容を記載して保存する。

    • level:分析の強度、0 から 9(= max) の整数値。大きいほどチェックが厳しくなる。 参考
    parameters:
      level: 6
      paths:
        - %currentWorkingDirectory%/web/modules/custom
        - %currentWorkingDirectory%/web/themes/custom
      excludePaths:
        - %currentWorkingDirectory%/**/*Test.php
        - %currentWorkingDirectory%/**/*TestBase.php
    

    *2023/11/02 設定ファイルの内容を修正。プロジェクトルート以外に置く場合は、%currentWorkingDirectory% でファイルパスを補完する必要がある。

VSCode側の操作

  1. VSCodeの拡張機能「phpstan」をインストールします。

    image

  2. コマンドパレットを開き(⌘ + Shift+ p)、「基本設定:ユーザ設定を開く」を押下する。

    image

  3. settings.jsonに以下の設定を追加して保存する。

    • 最後尾の設定は,がいらない点に注意
    • 設定画面からでも入力可能。添付画像を参照のこと。
    "phpstan.binPath": "/Users/user_name/.composer/vendor/bin/phpstan",
    "phpstan.configFile": "/Users/user_name/.composer/phpstan.neon",
    

    image

サンプルソースで動作確認 *すでにDrupalの環境がある方はスキップ&自分の書いたコードで動作確認のこと。

  1. 任意の場所で、Drupal project を作成する

    composer create-project drupal/recommended-project:10.0.11 "test"
    
    cd test
    
  2. サンプルモジュール:helloworld 2.0.1 | Drupal.orgをインストールします。

    composer require 'drupal/helloworld:^2.0'
    
  3. vscodeでhelloworld/src/Controller/DefaultController.phpを開きます。

    • 【注意】プロジェクトルートがワークスペースのルートになるように開かないと、うまく分析できない。
  4. 画像の通り、18行目に警告が出ている。*「問題」一覧でも確認可能。

    image

以上

参考

付録

A: コマンド

本編はエディタで自動チェックする方法を紹介したがコマンドラインでも使用することができる。
コマンドラインでの使い方はここでは割愛する。公式ドキュメントを参照されたし。

特に、DrupalにおいてはDrupal Checkというツールでどうようのことができる(裏でPHPStanが動いているようす)。
このパッケージを導入し、以下のようなコマンドを実行すると、PHPStanを分析レベル6で実行した時と同じ結果を得ることができる。

drupal-check -a /path/to/target/file.php

Druapl Check 導入は以下の記事で紹介している。

Drupalの非推奨コードをチェックしてくれる分析ツールの紹介 | 株式会社アイ・プライド

B: phpstan: Class Drupal\node\Entity\Node not found 左のエラーなどあるはずのクラスが認識されない

Globalのvendorディレクトリを削除して、composer installでパッケージを再度インストールしたら直った。


コメントを追加

プレーンテキスト

  • HTMLタグは利用できません。
  • 行と段落は自動的に折り返されます。
  • ウェブページのアドレスとメールアドレスは自動的にリンクに変換されます。
CAPTCHA
この質問はあなたが人間の訪問者であるかどうかをテストし、自動化されたスパム送信を防ぐためのものです。
画像
VSCode拡張_PHPStan
コマンドパレット.png
設定画面から.png
動作確認.png