はじめに
プログラミング言語とフレームワークをバージョンアップする機会があったため、バージョンアップの方法やその注意点などを解説していきます。
今回はPHPとLaravelを例に挙げて解説していきます。
セマンティックバージョニングとは
各プログラミング言語やライブラリ、フレームワークにはそれぞれバージョンが定められており、コードを更新するごとにそのバージョンが変わっていきます。
プログラミング言語やライブラリで利用されるバージョニング手法はセマンティックバージョニングと呼ばれ、3つのセクションに区切られて表示されます。左にある数字ほど大規模な変更が含まれ、それぞれ以下のような意味があります。
- メジャーバージョン:互換性のない変更の場合にバージョンを上げる
- マイナーバージョン:後方互換性がある機能を含む変更の場合にバージョンを上げる
- パッチバージョン:後方互換性があるバグ修正などの場合にバージョンを上げる
セキュリティアップデート
PHPの場合、composer audit
を利用することで、現在利用しているバージョンに脆弱性が含まれるかチェックすることができます。
ライブラリ等依存しているものに脆弱性が混入していると、自分がどれだけセキュリティを意識してコードを書いたとしても、その脆弱性が原因で障害が起こってしまう可能性があるため、セキュリティアップデートは放置せずにアップデートを行うのが望ましいです。
バージョンの指定方法
以下の方法でバージョンの指定を行うことができます。
8.3.1: : 指定したバージョンがインストールされる
~8.3.1: メジャーバージョン(8)は固定で、マイナーバージョン(3)とパッチバージョン(1)が最新のバージョンがインストールされる
~8.3: メジャーバージョン(8)は固定で、マイナーバージョン(3)とパッチバージョン(1)が最新のバージョンがインストールされる
^8.3.1: メジャーバージョン(8)とマイナーバージョン(3)は固定で、パッチバージョン(1)が最新のバージョンがインストールされる
^8.3: メジャーバージョン(8)は固定で、マイナーバージョン(3)とパッチバージョン(1)が最新のバージョンがインストールされる
バージョンアップ方法
基本的にメジャーな言語であれば、アップグレードガイド(言語によって呼び方は違うと思いますが、本記事ではアップグレードガイドで統一)があると思うので、そちらを参照してバージョンアップを行っていきます。
その言語やライブラリのバージョンに対応している移行ツールがあれば、それを利用するのもひとつの手です。ちなみにPHP, LaravelにはRectorという移行ツールがあります。
基本的には以下の手順でバージョンアップを行なっていきます。
- どのバージョンまでバージョンを上げるか決める
- アップグレードガイドを確認する
- バージョンアップにあたって変更する必要がある箇所を修正する
- この時にテストコードも一緒に修正するのを忘れないように
- 依存ライブラリをバージョンアップ、修正する
- 正常にサービスが動作するか確認
例1 PHPのバージョンアップ
PHP8.2.xから8.3.xにバージョンアップをしていきます。
- PHPを8.3.xにアップデート
- PHPではこちらに変更内容が記載されているため、そこから変更内容を確認する
- 新たに追加される機能は変更しなくてもひとまずは問題ないため、下位互換性のない変更点とPHP8.3.xで推奨されなくなる機能を確認する
- この2ページに含まれているコードが作成しているプロダクトに含まれる場合、該当箇所を修正する
- 実際に動作させ、問題ないかを確認する
例2 Laravelのバージョンアップ
Laravel10から11にバージョンアップをしていきます。
- Laravelを11.x.xにアップデート
- Laravel ではこちらに変更内容が記載されているため、そこから変更内容を確認する(日本語はこちら)
- Laravelのアップグレードガイドはとてもわかりやすく書かれているため、一通り読み進めればどれをどのように変更すれば良いかがすぐにわかります
- 変更が必要な箇所を修正する
- 実際に動作させ、問題ないかを確認する
今回はプログラムの動作に影響がある箇所のみを確認していますが、アップグレードガイドの他の箇所もパフォーマンスが向上したり、コードが簡潔に書けるなど読んでおいて損はないため、一通り読んでみることをお勧めします。
注意事項
- 破壊的変更がある箇所はバージョンアップによって、アプリケーションが動かなくなる可能性があるので要チェック
- まとめてバージョンを上げる際は、その範囲のガイドを全て見る必要がある
- ライブラリを利用している場合、バージョンアップによって別のライブラリが動作しなくなる可能性がある
おわりに
初めてバージョンアップ作業を行ったのですが、バージョンアップ作業を行うことにより追加された新機能やコードの内部などを知ることができたため非常に勉強になりました。
ツール等は利用せず手作業で行ったのですが、次行う際はツールを利用したバージョンアップも試してみたいと思います。
参考