この記事は「ひとりでカンファレンスふりかえりo0h Advent Calendar 2021」のday-19です。

ひとりでカンファレンスふりかえりo0h Advent Calendar 2021 - Adventar

今日振り返るのは、「phpstan-strict-rulesを肴に「PHP8時代のコード」を考えてみる」です。 PHP Conference Japan 2021のCfPに応募しました。Regular session (25 mins)の枠になります。

phpstan-strict-rulesを肴に「PHP8時代のコード」を考えてみる

概要

PHPStanのルールに、「厳密なコーディング」を課するphpstan-strict-rulesというプラグインがあります。

https://github.com/phpstan/phpstan-strict-rules

これは、例えば「 empty() の利用を禁止する」「 in_array()の第3引数(厳密比較フラグ)のtrue指定を必須にする」などといった、曖昧な処理を拝する(等)のルールをPHPStanに提供するものです。

PHPは、8.0になって == のわかりにくい挙動が変更(改善)されたり、Curlなどのresource型が変更になったり(独自型の導入)・・などの「厳密」なコーディングがサポートされやすくなってきました。型システムの強化もいろいろな所に見られます。 7以降、全体的に「堅牢」な開発を推奨する流れに寄っているように感じます。

こうした「言語自体の進化」と「本体では支えきれない、3rd partyのツールによるガードレール」を手に取りながら、日常のPHPソフトウェアの開発時に「やっておきたいこと」を見出してみるのも面白いかも・・?と思って提出してみたものです。

とりわけ、PHP7->8へのアップグレードに際しては、「普段から厳密なコーディングを行っている」のであれば大きなハードルはかなり取り除かれるのでは?という感覚もあります。なので、「すぐに8に上げる訳ではないけど、今のうちにやっておけること」として、strict-rulesを含む静的解析の導入・活用・強化があるようにも感じます。 その辺りも絡めて話せるのではないかな、と考えていました

動機

自分がPHP8の(新)機能を眺めたときの雑感が、「型」「曖昧さの排除」でした。 そこに端を発して、「最近っぽいPHPコード」「言語自体の進化の方向性と、コミュニティで提供されているリソースを活用すること」について、自身の解釈を整理しておきたいなーと感じた次第です。

あとは、単純に「自分だったら新規/既存PJに対して、strict rulesってどうやって使っていくかな・・?」なんて事も考えてみたいな、とか。

25分枠で応募したものですから、割と「注目すべきルール」についても「PHP8の進化(型、比較周り)をまとめておさらい」についてもそれぞれ踏み込んでみようかなーという気持ちでした。