PHPStanをLaravelに導入してみた


はじめに

こちらを拝見して静的解析やってみたいという思いが止められなくなりました。
実際にLaravelプロジェクトにPHPStanを導入してみましたので、そのことについて書いてみます。

大まかな環境は以下の通りです。

  • Laravel:5.5系
  • php:7.2系

参考にさせて頂いたサイト

導入

1.Larastanで入れてみる

Larastanなる、LaravelのためのPHPStanのwrapperがあるらしい!
導入はcomposerで一発!

$ composer require --dev nunomaduro/larastan

でも、、、Laravel5.5には入れられませんでした(´・ω・`)

Requires:
 PHP 7.1.3+
 Laravel 5.6+

2.普通にcomposerで入れてみる

$ composer require --dev phpstan/phpstan

依存関係がconflictして入らなかった(´・ω・`)

3.PHAR archiveで入れてみる

公式によると他packageと依存関係がconflictした場合は、PHAR archiveを使うこと推奨みたいです。
release notesよりphpstan.pharを入手して、プロジェクト内の適当な場所にぶっ込んであげましょう。

試しに解析してみる

とりあえず、プロジェクト内のapp配下をレベル0(最緩)で解析してみる。

$ vendor/bin/phpstan analyse -l 0 app

pharで入れた場合は以下

$ php phpstan.phar analyse -l 0 app

案の定、たくさんエラーが出る。。。

エラー解消

エラー解消にもいくつか手段がありそうです。

1.自分で設定を書く

phpstan.neon という設定ファイルを自分で作成し、エラー解消してやりましょう。
こちらの記事が詳しいです。

その他、独自でhelperを実装していたのでそちらもphpstan.neonのautoload_filesに追加する必要がありました。

phpstan.neon
parameters:
  autoload_files:
    - ./app/myhelper.php

一応、 phpstan.neon を使用する際のコマンドは以下の通り。

$ vendor/bin/phpstan analyse -c phpstan.neon -l 0 app

または

$ php phpstan.phar analyse -c phpstan.neon -l 0 app

2.pluginを使う

phpstan-laravelというpluginがあり、こちらを使用するとエラーをある程度解消してくれるようです。
ただし、Laravel5.5 or 5.6のみ対応であり、更新される気配もなさそうなので今から利用するのはイマイチな気もします。。。

導入してみての感想

  • 導入して解析可能にするだけならかなり簡単にできる。
  • 解析の結果いくつかバグやphpdocがおかしい箇所もいくつか発見できた。
  • 静的解析を活用するにはphpdocや型宣言(タイプヒンティング)を普段からしっかり書くことが必要。
  • 逆に、PHPStanを導入することでphpdocや型宣言(タイプヒンティング)をしっかり書く意識が高まるという効果もあった。

次回はCIに静的解析を組み込んでみようと思います!