boscoworks.log

boscoworksのブログ的な

レガシーコードと戦っているはなし

概要

PHP7が話題になるなか、EOLをとっくに迎えたPHPを使ったシステムを運用するケースは少なくないかと思います。自分もそんなひとりで、今回はそのレガシーコードたちを抱えながらどうにかしてPHPのバージョンアップを進めようとした苦労話です。
今回はPHP5.3から5.5にあげます。5.5もレガシー感あるけど・・・まぁ・・・。

なぜやるか

エンジニアにとってはEOLなPHPを使うこと自体がナンセンスだと思いますが、建前的に考えた理由としては:

  1. PHPそのものの不具合が直る
  2. PHPそのものがはやくなる
  3. 悪い人に攻撃されにくくなる
  4. 最近出てるイケてるライブラリとかツールとかが使えるようになる

みたいな感じでしょうか。

なにをしたか

  1. php.netを読み漁る
  2. 後方互換のない機能を洗い出す
  3. システムに対して影響範囲を洗い出す
  4. php -l とかやる
  5. テストを実施する
  6. エラーログを確認する

これをひたすら繰り返します。

どのへんでつまったか

そこそこ大きなシステムを複数にまたがって確認しましたが、ひっかかったのはだいたい以下の4点でした。

マジッククォーツ

PHPを長く使ってる人はあんまり使わないような気もしますが、フレームワークで使われてるケースはあるみたいなので要注意。

preg_replaceのe修飾子

これはいたるところにありました。そもそもe修飾子は割とメジャーに使う機能だったけどなぁ。

Declaration of %s::%s() should be compatible with that of %s::%s()

継承元のメソッドと継承先のメソッドで引数の個数や型がずれてるとPHP strict standardsエラーが出るようになります。プログラム的には良くないんだろうけどPHP的には昔からあんまり意識されてない部分で、これも該当箇所が結構ありました。

参照渡し

perlとか書いてた人は割と参照渡しする感じですかね。PHPでは最新だと使えなくなりました。これはそんなに数はなかったのですが、探すのに苦労しました。

で、結局

なんとかひとつのシステムを無事にアップデートできたようです。
でもPHP5.5もEOL近いし、PHP7にしたいなーとも思いつつ。
最近のWebアプリの開発ってPHPからRubyに主流がシフトしてるのかなーと感じながら、PHPはいまだに好きなので、いろいろ今後も試していこうかと思います。