第44回: 静的解析(PHPStan) — コードを「実行する前」にバグを発見する

章: 第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) を学びます。チームのコードスタイルを自動で統一する方法を整理しましょう。

Related Articles