MarketPlaceエクステンションのバージョンアップ手順

MagentoMarketplaceで入手導入したエクステンションのComposerを使ったバージョンアップの操作手順について紹介します。
本記事の手順に関して下記ページを参考にしています。

なお、Magentoエクステンションプログラムのバージョン更新は慎重に対処することをおすすめします。公開運用中の環境に対して事前検証テストせずアップグレードしてしまうと予期せず不具合が発生して最悪ストア公開・販売ができなくなります。公開運用中の構成データをコピーしたテスト検証環境を用意して、そこでモジュール更新後の状態で問題ないか確認してから対処すべきです。

手順

操作の流れとして、ソースコードならびにデータベースの更新中にアプリ内の処理が実行されてしまうと問題なので、最初にWebリクエスト処理、定時実行Cron処理が実行されない状況に設定変更。その後アップグレード処理を実行。最後に元の状態に戻す。といった流れになります。

処理遮断:設定変更

[Step.1] Magentoをメンテナンスモードを有効に切り替えます。
メンテナンスモードを有効にすると、フロントエンド、バックエンド共にWebページは表示されなくなります。

$ su - magento_user
$ cd /path/to/magent/
$ bin/magento maintenance:enable

[Step.2]定時実行Cron処理の停止
crontabの登録を一時的にコメントアウトして停止します。

$ su - magento_user
$ crontab -e

冒頭に#文字を追加してコメントアウト化

$ #~ MAGENTO START 6019fce397ec21cc8216f4896dc1b3d425330dbcc0df794edf6f170e83d5dddc
* * * * * /usr/bin/php8.1 /path/to/magento/bin/magento cron:run 2>&1(省略)
#~ MAGENTO END 6019fce397ec21cc8216f4896dc1b3d425330dbcc0df794edf6f170e83d5dddc
$ #~ MAGENTO START 6019fce397ec21cc8216f4896dc1b3d425330dbcc0df794edf6f170e83d5dddc
#* * * * * /usr/bin/php8.1 /path/to/magento/bin/magento cron:run 2>&1(省略)
#~ MAGENTO END 6019fce397ec21cc8216f4896dc1b3d425330dbcc0df794edf6f170e83d5dddc
$ bin/magento cron:run --group=consumers

バージョンアップ処理

Composerを使ってエクステンションモジュールのソースコードの更新、その後Magentoのアップグレード処理(=エクステンションモジュールのバージョンアップに伴うDB更新を行います)
[Step.3]トラブルに備えて、Composerソース管理定義ファイル composer.json をバックアップしておきます。

$ cp composer.json composer.json.bak

[Step.4] 現在導入済みのモジュールバージョンを確認します。
composer.lock に最後にインストールしたパッケージ情報が記載されていますので確認します。
例)モジュール名が szmake/ja_jp の場合 (モジュール名の次の行にversionの記載される形式となっているので grep -A 1で表示)

$ grep -A 1 "\"szmake/ja_jp\"" ./composer.lock
"name": "szmake/ja_jp",
"version": "100.0.1",

→バージョンが 100.0.1 であることがわかりました。

[Step.5] リポジトリで現在提供されているエクステンションモジュールのバージョンを確認します。
例) モジュール名が szmake/ja_jp の場合
composer show szmake/ja_jp --available | grep -m 1 versions
以下の例の場合 103.0.1 が最新であることが読み取れます。

$ composer show szmake/ja_jp --available | grep -m 1 versions
versions : 103.0.1, * 100.0.1

[Step.6]Composerで指定のバージョンでソースコードを更新します。
例)モジュール名=szmake/ja_jp, バージョン=103.0.1 を指定する場合
下記コマンドで composer.json のファイルが更新されます。

$ composer require szmake/ja_jp:103.0.1 --no-update

アップデート処理実行( composer.json に従いソースコードが更新されます )

$ composer update

[Step.7]Magentoのupgradeコマンドを実行して、バージョンアップに伴う更新処理を実行します。
(※)エクステンションのバージョンアップに伴うDB内容の更新処理も含まれる可能性があるため、安全をとるならばこのコマンドの前にDBのバックアップをとっておくことをおすすめします。

ソースコードFILEの上書き、追加等発生しているのでパーミッションを再度設定しておきます。

$ $ sudo chown -R magento_user:www-data .
$ find . -type d -exec chmod 770 {} \;
$ find . -type f -exec chmod 660 {} \;
$ chmod 770 bin/magento

upgradeコマンドを実行

$ bin/magento setup:upgrade

upgrade後、コンパイルとコンテンツデプロイ、キャッシュクリアをします。

$ bin/magento setup:di:compile
$ bin/magento setup:static-content:deploy -f
$ bin/magento setup:static-content:deploy ja_JP -f
$ php -f bin/magento cache:flush

処理再開:設定変更

[Step.8] 定時実行Cron処理の再開(元に戻す)

#~ MAGENTO START 6019fce397ec21cc8216f4896dc1b3d425330dbcc0df794edf6f170e83d5dddc
#* * * * * /usr/bin/php8.1 /path/to/magento/bin/magento cron:run 2>&1(省略)
#~ MAGENTO END 6019fce397ec21cc8216f4896dc1b3d425330dbcc0df794edf6f170e83d5dddc
#~ MAGENTO START 6019fce397ec21cc8216f4896dc1b3d425330dbcc0df794edf6f170e83d5dddc
* * * * * /usr/bin/php8.1 /path/to/magento/bin/magento cron:run 2>&1(省略)
#~ MAGENTO END 6019fce397ec21cc8216f4896dc1b3d425330dbcc0df794edf6f170e83d5dddc

[Step.9] Magentoをメンテナンスモードを無効に切り替えます。(元に戻す)

$ bin/magento maintenance:disable

上記手順実行後、フロントエンド・バックエンドWebページが正常に表示されます。