採択 2021/10/03 11:20〜 Track2 Regular session (25 mins)

PHP 静的解析 活用術 2021 PHP Conference Japan 2021

6
yosatak たけうちよしたか yosatak

PHPコーダーの皆さん!型、付けてますか?

PHPStanやPhan、psalmを利用することで、PHPでも実際に実行する前に型エラーを検出することができる事は既にご存知でしょう!(知らなくてもこのセッションを聞けばOKです)

静的解析のライブラリを活用することで、

  • int|nullを返却する関数のnullハンドリングを忘れていたり
  • '1' === 1といった数字文字列の取りあつかいの間違えを見つけたり
  • 存在しない可能性のある配列の中身へのアクセスを事前に検知したり
    することができます

特に、PHP8からは、存在しない配列の中身へのアクセスがWarningからErrorへ変更されており、環境によってはPHP7からのアップデートでアプリケーションが動かなくなる原因の一つである一方、Union型のサポートなど、言語としての型サポートも整っていく傾向があり、アップデート作業の一環としても強力なツールとなります。

既存のPHPプロジェクトに静的解析ツールを導入する際に問題になるのが、

  • エラーが多く出すぎる
  • アプリケーション内で、文字列でクラス名を扱かっているのでクラスが静的解析で追えない
  • 値域を厳密に制限する関数や返却する型が動的に変わる関数では、PHPdocのtypehintを利用した静的解析では、動的な型付けに対応できない
    場面が多くあります。

このセッションでは、PHPStanを用いた型解析について説明した後に、

  • コミット差分によるエラー検出をし、変更箇所に起因するエラー箇所をciで警告するようにした方法(github actions/gitlab-cilですぐに使えます!)
  • PHPStanのオリジナル拡張を作って、PHPStanデフォルトの機能で手が届かなかった点を改善する方法(実際にセッション中に拡張を作ります!)
    について話します

Discord Channel: #track2-5-a-php-static-analysis-2021