章: 第5章: テストと品質管理
型エラーや未定義変数のバグを、実行して初めて気づいていませんか?
PHPは動的型付け言語のため、実行するまでわからないバグが潜みやすいです。PHPStanを使えば、コードを実行せずに型エラー・ヌル参照・存在しないメソッド呼び出しなどを事前に検出できます。
静的解析なしで開発を続けると何が起きるか
コードレビューで型の不整合を見落とし、テストでは再現しにくいエッジケースのバグが本番で発覚します。PHPStanを開発フローに組み込むと、こうした問題をコーディング中に検出できます。
PHPStanの解析レベルの比較
| レベル | 検出内容 | 推奨場面 |
| 0 | 明らかな構文エラー・未定義クラス | レガシーコードへの導入初期 |
| 3 | 戻り値の型不一致・未定義メソッド | 既存プロジェクトへの段階的導入 |
| 5 | nullableの未チェック・型の曖昧さ | 新規プロジェクトの標準 |
| 8〜9 | 型安全の厳格チェック | 高品質が求められるライブラリ |
チェックポイント: 既存プロジェクトにPHPStanを導入するときは、まずレベル0から始めて段階的に上げましょう。いきなりレベル5を適用すると大量のエラーが出て対応が困難になります。
baseline機能を使うと既存エラーを除外して新規エラーだけを追跡できます。
コードサンプル
# インストール
composer require --dev phpstan/phpstan
# 実行(レベル0〜9、数字が大きいほど厳しい)
./vendor/bin/phpstan analyse src --level=5
# phpstan.neon 設定ファイル例
# parameters:
# level: 5
# paths:
# - src
まとめ & 次のステップ
- PHPStanで型エラーや未定義変数を実行前に検出でき、品質を低コストで高められます
- レベル0から段階的に上げていくのが既存プロジェクトへの導入戦略です
phpstan.neonで解析対象パスとレベルを設定ファイルで管理しましょうbaseline機能で既存エラーを除外して新規エラーのみを追跡できます- CIに組み込むことで、プルリクエスト時に静的解析を自動実行できます
次回は コードフォーマッタ(PHP CS Fixer) を学びます。チームのコードスタイルを自動で統一する方法を整理しましょう。