はじめに

フレームワークなしのphpバージョンをアップグレードする機会があったので、そのときに対応する必要があることをまとめておいた。
フレームワークのアップグレードと違い、移行ガイドなどはないので、どういう方針でアップグレードすれば良いのかとなった。

基本は、変更点を見ながら修正していく。

はじめのステップ

変更点の確認

まずは、phpの変更点を確認する。

変更履歴は PHP.netで確認できるので確認しておこう。 どういう変更があるのかだけ頭に入れておきたい。
後々、なんでこれが動かないのかとなったときには再度変更を確認するとわかるかも。

使用しているライブラリの確認

  • phpのバージョンアップで動かなくなっているか
  • EOLのライブラリはないか
  • EOLのライブラリに代替ライブラリはあるか/ないか
     → ある場合は代替コードで修正するのにどのくらい工数がかかるのか
     → ない場合は移行後のphpのバージョンに対応しているか(対応していない場合は自力で修正できるか)
  • 移行ガイドはあるか  例えば、PHPExcel -> PHPSpreadSheetへの移行は移行ガイドがある
    https://phpspreadsheet.readthedocs.io/en/latest/topics/migration-from-PHPExcel/

ツールを使う

ツールを使うと効率的に移行ができる。
また静的解析はコードの品質の向上にも有効なので導入した方が良い。

composerを導入する

ライブラリを管理せずに入れている場合は、composerを入れてバージョン管理やアップグレードを楽にしよう。
そしてautoload も便利。
include, requireで クラスや関数を使って地獄と化しているコードはautoloadを導入するべきと思う。
(※ namespaceuse を使用してどのクラス/関数を利用しているのかをわかるようにしよう。)
上記の作業が必要な場合、プロジェクトの規模が多いとかなりしんどいので、地道に進めていこう。

PHPCSfixerでコードを整形する

コード整形をしてくれるライブラリ
これもコード品質を上げるために入れておいた方が良い。

rectorを使ってリファクタリングする

rectorはコードの修正を自動で行ってくれるライブラリ
特に便利なのは、PHPのバージョンを指定するとそのバージョンまで利用可能な書き方で修正してくれる。

PHPStanを使う

PHPStanもコードの品質を上げる静的解析のライブラリ
このライブラリは、基本的な文法部分から型の定義や型チェックを行ってくれる。
まずは、level:1 で導入して指摘されたものを解消して、徐々にレベルを上げてコードの品質を上げるのが良い。

PHPUnitを導入する

自分が変更したことによって意図しない動作になっていないかなどを確認したい。
つまり、コードの変更が発生するとき、ユニットテストが欲しい。
そういう時があるので、PHPUnitを導入する。
ただ、既存のプロジェクトだとどこから手をつけて良いのやら・・・となってしまう。
まずは共通の関数(Utility)から手をつけるとわかりやすいかも。

おわりに

phpのバージョンアップ時に自分が考えていることを記事にした。
基本はツール頼りだが、規模が大きくなるにつれて効力がわかるのかなと思う。
インデントがグチャってたり、ツール導入すら面倒くさくなるほどカオスになっているプロジェクトもあるが、根気よくやることが大事なのだなと思う。