フレームワークやプラットフォームを使用してシステムを構築・運用していると、必ず「アップデート」という課題に直面します。
アップデートを行う際、多くのフレームワークやプラットフォームでは機能面の改善に伴う仕様変更によって、それまでのバージョンとの互換性が失われているケースが多々あります。
あるいは、言語バージョンの変更による機能廃止・変更による影響も無視できないものとして存在します。

Magento/Adobe Commerceにおいても、アップデートは一大イベントとなっていて、現在のリリースサイクルでは四半期から半年程度の間隔で新しいバージョンがリリースされています。

Upcoming Release

公式のアナウンスでは、次のリリースは2022年の3月ごろとなっています。
次の安定版である2.4.4では、公式のDevBlogでアナウンスされているように、

  • PHP7.3サポートの廃止
  • PHP8.0/8.1サポートの追加
  • その他ミドルウエアバージョンの変更
  • JSライブラリバージョンの変更

といった変更が予定されています。
これらに加え、フレームワークとコア実装の仕様変更・改良も合わさるため、アップデート時の互換性チェックというのは中々に手間のかかる作業であることは否めません。

Upgrade Compatibility Toolとは

Upgrade Compatibility Tool(以下、UCT)とは、Adobe Commerceのパートナー向けに提供されているツールです。

Upgrade Compatibility Tool

Magento/Adobe Commerce本体とは分離して提供されているツールで、既に存在するソースコードに対してアップデート先バージョンとの互換性をチェックしてくれます。
互換性チェックが主な役割なので、

  • 未定義のメソッドの使用
  • 廃止予定クラス・メソッドの使用

などを検出してくれます。
誤解を招きかねないのですが「不具合検出をするツール」ではありません。
アップデート先バージョンとの「互換性チェック」を行うのが目的です。

使い方

インストール

UCTをインストールするには、公式Devdocsのガイド通り、composerを使用して以下のコマンドを実行します。

composer create-project magento/upgrade-compatibility-tool uct --repository https://repo.magento.com

このとき、repo.magento.comの認証で使用するアカウントにUCTへのアクセス権が必要です。
(アクセス権がないと、プロジェクトを作成できません)

チェックの実行と結果のチェック

インストールができたら、UCTのディレクトリに移動し、以下のようなコマンドを実行します。

bin/uct upgrade:check Magentoインストールディレクトリ --coming-version=アップデート先バージョン番号 -m チェックしたいモジュールのフルパス

処理が終わると、画面上に次のような結果が出力されます。

 * [WARNING][1131] Line 16: Extending from @deprecated class 'Magento\Backend\Block\Widget\Grid\Extended'

 * [ERROR][1428] Line 65: Possible dependency on implementation details. Usage of 'Magento\Backend\Block\Widget\Grid::__construct' should be declared instead of 'Magento\Backend\Block\Widget\Grid\Extended::__construct'

 * [WARNING][1439] Line 73: Call @deprecated method 'Magento\Backend\Block\Widget\Grid\Extended::_construct'

これらはある特定のクラスの実装が2.4系にマッチしていないことを意味しています。
UCTが出す警告を1つ1つ潰していくことで、アップデート時の互換性問題を未然に防ぐことができるでしょう。
(ただし、ロジックの不具合を防ぐことはできません)

その他の機能

UCTにはこの機能の他に、

  • コア実装に対する変更点のチェック
  • GraphQLスキーマの変更点のチェック

が可能です。
GraphQLで他のサイト・システムと連携している場合には、アップデート前に互換性チェックをしておくと良いでしょう。