第44回: 静的解析(PHPStan) — コードを「実行する前」にバグを発見する
PHPは動的型付け言語のため、実行するまでわからないバグが潜みやすいです。PHPStanを使えば、コードを実行せずに型エラー・ヌル参照・存在しないメソッド呼び出しなどを事前に検出できます。
Year
PHPは動的型付け言語のため、実行するまでわからないバグが潜みやすいです。PHPStanを使えば、コードを実行せずに型エラー・ヌル参照・存在しないメソッド呼び出しなどを事前に検出できます。
テストを書いても、実際にどのコードパスが通過しているかを確認しなければ、未テストの分岐が本番でバグを起こします。コードカバレッジを可視化することで、テストが不足している箇所を客観的に把握できます。
「ユーザーが投稿を作成できるか」という検証は、Unitテストだけでは限界があります。Laravelでは、ユーザー操作の流れを検証するFeatureテストと、個別ロジックを検証するUnitテストを使い分けることで、テストが過不足なく整います。
実装後のテストは「動いているコードを確認する作業」になりがちで、設計の改善には繋がりにくいです。TDDではテストを先に書くことで「何を作るか」が明確になり、余分な実装が増えにくくなります。
外部依存が絡むテストは遅く・不安定で・副作用が生じます。モックとスタブを使えば、テスト中に依存クラスを「替え玉」に差し替えて、速くて安定したテストを書けます。
機能が増えるにつれて手動確認のコストは指数的に増えます。PHPUnitによるテストを自動化しておけば、変更のたびに「全体が壊れていないか」を数秒で確認できます。
古いデータのクリーンアップ・通知の一括送信・マスタデータの投入など、定期的に実行する作業をコマンド化しておくと、運用ミスと手作業コストを大幅に削減できます。Artisanカスタムコマンドを作成すれば、php artisan 1本で実行できます。
「ユーザー登録後にウェルカムメール送信・ポイント付与・Slack通知をしたい」という要件が増えるたびに同じコントローラを修正するのは、変更のリスクと範囲が広がります。イベントとリスナを使えば、既存コードを触らずに新しい動作を追加できます。
ユーザーが「送信」を押してから数秒待たされるのは、UXを大きく損ないます。Laravelのキュー・ジョブを使えば、重い処理をバックグラウンドに追い出し、レスポンスを即時返せます。
ログイン・登録・パスワードリセットを自前で作るのは手間がかかるうえ、バグが入り込むリスクもあります。Laravel Breezeは認証機能を最小構成で素早く導入できる公式スターターキットです。