AIがDrupalのRectorルールを自動生成——アップグレード作業の手間を大幅に削減

Dries and Drupal Logo
目次

この記事は 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)の翻訳記事です。

カテゴリ

タグ

AI