はじめに
こちらを拝見して静的解析やってみたいという思いが止められなくなりました。
実際にLaravelプロジェクトにPHPStanを導入してみましたので、そのことについて書いてみます。
大まかな環境は以下の通りです。
- Laravel:5.5系
- php:7.2系
参考にさせて頂いたサイト
- https://speakerdeck.com/hirak/php-static-analysis
- https://qiita.com/ngmy/items/1a8ef21c76d74c1d4dfe
- https://qiita.com/qiita_masaharu/items/24bf34579119628eefe2
導入
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に追加する必要がありました。
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に静的解析を組み込んでみようと思います!