はじめに
フレームワークなしのphpバージョンをアップグレードする機会があったので、そのときに対応する必要があることをまとめておいた。
フレームワークのアップグレードと違い、移行ガイドなどはないので、どういう方針でアップグレードすれば良いのかとなった。
基本は、変更点を見ながら修正していく。
はじめのステップ
変更点の確認
まずは、phpの変更点を確認する。
- 変更履歴 | PHP.net
https://www.php.net/manual/ja/doc.changelog.php
変更履歴は PHP.net
で確認できるので確認しておこう。
どういう変更があるのかだけ頭に入れておきたい。
後々、なんでこれが動かないのかとなったときには再度変更を確認するとわかるかも。
使用しているライブラリの確認
- phpのバージョンアップで動かなくなっているか
- EOLのライブラリはないか
- EOLのライブラリに代替ライブラリはあるか/ないか
→ ある場合は代替コードで修正するのにどのくらい工数がかかるのか
→ ない場合は移行後のphpのバージョンに対応しているか(対応していない場合は自力で修正できるか) - 移行ガイドはあるか
例えば、
PHPExcel
->PHPSpreadSheet
への移行は移行ガイドがある
https://phpspreadsheet.readthedocs.io/en/latest/topics/migration-from-PHPExcel/
ツールを使う
ツールを使うと効率的に移行ができる。
また静的解析はコードの品質の向上にも有効なので導入した方が良い。
composerを導入する
- composer
https://getcomposer.org/
ライブラリを管理するツール。
ライブラリを管理せずに入れている場合は、composer
を入れてバージョン管理やアップグレードを楽にしよう。
そしてautoload
も便利。include
, require
で クラスや関数を使って地獄と化しているコードはautoload
を導入するべきと思う。
(※ namespace
や use
を使用してどのクラス/関数を利用しているのかをわかるようにしよう。)
上記の作業が必要な場合、プロジェクトの規模が多いとかなりしんどいので、地道に進めていこう。
PHPCSfixerでコードを整形する
- PHP-CS-Fixer/PHP-CS-Fixer
https://github.com/PHP-CS-Fixer/PHP-CS-Fixer
コード整形をしてくれるライブラリ
これもコード品質を上げるために入れておいた方が良い。
rectorを使ってリファクタリングする
- rectorphp/rector
https://github.com/rectorphp/rector
rector
はコードの修正を自動で行ってくれるライブラリ
特に便利なのは、PHPのバージョンを指定するとそのバージョンまで利用可能な書き方で修正してくれる。
PHPStanを使う
- PHPStan
https://phpstan.org/
PHPStan
もコードの品質を上げる静的解析のライブラリ
このライブラリは、基本的な文法部分から型の定義や型チェックを行ってくれる。
まずは、level:1 で導入して指摘されたものを解消して、徐々にレベルを上げてコードの品質を上げるのが良い。
PHPUnitを導入する
- PHPUnit
https://phpunit.de/
自分が変更したことによって意図しない動作になっていないかなどを確認したい。
つまり、コードの変更が発生するとき、ユニットテストが欲しい。
そういう時があるので、PHPUnit
を導入する。
ただ、既存のプロジェクトだとどこから手をつけて良いのやら・・・となってしまう。
まずは共通の関数(Utility
)から手をつけるとわかりやすいかも。
おわりに
phpのバージョンアップ時に自分が考えていることを記事にした。
基本はツール頼りだが、規模が大きくなるにつれて効力がわかるのかなと思う。
インデントがグチャってたり、ツール導入すら面倒くさくなるほどカオスになっているプロジェクトもあるが、根気よくやることが大事なのだなと思う。