JavaScriptを有効にしてください

【PHP】静的解析ツール phpstan を使って静的解析をしてみる。

 ·  ☕ 2 分で読めます

【PHP】静的解析ツール phpstan を使ってみる

PHP の 静的解析ツール phpstan を使って静的解析をしてみる。
PHPStan

インストール

composer でサクッとインストール

composer require --dev phpstan/phpstan

動作チェック

vendor/bin/phpstan analyse [ディレクトリ]

Laravelで使用する際は larastan があるのでそちらを使ってみるのも良いようです。
nunomaduro/larastan

使い方

基本的な使い方

vendor/bin/phpstan analyse [options] [<paths>...]

オプション

各種オプションです。
PHPStan コマンドラインオプション

使用しそうな箇所だけ抜き出しています。

  • --level|l
  • --generate-baseline|-b
  • --generate-baseline|-b
    • 既存のエラーを無視する phpstan-baseline.neon が自動的に作成される。
  • --error-format
    • エラーフォマットを指定 エラー形式(指定がない場合は table
  • --no-progress
    • プログレスバーを表示しない
  • --memory-limit
    • メモリの指定 例:--memory-limit 1G
  • --xdebug
    • xdebug が有効にする場合に使用(パフォーマンスが落ちる

PHPStanとの戦い

PHPStan は 0-9 までの10のレベルが存在します。
レベルの指定がない場合はレベル0で判定をします。
Rule Levels | PHPStan

  • 0 - 基本的なチェック、未知のクラス、未知の関数、$this上で呼び出された未知のメソッド、メソッドや関数に渡された引数の数が間違っている、常に未定義の変数をチェック
  • 1 - 未定義の変数、__call__get を持つクラス、未知のマジックメソッドとプロパティの可能性がある
  • 2 - $this 以外のすべての式で未知のメソッドをチェック、PHPDocs を検証する
  • 3 - 戻り値の型、プロパティに割り当てられた型の確認
  • 4 - 基本的なデッドコードチェック、instanceof やその他の型チェックが常に false、到達しない else 文、return 後の到達不能コードなど
  • 5 - メソッドや関数に渡される引数の型チェック
  • 6 - タイプヒントの欠落を報告する
  • 7 - 部分的に間違っている論理和型の報告、論理和型の一部の型にしか存在しないメソッドを呼び出した場合(その他の不正確な状況も)
  • 8 - null 可能な型に対するメソッド呼び出しとプロパティへのアクセスを報告する
  • 9 - 混合型に厳密であること - この型で唯一許される操作は、この型を別の混合型に渡すことである

これらのレベルを上げて安全安心の開発を行いたいところですが…
実際、開発効率との兼ね合いでレベルを考えて指定してください。

試してる

PHPStan の Playground を利用してブラウザ上で試すこともできます。
Playground | PHPStan

参考

共有

こぴぺたん
著者
こぴぺたん
Copy & Paste Engineer