🎉

Laravelのバージョンをあげるためにやっていること

2022/08/29に公開

はじめに

これまでいくつかのLaravelのバージョンを上げるお仕事をしてきましたので、
その際にやってきたことをツラツラと書いておこうと思います。

PHPバージョンを調べる

Laravelのバージョンを上げる前に、いま使っているPHPのバージョンが上げたいLaravelのバージョンに対応しているのか調べる必要があります。

調べ方としては、LaravelのGitHubリポジトリのcomposer.jsonを見るとわかります。
この記事を書いている2022/08/28時点の最新バージョンであるLaravel9.xであれば、最低PHP8.0.2が必要ということがここを見るとわかります。
https://github.com/laravel/framework/blob/2a1a55caf3c65a74f173f47be594587cb931f22c/composer.json#L18

もし、いま使っているPHPが8.0.2未満なら、上げれるLaravelのバージョンは8.xになるので、
最新の9.xを使いたい場合は、先にPHPのバージョンを上げる必要があります。

PHPのバージョンアップについては、前にこちらに書いてあるので参考にしてください。

アップグレードガイドを調べる

それぞれのバージョンにはアップグレードガイドが用意されているので、こちらに書いてある内容を調べて、必要に応じて、修正を入れていきます。

Laravel9.xの場合はこちらです。

もし、いま使っているバージョンがLaravel8.xなら、上に書いた9.xのアップグレードガイドを調べるだけで済みますが、6.xや7.x、それ以下のバージョンを使っている場合は、上げたいバージョンまでの全てのアップグレードガイドを見る必要が出てきます。

なので、バージョンを上げる予定がなくても、最新バージョンが出た段階で少しくらいは目を通しておくと実際に上げる時に楽できるかもしれないです。

チェンジログを見る

アップグレードガイドを見るだけでも、ある程度は網羅はできるかもしれないですが、
実際に動かしてみて、アップグレードガイドに書いてないことで動かないことがあったります。

その時はCHANGELOGや、GithubのissuesPull Requestを見ると解決策があったりするので、探してみるのも良いかと思います。

Composerパッケージの対応バージョンを調べる

Laravel単体で使っていれば特に気にする必要もないですが、
Laravelに依存しているパッケージを使っている場合は、一緒にバージョンを上げる必要がでてきます。

例えば、laravel-ide-helperのv2.12.3だと対応しているバージョンが8.xか9.xのどちらかになるので、
https://github.com/barryvdh/laravel-ide-helper/blob/v2.12.3/composer.json#L28-L30

もし、使っているLaravelのバージョンが6.xや7.xから8.xや9.xに上げる場合はパッケージのバージョンも上げる必要が出てきます。

ツールを使う

アップグレードガイドを1つ1つ見ていくもの大変だと思うので、ツールを使って簡単に調べることや修正することもできます。

Rector

https://github.com/rectorphp/rector

RectorはリファクタリングやPHP、フレームワークのバージョンアップ時の修正を自動でやってくれるツールです。
その中にはLaravelのツールもあります。

https://github.com/rectorphp/rector/tree/main/vendor/rector/rector-laravel

以前、試しに使った時のことをこちらの記事を書いてありますので参考にしてみてください。

Laravel Shift

https://laravelshift.com/

Laravel Shiftはバージョンアップ用のサービスです。
残念ながら私は使ったことがないのですが、
GitHubのリポジトリと上げたいバージョンを指定すれば変更点のPull Requestを作成してくれるようです。

こちらは有料のサービスになりますので、
個人ならなかなか使う機会はないかもしれないですが、会社ならバージョンを上げるために使うのも1つ手段だと思います。

ユニットテストを使う

色々調べても見つからないものは必ず出てくるので、ユニットテスト(PHPUnit)を使って調べるのも1つの方法です。

アップグレードガイドを調べる前に実行するだけで、修正対象が簡単に見つけることも可能かもしれないです。

上げるバージョン次第では事前に何か修正を入れないと動かない可能性もあるので、先にテストコードの修正が必要になる場合もあります。

ユニットテストで調べる場合は、ある程度の条件網羅が必要になってくるので、バージョンを上げる前にテストコードをたくさん書く必要もあります。
一応コードカバレッジを最低でも80%ほどあると気持ちに余裕が出ると思います。

数字はあくまで目安なので、70%でも大丈夫だと思います。
大事なのは条件網羅していることなので、条件が不足していると実際に動かすまでわからないので、本番リリース後に気づくってことも出てくるかと思います。

手動テストを行う

色々事情でテストコードがないこともあると思います。
そういう時は手動テストを行うことでバージョンを上げる前と後で動作が変わっていないかをテストします。

テストコードがありなし関係なく実施した方がよいですね。
生きたデータでないと見つからないものもあると思います。
(だから本番に出した後で見つかる不具合が多々あるわけですが...)

修正したコードは事前に出す

ここまで調べた内容や修正した内容の中には、いま使っているバージョンでも動作するものはあると思います。
そういうやつは、バージョンアップと同時ではなく、事前にバンバン出していきましょう!!

Composerパッケージなら先にバージョンを上げることで新機能が使えたり、
リリース時の修正箇所を減らす、コンフリクトの回避など、事前に出すことは色々メリットはあります。

まとめ

PHPに引き続き、Laravelバージョンのことをツラツラ書いてきました。
結構調べることが多いような印象もありますが、ユニットテストやツール利用を使った自動化ができればバージョンを上げる作業もある程度は楽になるかと思います。

今回書いた内容以外にもやり方はあると思いますが、この内容が誰かの参考になればうれしい限りです!!

Discussion