Devise 5 サポートを Rails バージョン別に段階的に導入

activeadmin/activeadmin

ActiveAdmin が Devise 5 との互換性を確立しつつ、Ruby バージョン制約を持つ旧 Rails 系列では Devise 4.x を維持するという段階的なアップグレード戦略を採用しました。

背景

この変更は、#8936 で実施された Devise 5 および Formtastic 6 サポート追加のバックポートです。Devise 5 への対応は長らく保留されていました。その原因は Formtastic 側の制約にあり、各 Gemfile に残されていた # TODO: relax this dependency when formtastic/formtastic#1401 will be fixed というコメントがその経緯を示しています。

Formtastic の該当 Issue が解消され Formtastic 6 がリリースされたことで、Devise 5 対応の障壁が取り除かれました。ただし、Formtastic 6 は Ruby 3.2 以上を要求するため、Ruby 3.1 でテストされる旧 Rails 系列(6.1・7.0・7.1・7.2)では Devise 5 への移行が今回のスコープ外となっています。

技術的な変更

変更の核心は、Rails バージョンに応じた依存バージョンの二分化です。メインの Gemfile と Rails 8.0・8.1 向けの Gemfile では Devise 5 および Formtastic 6 を採用し、Rails 6.1〜7.2 向けの Gemfile では Devise 4.9 を維持します。

Rails 8.x 系(Gemfile および gemfiles/rails_80/Gemfile)の変更:

-  gem "devise", "~> 4.9" # TODO: relax this dependency when formtastic/formtastic#1401 will be fixed
+  gem "devise", "~> 5.0"

-  gem "formtastic", ">= 5.0.0"
+  gem "formtastic", ">= 6.0.0"

Rails 6.1〜7.2 系(gemfiles/rails_61/Gemfile 等)の変更:

-  gem "devise", "~> 4.9" # TODO: relax this dependency when formtastic/formtastic#1401 will be fixed
+
+  # Devise 5 requires Formtastic 6, which requires Ruby 3.2. This Rails version
+  # is tested against Ruby 3.1, so this dependency cannot be relaxed
+  gem "devise", "~> 4.9"

コメントの内容も # TODO: から制約の理由を明示する説明コメントへと書き換えられており、「解決待ち」から「意図的な制約」への状態変化が記録されています。

ランタイムの互換性チェックを担う lib/active_admin/dependency.rb も更新され、Devise の受け入れ範囲が拡張されています。

-  DEVISE = ">= 4.0", "< 5"
+  DEVISE = ">= 4.0", "< 6"

この変更により、ActiveAdmin が起動時に依存バージョンを検証する際、Devise 5.x がエラーなく受け入れられるようになります。なお、Devise 5.0.2 では railties の最低要件が >= 4.1.0 から >= 7.0 へ引き上げられており、この依存制約の変化が旧 Rails 系列で Devise 5 を採用できない直接的な理由の一つでもあります。

設計判断

#8936 の説明によると、Devise の最低要件はあえて変更しない という方針が採られています。Devise 4 は引き続きサポートされるため、最低バージョンを 5 に引き上げるとダウンストリームのアプリケーションに不要な強制アップグレードを課すことになります。

一方、Formtastic については最低要件を >= 6.0.0 へ引き上げています。Formtastic 6 は ActiveAdmin の Ruby 最低要件に一致しており、Devise 4 と Devise 5 の両方に対応しているため、この引き上げは破壊的変更とならないと判断されています。

Rails バージョン別の Gemfile を持つ構成が、この段階的な戦略の実現を支えています。Ruby 3.2 を要求する新しい依存チェーン(Devise 5 → Formtastic 6 → Ruby 3.2)は、それを満たせる Rails 8.x の CI 環境にのみ適用され、旧 Rails 系列では制約の理由をコメントで明示したうえで Devise 4.x を固定する設計です。

まとめ

