LoginSignup
1
0
はじめての記事投稿

Drupalのモジュールをできるだけ労力を使わずにDrupal10に対応させる方法

Last updated at Posted at 2023-07-06

はじめに

2023年11月にDrupal9のEOLを控え、Drupal10へのアップグレード対応を行わないといけない方も多いのではないでしょうか。
そんな方向けにDrupalサイトで利用しているカスタムモジュールや公式未対応のコントリビュートモジュールについて、できるだけ少ない労力でDrupal10に対応する手順を考えてみました。
お役に立てれば幸いです。

前提条件

  • Drupalをcomposer (drupal/recommended-project) を使ってインストールしている。
    • composer でモジュールをインストールする際に、環境によっては依存関係のエラーが発生する場合があります。これらの依存関係エラーを修正するスキルがあることも前提とします。
  • Drupal9の開発環境を用意できる。
    • ここで示す方法は本番環境に直接実施しないでください。
  • Drushを利用できる。※DrushはDrupal用のコマンドラインツールです。以下ではDrush10を利用して実施しています。

※上記の前提条件から外れる場合、当記事に記載の通りのコマンドでは実施できない可能性がありますので、予めご了承ください。

Drupal10に対応させるモジュール

ここでは例として Scheduled UpdatesモジュールをDrupal10に対応させてみようと思います。
このモジュールはDrupal8までの対応となっており、Drupal9及び10には対応していません。

なお、この記事の内容は自作のカスタムモジュールの対応にも利用可能です。

コントリビュートモジュールの場合、公式サイトのissueでパッチが配布されていないか確認する。

まずはパッチが無いか確認するのが良いでしょう。
Scheduled Updatesモジュールの場合、
公式サイトのissueにDrupal9に対応するパッチがアップロードされています。
https://www.drupal.org/project/scheduled_updates/issues/3172330

こちらを適用することでDrupal9には対応できます。
※公開されているパッチは完全でない場合があります。またバグが残っている可能性もあるため、テストはしっかりと行う必要があります。

ただDrupal10 対応については、この記事の執筆時点(2023年7月5日)では完全なパッチの提供は無いようです。

Drupal9 に Upgrade Status モジュールをインストールする。

Drupal9にUpgrade Statusモジュールをインストールして分析を実行することで、修正内容をリストアップしてくれます。

# Drupalが配置されているディレクトリに移動
#(ここでは/var/www/htmlに配置しているものとします。)
cd /var/www/html

# モジュール公式ページの記載に従ってインストール
# 以下の[copy version above] 部分は、
# 最初のコマンドで取得したバージョン文字列に置き換えてください。
composer show drupal/core | grep versions
composer require --dev drupal/core-dev:[copy version above] --update-with-all-dependencies
composer require drupal/upgrade_status

# upgrade_status 分析実行
drush upgrade_status:analyze scheduled_updates

# Drupal内のすべての対応状況を分析する場合はallオプションを指定します。
drush upgrade_status:analyze --all

# コマンドで分析を実行した場合、
# 管理画面( /admin/reports/upgrade-status )で分析結果を表示するとエラーが出るため、
# ファイルパーミッションを変更 
sudo chmod -R 777 /tmp/upgrade_status/

ソースコードの自動修正を行う。

drupal-rector を使ってリストアップされた内容のいくつかは自動で修正できます。

# drupal-rector のインストール
composer require palantirnet/drupal-rector --dev
# rector.php をdrupalディレクトリにコピーする
cp vendor/palantirnet/drupal-rector/rector.php .

# 自動修正を実行
# (まずはdry-runオプションを付けて実施し修正内容を事前に確認することをお勧めします)
vendor/bin/rector process web/modules/contrib/scheduled_updates --dry-run
vendor/bin/rector process web/modules/contrib/scheduled_updates

# 再度対応状況の分析を行う
drush upgrade_status:analyze scheduled_updates

ソースコードの手動修正を行う。

残念ながら分析結果で示される課題全てを自動修正することはできないため、残りの課題は手動で修正を行います。
修正方法についても詳しく記載されているため、それほど難しいとは感じないと思います。

対応後は再度upgrade_statusで分析を行います。

drush upgrade_status:analyze scheduled_updates

一覧のLOCAL SCAN RESULT 列に No problems found と表示されればOKです!

動作確認

最後に実際にDrupal10にインストールして利用できるかテストを行います。
残念ながらUpgrade Statusモジュールによる分析は完璧ではないため、動作確認時に問題が発生することも多々あります。
必ずテストを行ってください。

Scheduled Updatesモジュールも実際に動かしてみると、問題が残っていました。
継承しているクラスのメソッドに戻り値の型指定が追加されているため、そのままではエラーとなっていました。
戻り値の型にarrayを指定してやります。

schedules_updates/src/Routing/RouteSubscriber.php
/**
 * {@inheritdoc}
 */
public static function getSubscribedEvents(): array
{
  $events = parent::getSubscribedEvents();
  $events[RoutingEvents::ALTER] = array('onAlterRoutes', -110);
  return $events;
}

以上で意図通りに動作するようになりました!

参考記事

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0