Seishi Ono's blog

Fugaces labuntur anni. 歳月人を待たず

Drupal10へのアップグレード

はじめに

Drupal9へのアップグレードについては,以前書いた

Drupal10へのアップグレードは,それに比べて簡単との開発者側の説明だったが,案の定そこまで楽というわけにはいかなかった。

利用しているモジュールがそう簡単にバージョン追従してくれない。10.0は諦めて,10.1まで待ったが,バージョン追従に要した時間は,Drupal9の時以上だった印象がある。私が単にさぼっていただけかもしれないが。

バージョンアップのための調査

今回のアップグレードで,一番助かったのは,バージョンアップのために必要な情報を提供してくれるモジュールが存在したことである。ただし,このモジュールが示している状態は,必ずしもわかりやすいものでは無く,何を示しているのかに理解する時間は,それなりに要した。加えて,残念なことに,インジケーターが100%を示しているのに,なお,アップデートできない,と言う現象は普通に起こる。

  • Drupal Upgrade Status の導入

composer require "drupal/upgrade_status"
./vendor/bin/drush en upgrade_status

  • 以下にアクセス

https://xxx.xxx.xxx/ja/admin/reports/upgrade-status

  • 「更新」と書かれた欄にあるモジュールは,そこ示されたバージョンにアップデートする

私は,Drupalのモジュールページを各個に開き,そこにあるcomposerコマンドの例示をそのままコピーした,

例)

composer require 'drupal/captcha:^2.0'

  • 「削除」と書かれた欄にあるモジュールは,諦めるか,バージョンが追従されるまで待つか検討する。

例)

./vendor/bin/drush un captcha
composer remove drupal/captcha
./vendor/bin/drush cr

  • 「Compatible with next major Drupal core version」で適用不可になったもの

モジュールでインストールすることで解決する場合がある

コアから外れた機能のモジュールインストール

  • テーマbartikはコアではサポートされない

composer require drupal/bartik

  • カラー機能はコアから外れた

composer require "drupal/color:^1.0"

アップグレードチェック

upgrade statusにあるインジケーターが100%になれば,アップグレード可能になるのが原則である。しかし,その状態でもアップデートに失敗してしまう事象は頻出する。

それでも失敗する

私の場合,module_missing_message_fixerモジュールは,コンパチブルと表示されていたのに失敗してしまった。
大丈夫である事を確認して削除した。

composer remove drupal/module_missing_message_fixer

アップグレード準備

  • コアのバージョンだけあげておき,実行は後から

composer require 'drupal/core-recommended:^10' 'drupal/core-composer-scaffold:^10' 'drupal/core-project-message:^10' --update-with-dependencies --no-update

  • コアモジュールも入れている場合は,それもアップグレードするが,私の場合,入れているかどうかが判明せず,アップデートする段階で失敗するかどうかで判断した。

 composer require drupal/core:"^10.0" --no-update 

アップグレード実行

  • 通常のアップデートコマンドで

composer update

  • drushもバージョンを上げておく

 composer require 'drush/drush:^12' -W 

  • キャッシュを再構築

./vendor/bin/drush  cache:rebuild

  • データベースアップデート

 ./vendor/bin/drush updatedb

エラー対策

モジュールを削除する場合,そのモジュールが実際に使われてしまっているのであれば,削除前にアンインストールしなければならない。
例)

./vendor/bin/drush un ckeditor_readmore

それを忘れるとデーターベースのアップデート時に不整合が起こりアップデートできない。
しかもアップデートそのものは終わっているので,そのモジュールの再インストールもできない。
この場合は,データベースからモジュールに関する記述を削除する。

例)ckeditor_readmoreの削除

 ./vendor/bin/drush cdel core.extension module.ckeditor_readmore

データベースアップデートも,ファイル削除が発生するので,削除権限のあるユーザにする

例)

sudo -u apache  ./vendor/bin/drush updatedb