本 PR は、Ruby バージョン制約という現実的な制限を受け入れながら、破壊的変更を最小化しつつ Devise 5 との互換性を確立した変更です。dependency.rb の上限バージョン変更(< 5< 6)という一行の修正と、Rails バージョン別 Gemfile の段階的な設定が組み合わさることで、ダウンストリームアプリケーションへの影響を抑えながら最新の依存ライブラリへの対応が実現されています。

記事メタデータ

Generated by:
Claude Sonnet 4.6 for DiffDaily
LLM Trace:
cc507ea0

この記事はAIによって自動生成されています。内容の正確性については、必ずソースコードやPRを確認してください。

品質レビュー結果

Review Status:
承認済み
Review Count:
1回
Reviewed by:
Gemini 2.5 Pro for DiffDaily

Review Criteria:

記事構成 ✓ PASS

Title, Context, Technical Detailの存在と明確さ

「総論→各論→結論」の3部構成が記事全体で明確です。リード文(要旨)、背景、技術詳細、設計判断、まとめの各要素がすべて含まれており、理想的な構成です。

カスタムMarkdown構文 ✓ PASS

シンタックスハイライト・GitHubリンク記法の正確性

ファイル名付きシンタックスハイライト(```diff:ファイルパス)やGitHubのPR番号リンク([#8936](URL))が、ガイドライン通りに正しく使用されています。

対象読者への適合性 ✓ PASS

エンジニア向けの適切な技術レベルと表現

Gemの依存関係、Ruby/Railsのバージョン制約といった内容は、専門知識を持つエンジニアという対象読者に完全に適合しています。冗長な初心者向けの説明はありません。

パラグラフ・ライティング ✓ PASS

トピックセンテンス・1段落1トピック・段落長

各セクションが「総論→各論」で構成され、各パラグラフはトピックセンテンスで始まっています。1段落1トピックの原則も守られており、非常に高い可読性を実現しています。

Diff内容との照合 ✓ PASS

コードブロックとDiff内容の一致

記事内で引用されているGemfileやRubyコードのdiffは、提供されたPRのdiff情報と完全に一致しており、正確に内容を反映しています。

技術用語の正確性 ✓ PASS

技術用語の正確な使用

「バックポート」「ダウンストリーム」「ランタイム」「依存制約」といった技術用語が、文脈に応じて正確かつ適切に使用されています。

説明の技術的正確性 ✓ PASS

技術的主張の正確性と論理性

「Formtastic 6がRuby 3.2を要求する」という制約や、「Devise 5.0.2がrailties 7.0以上を要求する」という技術的な説明は、それぞれdiff内のコメントやGemfile.lockの変更内容に裏付けられており、技術的に正確です。

事実の突合 ✓ PASS

PR情報による主張の裏付け(ハルシネーション検出)

記事内の主張はすべてPRのDescription、diff内のコード、コメント、または参照先のPR(#8936)の内容に基づいており、ハルシネーション(捏造)は見られません。

数値・固有名詞の確認 ✓ PASS

PR番号・コミットID・バージョン等の正確性

PR番号(#8964, #8936)、Ruby/Rails/Gemのバージョン番号など、記事に含まれる数値や固有名詞はすべて正確です。

タイトル・説明との一致 ✓ PASS

記事タイトル・説明とPR内容の一致

「Devise 5 サポートを Rails バージョン別に段階的に導入」というタイトルは、PRの「Backport Devise 5 support」という内容をより具体的に、かつ正確に表現しており、読者の理解を助けます。

外部知識の正確性 ✓ PASS

PRに記載のない外部知識(LTS、サポート状況など)の不使用

RubyやGemのバージョン要件に関する記述は、すべてPRのdiff(コメントやGemfile.lock)から導出できる情報であり、PRに記載のない外部知識の持ち込みはありません。

時間表現の正確性 ✓ PASS

時間表現がPR情報と一致しているか

「長らく保留されていた」「経緯を示しています」など、過去の状況を示す時間表現が正確に使用されており、事実関係の時系列を正しく伝えています。