Drupalマイナーバージョンアップの注意点:モジュール互換性と変更箇所を事前に確認する
Drupalのマイナーバージョンアップは、メジャーバージョンアップと比べると比較的短い期間で対応できるケースがあります。なお本記事では「マイナーバージョンアップ」を、セマンティックバージョニングにおけるMINOR番号の更新(例:10.2.x → 10.3.x)を指すものとして扱います。
一方で、「マイナーバージョンアップだから前回と同じ手順で問題ない」と考えて進めると、途中でエラーが発生したり、既存の設定が意図せず変わったりする可能性があります。
特にDrupalでは、コアだけでなく多数のコントリビュートモジュールを組み合わせてサイトを構成することが多いため、Drupal本体とモジュールの互換性をセットで確認することが重要です。
本記事では、実際のDrupalバージョンアップ案件で確認された事象をもとに、マイナーバージョンアップ時に注意したいポイントを整理します。
目次
Drupal本体だけを更新すればよいとは限らない
Drupalでは、標準機能だけでなく、多数のコントリビュートモジュールを組み合わせてサイトを構築します。
そのためDrupal本体のバージョンを更新する場合、利用中のモジュールが更新後のDrupalバージョンに対応しているかも確認する必要があります。
確認の際は、各モジュールのdrupal.orgプロジェクトページで対応バージョンをチェックするほか、composer outdatedコマンドでcomposer.json上のバージョン制約と実際の状況を照らし合わせる方法が有効です。
Drupal本体は更新可能でも、利用中のモジュールが対応していなければ、以下のような問題につながる可能性があります。
- バージョンアップコマンドがエラーになる
- モジュールが正常に動作しなくなる
- 一部機能だけが利用できなくなる
したがって、バージョンアップの対象はDrupal本体だけではなく、サイトを構成しているモジュール全体として捉える必要があります。
実際に発生したモジュール互換性の問題
実案件では、Drupal本体を新しいマイナーバージョンへ更新しようとした際、利用していたモジュールの一つが元のバージョンのままでは対応できない状況が確認されました。
Drupal本体のみを更新しようとすると、composer update drupal/core-recommendedなどのコマンドを実行した段階でエラーが発生します。
そこで、Drupal本体をバージョンアップするタイミングで、そのモジュールについても対応バージョンへ更新しました。
このように、Drupalのバージョンアップでは、「Drupalをどのバージョンへ上げるか」だけでなく、「現在利用しているモジュールは、そのバージョンに対応しているか」を事前に整理しておく必要があります。
「前回と同じ手順」が使えるとは限らない
Drupalの保守運用を継続していると、同じサイトで複数回のバージョンアップを行うことがあります。その場合、前回作成した手順書を再利用するケースも多いでしょう。
しかし、過去の手順はあくまでベースとして利用し、今回のバージョンでも同じ手順が成立するかを再確認する必要があります。
実案件でも、バージョンアップによってDrupal側で変更されるファイルや設定が変わり、以前は対応不要だった箇所まで確認が必要になりました。
特に、以下の項目はバージョンアップごとに確認する必要があります。
- 処理対象となる設定ファイル
- ファイルやディレクトリの所有者
- 導入済みモジュールの対応バージョン
- 案件独自で変更した記述
既存の変更内容が元に戻るケースにも注意する
Drupal本体や関連ファイルを更新すると、案件側で以前変更していた内容が、新しいバージョンの内容によって置き換わる可能性があります。
実案件でも、もともと変更していた記述がバージョンアップによって元の状態へ戻る事象が確認されました。
そのため、バージョンアップ前には、以下の作業が重要です。
- 標準状態から変更している箇所を把握する
- 更新対象となるファイルと重複していないか確認する
- バージョンアップ後に差分を再確認する
独自の変更箇所が把握されていないと、「バージョンアップ自体は成功したが、既存機能の挙動が変わった」という状態になりかねません。
検証環境で確認してから本番へ反映する
Drupalのバージョンアップでは、まず検証環境で更新を実施し、問題がないことを確認してから本番環境へ反映することが基本です。
実案件でも、以下の流れで進めました。
- 検証環境でバージョンアップ
- モジュールの互換性やエラーを確認
- 必要な手順を修正
- 動作確認
- 本番環境へ反映
具体的には、composer updateでパッケージを更新した後、drush updbでデータベースアップデートを実行し、drush crでキャッシュをクリアするといった一連のコマンドを検証環境で実際に流し、エラーが出ないことを確認しました。
その結果、本番環境では大きなトラブルを発生させずに作業を進めることができました。
特にバージョンアップの場合、ドキュメントを読むだけでは把握できない環境固有の問題が見つかることがあります。実際に検証環境でコマンドを実行し、サイトが正常に動作するところまで確認することが重要です。
マイナーバージョンアップでもバックアップは省略しない
マイナーバージョンアップは、ケースによっては比較的短時間で完了します。しかし、作業時間が短いことと、リスクがないことは別です。
実案件では、バージョンアップ途中に所有者設定に起因するエラーが発生しました。実行ユーザーとWebサーバーユーザー(www-dataなど)の所有権が一致しておらず、一部ファイルへの書き込みに失敗したことで更新コマンドが途中で中断し、core配下のファイルが不完全な状態のまま消失する事象につながりました。
事前にファイルとデータベースのバックアップを取得していたため復旧できましたが、これはマイナーバージョンアップであっても、事前の切り戻し準備が必要であることを示す例です。
更新規模だけを基準にバックアップの要否を判断せず、バージョンアップ作業では原則として復旧可能な状態を用意しておく必要があります。
Drupalバージョンアップ前の確認項目
実務では、少なくとも次のポイントを確認するとよいでしょう。
Drupal本体の更新先バージョン
現在のバージョンと更新先を明確にし、変更内容を確認します。
利用中モジュールの対応状況
導入している各モジュールが、更新先のDrupalバージョンで利用可能か確認します。drupal.orgのプロジェクトページやcomposer.jsonのバージョン制約を照らし合わせることで、対応状況を具体的に把握できます。
特にサイトの主要機能で利用しているモジュールは、優先して確認します。
独自変更箇所
標準ファイルや設定に独自の変更を行っている場合は、バージョンアップで上書きされる可能性がないか確認します。
ファイルの所有者・権限
サーバー上でコマンドを実行する構成では、対象ファイルに必要な操作を行えるか確認します。特にsites/default/filesなど書き込みが発生するディレクトリについては、コマンド実行ユーザーとWebサーバーユーザー(www-dataなど)の所有権が一致しているかを確認しておく必要があります。
バックアップ
ファイル・データベース双方について、問題発生時に作業開始前へ戻せる状態を用意します。
検証後の確認項目
バージョンアップコマンドが正常終了したことだけで判断せず、公開画面や管理画面、主要機能について動作確認します。
所要時間の短さはリスクの低さではない
Drupalのマイナーバージョンアップは、環境によっては数週間単位の大規模な作業にならず、比較的短期間で実施できます。
しかし、そのことを理由に事前確認を省略するのは適切ではありません。
Drupalはモジュールを組み合わせて機能を拡張する仕組みであるため、コアの変更が周辺機能へ影響する可能性があります。また、バージョンが変われば処理対象となるファイルや設定が変化する場合もあります。
作業そのものが短時間だからこそ、「いつもと同じ」と判断せず、今回のバージョンに対して必要な確認を行うことが重要です。
まとめ
Drupalのマイナーバージョンアップでは、Drupal本体の更新だけを考えるのではなく、サイト全体の構成を確認する必要があります。
特に重要なのは次のポイントです。
- Drupal本体と利用中モジュールの互換性を確認する
- 前回のバージョンアップ手順をそのまま使用しない
- バージョンアップによって変更されるファイルや設定を確認する
- 独自に変更している箇所が上書きされないか確認する
- 検証環境で実際のバージョンアップを実施する
- ファイルとデータベースのバックアップを用意する
Drupalのバージョンアップでは、コマンドそのものよりも、その前後の確認が重要です。
既存サイトの構成と更新内容を照らし合わせ、検証・バックアップ・本番反映までを一連の手順として標準化することが、安定したDrupal運用につながります。
よくある質問(FAQ)
Q. Drupalのマイナーバージョンアップでは、モジュールも必ず更新する必要がありますか。
必ずしもすべてのモジュールを同時に更新する必要はありません。ただし、更新後のDrupalバージョンに現在のモジュールが対応しているかは確認する必要があります。互換性の問題があるモジュールについては、Drupal本体とあわせて対応バージョンへ更新する必要があります。
Q. 前回使ったバージョンアップ手順書は再利用できますか。
ベースとして再利用することはできますが、内容をそのまま実行することは推奨しません。Drupal本体やモジュールの変更によって、必要なコマンド、変更対象となるファイル、権限設定などが変わる場合があります。今回のバージョンに合わせて手順を再確認してください。
Q. マイナーバージョンアップでも検証環境は必要ですか。
本番サイトを安全に運用するためには、検証環境での事前確認を推奨します。特に複数のコントリビュートモジュールや独自の変更を含むサイトでは、バージョンアップ後の挙動を事前に確認することで、本番環境での手戻りを減らすことができます。
LYZONが提供するWebサービス
Webに関するお悩みは、まずLYZONへ
構築・運用・AIまで、Webに関わる課題をワンストップで対応。まず何ができるかをご覧ください。
2021年入社。
日付が変わったら漫画アプリを巡回するのが日課