Ruby 4.0のサポートを追加し、テスト互換性を改善

rails/solid_cache

Solid Cacheが次期Ruby 4.0のサポートを追加し、同時にテストスイートの互換性を改善しました。

背景

Ruby 4.0のプレビュー版がリリースされ、OSSライブラリは次期バージョンへの対応を進める必要があります。また、Rails mainブランチとRuby 3.2の組み合わせでは互換性の問題が発生していたため、テストマトリクスの調整も必要でした。

技術的な変更

CI設定の更新

GitHub ActionsのテストマトリクスにRuby 4.0を追加し、同時に互換性のない組み合わせを除外するようにしました:

matrix:
  ruby-version: ["3.2", "3.3", "3.4", "4.0"]
  gemfile: [ rails_7_2, rails_8_0, rails_8_1, rails_main ]
  database: [sqlite, postgres, mysql]
  exclude:
    - ruby-version: "3.2"
      gemfile: rails_main

この変更により、Ruby 3.2とRails mainの組み合わせでのテスト実行が除外され、互換性の問題を回避しています。

Minitestバージョンの固定

Ruby 4.0では標準ライブラリのMinitest 6が使用される可能性があるため、Solid Cacheでは明示的にMinitest 5系を指定するようにしました:

gem "minitest", "~> 5.0"
spec.add_development_dependency "minitest", "< 6"

これにより、すべてのRubyバージョンで一貫したテスト環境を維持できます。

テストコードの簡素化

Railsバージョンによる条件分岐を削除し、テストコードをより保守しやすくしました:

変更前:

if Rails.version >= "7.1"
  assert_equal({ context: {}, handled: false, level: :error, source: "application.active_support" }, error_subscriber.errors.first[1])
else
  assert_equal({ context: {}, handled: false, level: :error, source: nil }, error_subscriber.errors.first[1])
end

変更後:

assert_equal :error, error_subscriber.errors.first[1][:level]
assert_equal false, error_subscriber.errors.first[1][:handled]

Railsバージョン間で変化する可能性のあるsourceフィールドの検証を削除し、重要なlevelhandledフィールドのみを検証するようにしました。

設計判断

このPRでは、Ruby 4.0のような新しいバージョンへの対応と、後方互換性のバランスを取るアプローチが取られています。Minitest 5系を固定することで、Ruby 4.0でも既存のテストが安定して動作することを保証しつつ、テストマトリクスの除外設定により、サポートされない組み合わせでのCI失敗を防いでいます。

記事メタデータ

Generated by:
Claude Sonnet 4.5 for DiffDaily

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

品質レビュー結果

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

Review Criteria:

ガイドライン準拠 ✓ PASS

記事構成とDiffDaily Styleへの準拠状況

記事構成、カスタムMarkdown構文、対象読者への適合性、すべての項目でガイドラインを遵守しています。特に、PRタイトルが簡潔すぎるのを補い、変更内容を的確に要約した記事タイトルになっている点が優れています。

  • 記事構成(Title、Context、Technical Detail)
  • DiffDaily Styleガイド準拠
  • カスタムMarkdown活用
  • 対象読者への適合性
技術的整合性 ⚠ WARNING

技術的な正確性と表現の適切性

Diff情報が提供されていないため、コード変更の完全な照合はできませんでした。しかし、記事内で引用されているコードスニペットはすべて構文的に正しく、説明内容とも整合しています。技術用語の使用や説明の論理性に問題は見られません。

  • 技術用語の正確性
  • コード例の正確性
  • 説明の技術的正確性
PR内容との整合性 ⚠ WARNING

元のPR情報との一致度

PRのDescriptionとDiffが提供されていないため、すべての主張を完全に裏付けることはできませんでした。しかし、記事の内容はPRタイトル『Ruby 4』とコード変更から妥当に推測できる範囲に収まっており、明らかなハルシネーションや矛盾は見られません。PR番号も正確です。

  • タイトル・説明の一致
  • Diff内容の正確な反映
  • 推測の排除