この記事は Dries Buytaert 氏の公式ブログ「dri.es」の翻訳記事です。Driesブログの記事一覧よりすべての翻訳記事をご覧いただけます。
Drupal Coreのメジャーリリースに追いつくのは、なかなか骨の折れる作業です。リリースのたびにAPIが非推奨になり、新しいコーディングパターンが導入されるため、モジュール開発者はコードを更新し続けなければなりません。
これはほとんどのソフトウェアが進化していく仕方です。古いパターンが少しずつより良いものに置き換えられていく。
Drupal Rectorのようなツールはその作業の一部を自動化してくれますが、依然として手書きのルールに頼っています。歴史的に、これはうまくスケールしてきませんでした。Rectorルールを書くのは難しいというより、面倒なのです。変更履歴を読み、エッジケースを理解し、実際の使用パターンを探し出し、ルールをテストする——その繰り返しです。
そこで、こんな問いを立ててみました。そもそもRectorルールを自分で書かなくてよかったら?
AIがRectorルールを自動生成できるなら、Drupal CoreはすべてのAPI変更を手動の移行作業に変えることなく、進化し続けられます。
そのアイデアをもとに、Drupalの主要な開発動向を追うために作ったツールDrupal Digestsを拡張しました。サマリー生成に加えて、Drupal Coreのコミットを分析し、Rectorルールを自動生成する機能も追加しています。
Drupal Coreのコミットがあるとき、このツールは関連するイシューを読み込み、その周辺の議論を分析し、コード変更を確認して、対応するRectorルールを生成します。
稼働してまだ数週間ですが、すでに175以上のRectorルールを生成しており、パイプラインがさらに多くのDrupal Coreイシューを処理するにつれて新しいルールが継続的に追加されています。
AI生成コードは決して完璧ではありません。バグのあるルールもあれば、エッジケースを見逃すものもあるでしょう。だからこそ、今のうちに公開したかったのです。実プロジェクトでテストしてくれる人が増えれば増えるほど、より速く改善されていきます。
Drupal Rectorの共同メンテナーであるBjörn Bralaには特別な感謝を。私がこれに取り組んでいることを知り、すぐに生成されたルールのテストと検証を手伝ってくれました。そういったフィードバックは本当に貴重です。
次のように試すことができます。
git clone https://github.com/dbuytaert/drupal-digests.git
composer require --dev rector/rector
vendor/bin/rector process web/modules/custom \
--config drupal-digests/rector/all.php --dry-run使用例
たとえば、Drupalの$entity->originalプロパティのモダナイズを見てみましょう。このプロパティはエンティティの変更前のコピーを公開していました。Drupal 11.2ではこのプロパティが非推奨となり、明示的な$entity->getOriginal()と$entity->setOriginal()メソッドに置き換えられました。古いプロパティはDrupal 12で削除されるため、さまざまなモジュールメンテナーがコードを更新する必要があります。
Drupal Digestsが生成したRectorルールは、読み取りアクセスをgetOriginal()に、書き込みの代入をsetOriginal()に書き換えます。
変更前:
$entity->original->field->value;
$entity->original = $unchanged;変更後:
$entity->getOriginal()->field->value;
$entity->setOriginal($unchanged);AIが生成したアップグレードルールは、近い将来すべてのアップグレード作業をなくせるわけではありません。それでも部分的な自動化だけで、驚くほど多くの繰り返し作業を削減しながら、Drupalをより速く進化させるのに役立てることができます。
— Dries Buytaert
PS: LinkedInでのディスカッションもぜひご覧ください。
この記事は「AI-generated Rector rules for Drupal」(投稿日:2026-05-06)の翻訳記事です。
カテゴリ
タグ