PHPの脆弱性が発見

PHPに脆弱性が発見され、いくつものサービスが終了していってます。結構前にPHP8化対応を行いかなり苦行度の高い作業だったので、思い出しつつ感想を書いていきます。
PHPのバージョンアップの恐怖体験(PHP7->8)
筆者が数年前に行ったのは7系を8系に上げるミッションだ(エンジニアっぽい書き方)、非PHPエンジニアの人は「適当にバージョン上げてテスト回して終わりやん!」と思うかもしれない。しかし、PHPのバージョンアップ時には「既存の処理の曖昧な挙動がやや厳しくなる」ことが多々ある。以下に簡単な例を示す。一番直す箇所が多かった「未定義の配列キーへのアクセス」だ。
// 修正前、警告が出る
$data = [];
var_dump($data[0]['name']);
こんなコードが、PHP7まではNotice(注意)、PHP8ではWarning(警告)となる。
それを警告が発生しないように、 ??(null合体演算子)などを使って、参照できない場合は空文字を返す...みたいな感じに粛々と修正をする。
// 修正後、警告が出なくなる
$data = [];
var_dump($data[0]['name'] ?? '');
「いや、同じように直せば良いだけで簡単では?」と思うかもしれない、しかし、サービス開始からの時間に比例してコードは肥大化していき、さらにリファクタ(イケてないコードを良い感じにすること)の習慣が無いプロジェクト(プロジェクトの大半はリファクタ工数が取れないため、リファクタが積極的に行われることはないと思う)では、デッドコード(謎の過去に使われていたと思われるコード)なども大量にあり、それらが合計数10万行ほどあり、作業量は膨大になる。
それらを担当者は毎日ひたすら直すのだ、画面へアクセス->警告の再現確認->修正->警告の修正確認...をひたすら毎日繰り返した。
センターを押してスイッチ...センターを押してスイッチ...をしてるシンジ君並みの虚無顔だったと思う。
※このような定型作業はAIと非常に相性が良いので、今なら実装工数を減らすことが出来ると思われる。
実装が終わったとしても、それらが修正されたことを確認する「テスト」が待っているので更に工数が増える。当然テストでは新たな不具合も発生するので、実装側も修正で工数が持っていかれる...と地獄のようなループになる。
自分のチームでは3名で3か月以上かけて、すべてのテストを終わらせてバージョンアップを終わらせることができた。
他の人の話を聞くと、1人で半年かけて細々と修正して終わらせた(絶対に精神的にきつい)...などかなりの時間を要するのが伺えた。
そして、これらの作業は顧客受けが最悪である。新機能は一切増えないけど謎の工数が発生し、お金が飛んでいくのだ。つまり、上手く顧客へ説明を行い説得できないと工数を確保できずに更なる悪循環を生み出すことになると思う(バージョンを上げないのでそのまま使ったり、自主的に工数を捻出して直したり)
もし、PHPのバージョンアップをしていない場合は「2026/10/21 23:00」以降にスグにやります!ってなっても作業量的に厳しすぎるので、状況によってはサービス終了の決断も必要となると思いました。
感想
一応ブログのPHPのバージョンは最新にしました。
最近は顧客情報の流出!とかPHPの脆弱性!とか嫌なニュースばかりなので明るいニュースがみたいですね。
ほんとずっと、ビーバーとかアザラシの赤ちゃん特集やっていて欲しい。
どこかの開発現場では、間違いなく残業地獄が発生してますね...。頑張っている方にエールを!
ここまで読んでいただきありがとうございます。

マジでPHPのバージョンアップは苦行度高め

コメント