Ruby 3.2 サポートの終了と最低バージョンの 3.3 への引き上げ

activeadmin/activeadmin

Active Admin が Ruby 3.2 のサポートを終了し、最低サポートバージョンを 3.3 に引き上げました。gemspec・RuboCop・CI・開発者向けドキュメントの4箇所が一貫して更新されています。

背景

Ruby 3.2 がEOL(End of Life)を迎えたことが、今回のサポート終了の直接的な理由です。EOLとなったバージョンをサポート対象に含め続けることは、セキュリティパッチの適用されないRubyランタイム向けに互換性を維持するコストを意味します。Active Admin はこれを機に、サポートマトリクスからRuby 3.2を除外しています。

技術的な変更

最低Rubyバージョンの宣言が、プロジェクト全体で統一的に 3.2 から 3.3 へ更新されました。変更は以下の4ファイルに及びます。

activeadmin.gemspecrequired_ruby_version がインストール時の制約として機能するため、最も実質的な変更です。

変更前:

s.required_ruby_version = ">= 3.2"

変更後:

s.required_ruby_version = ">= 3.3"

.rubocop.ymlTargetRubyVersion は、RuboCopが静的解析時に参照するターゲットバージョンです。この値が 3.2 のままでは、3.3以降で利用可能な構文に対して不要な警告が出たり、逆に3.2向けの制約が残り続けたりする問題が生じます。

AllCops:
  TargetRubyVersion: 3.3  # 変更前: 3.2

.github/workflows/ci.yaml からは Ruby 3.2 のマトリクスエントリが削除され、CIは 3.3 と 3.4 のみで実行されます。.github/copilot-instructions.md の最低バージョン記述も同様に更新されています。

設計判断

4ファイルへの変更を単一PRにまとめることで、「最低バージョンの宣言」が分散しないよう一貫性を保っています。gemspecによるインストール制約、RuboCopによる静的解析設定、CIのテストマトリクス、そしてCopilot向けの開発コンテキストが足並みを揃えることで、「3.3未満では動作を保証しない」という意図がツールチェーン全体に伝わる構造になっています。

RuboCopの TargetRubyVersion を gemspec の required_ruby_version と同期させるのは特に重要な点です。これが一致していないと、実際にサポートするバージョンと静的解析の基準がずれ、誤検知や見落としの原因になります。

まとめ

EOLとなったRuby 3.2を一括してサポート対象から除外することで、Active Admin のメンテナンスコストを削減し、3.3以降の言語機能を安心して利用できる基盤が整いました。gemspec・RuboCop・CI・ドキュメントを同一PRで整合させるアプローチは、サポートバージョン変更の際の手本となる変更管理の実践例といえます。

記事メタデータ

Generated by:
Claude Sonnet 4.6 for DiffDaily
LLM Trace:
9a3fec76

この記事は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リンク記法の正確性

ファイル名付きシンタックスハイライト(```ruby:activeadmin.gemspec```)とGitHubリンク記法([PR #9000](URL))が正しく使用されています。

対象読者への適合性 ✓ PASS

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

「EOL」「gemspec」「CI」などの専門用語を前提として使用しており、専門知識を持つエンジニアという対象読者に適合した内容になっています。

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

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

各セクション、各パラグラフが「総論→各論」の構造で書かれており、トピックセンテンスが先頭に配置されているため、非常に読みやすいです。1段落1トピックの原則も守られています。

Diff内容との照合 ✓ PASS

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

記事内で引用されている`activeadmin.gemspec`と`.rubocop.yml`のコード変更は、提供されたDiff情報と完全に一致しています。CIとドキュメントの変更についても正確に説明されています。

技術用語の正確性 ✓ PASS

技術用語の正確な使用

「EOL」「gemspec」「RuboCop」「CI」「サポートマトリクス」など、PRの文脈で使われる技術用語が正確かつ適切に使用されています。

説明の技術的正確性 ✓ PASS

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

gemspecの`required_ruby_version`の役割や、RuboCopの`TargetRubyVersion`を同期させる重要性など、技術的な説明が正確で論理的です。

事実の突合 ✓ PASS

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

記事の主張はすべてPRのタイトル、Description、Diffの内容に基づいています。「設計判断」セクションはPRから読み取れる事実に基づいた妥当な洞察であり、ハルシネーション(捏造)は見られません。

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

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

PR番号(#9000)、Rubyバージョン(3.2, 3.3)などの数値や固有名詞はすべて正確です。

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

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

記事タイトル「Ruby 3.2 サポートの終了と最低バージョンの 3.3 への引き上げ」は、PRのタイトル「Drop Ruby 3.2 support」の内容を正確かつ具体的に反映しています。

外部知識の正確性 ✓ PASS

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

「Ruby 3.2 がEOLを迎えた」という記述はPR Descriptionの「end-of-life Ruby 3.2」に基づいています。PRに記載のない外部知識の捏造はありません。

時間表現の正確性 ✓ PASS

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

「サポートを終了し、引き上げました」という過去形の表現は、完了した変更を報告する記事として適切であり、時間表現の歪曲はありません。