Drupal 10アップグレードに向けて、今すぐやるべき10のこと
Collection :
10. 非推奨スキャンの実行
数年前のDrupal 8→9へのアップグレードのように、Drupal 9.5とDrupal 10.0の主な違いは、全ての非推奨コードが削除されたことです。これは何を意味するのかと言うと、もう存在しない関数に依存するPHPコードがある場合、あなたのサイトにはホワイトスクリーンが表示され、致命的なエラーが発生します。
ありがたいことに、Drupal 10と互換性があるかどうかを教えてくれる数多くのツールが存在します。私の個人的なおすすめはUpgrade Statusモジュールです。
注意:Upgrade Statusをコードベースに残したり、有効にしたりするような設定、composerの変更をコミットすることはお勧めしません。これについては先の手順3で詳しく説明します。
9. 非推奨カスタムコードの修正
Upgrade Statusをサイトで実行して、レポートを手に入れたならば、コードのリファクタリングを開始しましょう。あまり変更するようなことがないことを祈りますが、要するに、全てのカスタムコードを修正するまでは、Drupal 10への予行練習や実際のアップグレードはできないと言うことです。非推奨の変更の多くは、ある関数/メソッドを別のものに置き換えるなどの非常に小さなものですが、気をつけて取り組む必要があります。適切に処理しなければ、たとえ1つの単語の置き換えミスがWebサイトを壊してしまう可能性があります。ほとんどのDrupal APIの変更はdrupal-rectorで自動的にカバレッジされており、作業をスピードアップするために、いつそれを使うべきかをUpgrade Statusが示してくれます。
8. PHP 8.1に更新
コントリビュートプロジェクトの対応の前に、PHP 8.1のアップデートを行いましょう。モジュールによってはPHP 8.1と互換性がないものもあるので、これも同時に確認します。
すべての環境は、最終的にDrupal 10のためにPHP 8.1に更新する必要があることを覚えておいてください。PHPの更新はローカル環境/クラウドIDEから始めます。しかし進めていくうちに、CI/CD環境、チームのローカル環境、そしてすべてのクラウド環境も更新する必要があります。
composerでPHPを依存関係として追加できることをご存知ですか?とても簡単で、互換性のない依存関係を排除するのにも役立ちます。
"require": {
"php": ">=8.1"
}
上記のように定義したら、 composer update php --with-all-dependences
を実行できます。PHP 8.1への更新に関するチュートリアル記事「Updating Your Code Studio Project to PHP 8.1 with Composer」もぜひ参考にしてください。
7. 非推奨のコントリビュートプロジェクトを修正
それでは、Drupal 10とPHP 8.1の両方に対応するように、全てのコントリビュートモジュールを更新しましょう。これはcomposerを使って行うのが推奨されます。Upgrade Statusは、互換性を提供しているモジュールとそうでないものの情報を提供してくれます。ありがたいことに、Drupal 10と互換性のあるモジュール既に沢山存在しています。
アクイアは、コミュニティの準備状況に関するレポートを dev.acquia.com で公開しています。
まだDrupal 10と互換性のないモジュールがある場合はどうすれば良いでしょうか。その互換性のないプロジェクトを支援するか、あなたのサイトから削除しない限り、Drupal 10へのアップデートが妨げられる可能性があります。また準備ができていないコントリビュートプロジェクトがあなたのサイトで必要な場合、関連するissue(必要な修正について議論しているものなど)をUpgrade Statusから確認できます。mglaman/composer-drupal-lenient を使用して互換性のないプロジェクトを composer require
することができます。またcweagans/composer-patches を使用して必要なパッチを適用できます。issueのパッチについて、プロジェクトのメンテナにフィードバックするようにしましょう。
6. 他のツールやプラグインを更新
プロジェクトにComposerが必要な他のツール(例えばAcquia BLT)を使用している場合、これらが全てPHP 8.1 およびDrupal 10.x に対応していることを確認する必要があります。これは、6の手順にたどり着くまでに、既に全て確認ができている可能性がありますが、気をつけることに越したことはないでしょう。
5. Drush 11にアップグレード
少し紛らわしいのですが、Drupal 10はDrush 11でのみ動作します。アクイアのホスティングプラットフォームではDrush 10まで提供していますが、Drush 11はコードベースにcomposer経由でインストールする必要があるため、提供していません。既にサイトでDrushをcomposer経由で使用している場合、 drush/drush: ^11
の記述でDrush 11にアップグレードするだけです。そうでない場合は、 composer require drush/drush ^11
のコマンドでDrush 11を追加する必要があります。
Drush 11はPHP 8.1 および Symfony 6.x コンポーネント(これもPHP 8.1必須)を必要とします。以前のバージョンのSymfony 4 および 5は、PHP 7.4、8.0と互換性があります。
4. 最新のDrupal 9.xに更新する
サイトをDrupal 9.5.xに更新します。Drupal 9.4系にもDrupal 10へのアップグレードパスは用意されていますが、執筆時点でDrupal 9.5.xがリリースされており、これはバグ修正を受けている唯一のブランチなので9.5系が推奨です。それ以前のDrupal 9.3以前のバージョンでは、アップグレードパスが用意されていないのでご注意ください。
3. Upgrade Statusを削除する
ここまでお世話になったUpgrade Statusですが、コードベースから削除しましょう。Upgrade StatusはDrupal 9.xで動作するモジュールであり、Drupal 10とは互換性が無いため残しておくことはできません。(これが手順10で注意した理由です。)
2. 予行練習(Dry run)を行う
マーフィーの法則の言葉にある通り「失敗する可能性のあるものは、失敗する」ことを念頭に置いて、メジャーバージョンのアップグレードは慎重にいきましょう。安全な場所でテストするための綿密な計画を立て、あらゆる可能性に対処できるように、何回か予行練習を行うことが理想です。メジャーバージョンのアップデートを本番環境にプッシュする前に、ローカル環境、CI/CD環境、開発環境で行います。
また、予行練習中では、アップデートをブロックしたり制御するような追加パッケージがあるかどうかを確認する良い機会となります。例えば次のようなものです。
- drupal/core
- drupal/core-composer-scaffold
- drupal/core-dev
- drupal/core-recommended
composer update drupal/core --with-all-dependencies
を実行してもDrupal 10.xに解決できない場合、 composer why-not drupal/core 10.0
を実行することで、composerの依存関係ツリーの中で10.x以外に何が必要なのかを知ることができます。
1. 全てをバックアップする
最後に、本番環境にデプロイする準備ができたら、コードとデータベースのスナップショットがあることを確認します。他の環境で予行練習を行い、成功したのであれば、更新を本番環境で続行して問題ありません。万が一の時に備えて・・・バックアップがあれば、問題が発生した時にバックアップを取った自分に感謝することになるでしょう。
最後に
Drupal 10への更新の手順は、これで以上です。とてもシンプルだと思いませんか?もしあなたがDrupal 8→9へのアップグレードに携わっていたのなら、非常に似た手順であることがお分かりいただけるでしょう。あなたのDrupal 10更新が上手くいくことを願っています!
元記事:The Top Ten Things to do RIGHT NOW to Upgrade to Drupal 10