Drupal 7 サポート終了 (EOL) と Drupal 10 へのアップグレード

Drupal 7 (D7) は 2011/01/05 にリリースされました。爆発的な人気を集めた D7 は多くの国際機関、政府やエンタープライズのウェブアプリケーションに利用され、最盛期にはインターネット上に 100 万を超える D7 サイトが存在しました。アップデートの難しさも相まって 2 回のサポート延長が行われ、2023/12 の時点でも約 40 万サイトが存在します。その D7 も、とうとう 2025/01/05 にサポート終了（End-of-life / EOL）を迎えることが決定しました。

ただし、**D7 は EOL に至る前から段階的にサポート範囲が狭まっていく**ため、サポート中でも D7 サイトが攻撃の被害に遭う可能性が高まっていくことをしっかり理解して、D10 への移行を可能な限り早く実施する必要があります。

また、D6 とは異なり、D7 に対してはコミュニティー公認の長期サポート（ELS）が提供されないことも明言されているため、どこかの会社が ELS を提供してくれることに望みを託すのもやめたほうが良いでしょう。

以下に、D7 が EOL に向けて段階的に変化するサポートの範囲と、D10 への移行手段について説明します。

（なお、この記事では 「マイグレーション」、「移行」と「アップグレード」は同じ意味で使われます。）

## D7 サイトを EOL まで運用するにあたり注意すべき点
D7 エコシステムの全てが EOL までサポートされるわけではありません。以下に特筆すべき点をまとめます：

### 深刻度が中以下の D7 セキュリティー問題は解決に先駆けて公開される可能性がある
大規模かつ深刻な攻撃につながる脆弱性ではない場合、セキュリティーチームのプロセスに則らずに公開イシューキューで解決する場合があります。これは、比較的少数の D7 サイトを危険に晒すセキュリティー問題の悪用の仕方について誰もがアクセスできる可能性が生じることを意味します。

### 一旦サポート対象外になった D7 モジュール／テーマに対し、新しいメンテナーが就任することはできない
メンテナンスが行われないと見做された D7 プロジェクトの引き継ぎ期限は 2023/08/01 で終了しているため、今後もサポート対象外が増えていくでしょう。また、サポート対象外になったモジュールのセキュリティー問題は全て公開イシューキューで修正されます。

### Windows のみに影響する D7 セキュリティー問題の対応終了
2023/08/01 以降は Windows のみに影響するセキュリティー問題への対応は行いません。そのため、他の OS への移行を検討する必要があります。

### 詳細

上記について詳しく知りたい場合は [D7 EOL のアナウンスメント](https://www.drupal.org/psa-2023-06-07)（[和訳](https://annai.co.jp/article/drupal-7-eol-2025-01-05)）を参照してください。

## D7 から D10 への移行

では D7 から D10 への移行はどのように実現したら良いでしょう。

### マイグレーションパートナー
特に大規模なマイグレーションは複雑な作業になるため、マイグレーション作業に対応できる開発者がいない場合は、信頼できるプロフェッショナルに依頼するのが良いでしょう。
Drupal アソシエーションは、マイグレーションパートナープログラムを通して信頼のおける業者に認定を与えました。drupal.org の[Drupal 7 マイグレーションリソースセンター](https://www.drupal.org/about/drupal-7/d7eol/partners)のページに認定業者の一覧があります。

### DIY: コアの Migration モジュール群
比較的シンプルなサイトであれば、[Drupal コアの Migration モジュール群を利用して実施](https://www.drupal.org/docs/upgrading-drupal/upgrading-from-drupal-6-or-drupal-7/choosing-the-upgrade-approach)することが可能です。

### DIY: 複雑なサイトは AM:A
大規模または複雑なサイトは百以上のモジュールを利用していることも珍しくありません。D7 のモジュールはバージョンアップを重ねるうちに統廃合が進んだりしているため、アップグレードは容易ではありません。

この問題の大部分を [Acquia Migrate: Accelerate](https://www.drupal.org/project/acquia_migrate) が解決してくれます。これは当初 Acquia の顧客専用に作られていたものが一般公開されたものです。
AM:A はコアの Migrate モジュールとは異なり、タクソノミーを始めとする諸種データを段階的に D7 から移行することが可能です。また、プロセスの把握や状況の確認がしやすい GUI を使って作業を進めることができます。

AM:A は D7 contrib モジュールのアップグレードについて、合計で何と [2,500 以上の提案](https://git.drupalcode.org/project/acquia_migrate/-/blob/recommendations/recommendations.json)を用意しており、そのうち 400 以上のマイグレーションパスが実際に手作業で確認され、必要に応じてパッチが当てられています。モジュールによっては複数のアップグレードパスが存在するため、この提案は AM:A 開発者の意見に基づくものであることは知っておくべきでしょう。また、PHP の後方互換性や contrib モジュールの D10 対応状況などが理由で、アップグレード先が D9 であることにも注意を払う必要があります。幸い、D9.5 から D10.0 へのアップグレードは比較的容易なため、その対応についてはあまり心配する必要はなさそうです。

### DIY: その他の方法／より詳しい情報
公式サイトの[マイグレーション DIY リソースページ](https://www.drupal.org/about/drupal-7/d7eol/diy)では、マイグレーションに関連した様々な情報を得ることができます
- マイグレーションについての無料・有料のコースについて
- Drupal 7 のコードをそのまま Drupal 10 で走らせることを可能にする（！）[Retrofit](https://mglaman.dev/blog/retrofit-running-legacy-drupal-7-code-your-drupal-10-site) というパッケージについて
- Drupal 7 のフォークで、10 年の歴史がある [Backdrop CMS へのマイグレーション](https://backdropcms.org/drupal-alternative)について

### 非公式 Drupal 7 セキュリティーチームが発足？
著名なコントリビューターである [Klaus Purer (klausi)](https://www.drupal.org/u/klausi) 氏は、非公式の Drupal 7 セキュリティーチームを発足し、サポート対象外になった contrib モジュールのセキュリティー問題が発覚した際に対応するプロセスを確立することを[提案しています](https://www.drupal.org/project/ideas/issues/3408125)。ただし先述したとおり、大規模かつ深刻な攻撃につながる脆弱性ではない場合はその情報が公開されるというプロセスは、この非公式チームの発足によって変更されるわけではありません。また、[カバレージが限定される可能性](https://www.drupal.org/project/ideas/issues/3408125#comment-15357125)もあります。


# 参考文献
- Drupal 7 EOL についての告知：https://www.drupal.org/psa-2023-06-07
- Drupal 7 マイグレーションリソースページ: https://www.drupal.org/about/drupal-7/d7eol/partners
- Drupal 7 マイグレーション DIY リソースページ: https://www.drupal.org/about/drupal-7/d7eol/diy
- Acquia Migrate: Accelerate プロジェクトページ: https://www.drupal.org/project/acquia_migrate
- Acquia Migrate: Accelerate についての情報https://dev.acquia.com/blog/acquia-migrate-accelerate-now-open-source
- Retrofit: https://mglaman.dev/blog/retrofit-running-legacy-drupal-7-code-your-drupal-10-site
- Drupal 7 セキュリティーチーム設立に関する提案: https://www.drupal.org/project/ideas/issues/3408125