Tech Racho エンジニアの「?」を「!」に。
  • Ruby / Rails関連

Rails 8.1.0.beta1のChangelog: Railties(全項目リンク付き)

🔗 Railties Changelog

参考: Release 8.1.0.beta1 · rails/rails
参考: コミットリスト: Comparing v8.0.2.1...v8.1.0.beta1 · rails/rails

breaking changesの可能性があるプルリク・コミット

  1. #54687(Stop generating bundler binstub:)
  2. #53705(Use secret_key_base from ENV or credentials when present locally)

個別のプルリクにも目印として★を追加しています。

🔗 Add credentials:fetch command by n-studio · Pull Request #53119 · rails/rails

rails credentials:fetch PATHコマンドを追加。これにより、credentialsファイルからcredentialの値を取得できる。

$ bin/rails credentials:fetch kamal_registry.password

Matthew NguyenJean Boussier
同Changelogより

🔗 Avoid dynamic encrypting in generated fixtures by cassiascheffer · Pull Request #55387 · rails/rails

フィクスチャ内では動的なERB式ではなく、静的なBCryptパスワードダイジェストを生成するよう修正。

従来はパスワードダイジェスト属性を持つフィクスチャで<%= BCrypt::Password.create("secret") %>が使われていたが、これはテスト実行のたびにハッシュを再生成する。修正後は静的なハッシュを生成するようになり、再生成方法もコメントで示されるようになった。

Nate SmithCassia Scheffer
同Changelogより

- password_digest: <%%= BCrypt::Password.create("secret") %>
+ password_digest: <%= BCrypt::Password.create("secret") %>  # Generated with BCrypt::Password.create("secret")

🔗 gitignore all key files in config/credentials by gregmolnar · Pull Request #54774 · rails/rails

.gitignoreエントリにcredentialsキーを追加するときに、すべてのキーファイルを無視するよう拡張された。

Greg Molnar
同Changelogより

🔗 Remove unnecessary ruby-version input from ruby/setup-ruby by tangrufus · Pull Request #55120 · rails/rails

rails newでci.ymlを生成するときに、ruby/setup-rubyで指定されていた不要な.ruby-versionファイル参照を削除した。

TangRufus
同Changelogより

これにより、Rubyバージョンを上げるときに更新の必要なファイルを減らせます(.tool-versionsファイルとmise.tomlなど)。

jdx/mise - GitHub

🔗 Add --reset option to bin/setup by dhh · Pull Request #54952 · rails/rails

bin/setupコマンドに--resetオプションを追加した。これによりdb:resetがセットアップ中に呼ばれるようになる。

DHH
同Changelogより

🔗 Add RuboCop cache to GHA workflow templates by lovro-bikic · Pull Request #54754 · rails/rails

高速化のため、GitHub Actionワークフローのテンプレートで、RuboCopジョブにRuboCopキャッシュの復元タスクを追加。

Lovro Bikić
同Changelogより

🔗 Generate mailer files in auth generator only if ActionMailer is used by ramimassoud · Pull Request #54686 · rails/rails

アプリケーションでAction Mailerを使わない場合は、authenticationコードジェネレータでメーラー関連のファイルを生成しないようになった。

Rami Massoud
同Changelogより

🔗 Structured CI with bin/ci by jeremy · Pull Request #54693 · rails/rails

bin/ciコマンドが導入された。テストの実行やスタイルチェック、セキュリティ監査をローカルでもクラウドでも同じように実行できる。

具体的なステップはconfig/ci.rb内の新しいDSLで定義される。

ActiveSupport::ContinuousIntegration.run do
  step "Setup", "bin/setup --skip-server"
  step "Style: Ruby", "bin/rubocop"
  step "Security: Gem audit", "bin/bundler-audit"
  step "Tests: Rails", "bin/rails test test:system"
end

オプションとして、gh-signoff GitHub CLI拡張を使うことで、ローカルでテストを実行してパスしたらプルリクステータスを「グリーン」(マージ可能)にできる。

basecamp/gh-signoff - GitHub

Jeremy DaerDHH
同Changelogより

参考: CIを完全にローカルで回せるしくみをサポートする(36:21)

🔗 Generate session controller tests for auth generator by jeromedalbert · Pull Request #53726 · rails/rails

authenticationジェネレータを実行するとセッションコントローラのテストコードも生成するようになった。

Jerome Dalbert
同Changelogより

参考: 週刊Railsウォッチ20250409 -- 認証機能ジェネレータでセッションコントローラのテストも生成するようになった

🔗 Add a default bin/bundle-audit configuration by dhh · Pull Request #54695 · rails/rails

bin/bundler-auditコマンドとconfig/bundler-audit.ymlコンフィグが新規Railsアプリでデフォルトで追加されるようになった。bundle-auditはアプリケーションのgemに既知のセキュリティ問題があるかどうかを発見して管理する。

DHH
同Changelogより

bundler-auditbin/ciコマンドでもデフォルトで実行されるようになります。

rubysec/bundler-audit - GitHub

🔗 Stop generating bundler binstub: by Edouard-chin · Pull Request #54687 · rails/rails

rails newで新規Railsアプリケーションを生成するときに、bin/bundleを生成しないようになった。

従来のbin/bundleは、bundlerの正しいバージョンを有効にするのに使われていたが、現在のbundlerではこの機能がRubygem自身に取り込まれたため、bin/bundleは不要になった。

Edouard Chin
同Changelogより

bundler自身のbinstubを生成すべきでない理由について、詳しくは以下で説明されています。

参考: Stop generating binstubs for Bundler itself by deivid-rodriguez · Pull Request #8345 · rubygems/rubygems

🔗 Add login_as(user) testing helper when generating authentication by gobijan · Pull Request #53708 · rails/rails

rails g authenticationコマンドを実行するとSessionTestHelperモジュールが追加されるようになった。このモジュールではsign_in_as(user)およびsign_outというテストヘルパーが利用できる。これにより、Railsで生成した認証機能の結合テストがシンプルになる。

Bijan Rahnema
同Changelogより

🔗 Rate limit password resets in auth generator by excid3 · Pull Request #54442 · rails/rails

authenticationジェネレータで生成したPasswordコントローラに、パスワードリセットのレート制限が追加された。

これにより、攻撃者がパスワードリセットフォームにスパム送信することを緩和できる。

Chris Oliver
同Changelogより

class PasswordsController < ApplicationController
  allow_unauthenticated_access
  before_action :set_user_by_token, only: %i[ edit update ]
+ rate_limit to: 10, within: 3.minutes, only: :create, with: -> { redirect_to new_password_path, alert: "Try again later." }

🔗 Extend --minimal option by eelcoj · Pull Request #54313 · rails/rails

rails new--minimalオプションが更新されて、最近追加された機能を以下でスキップするようになった。

  • skip_brakeman
  • skip_ci
  • skip_docker
  • skip_kamal
  • skip_rubocop
  • skip_solid
  • skip_thruster

eelcoj
同Changelogより

devcontainerは--minimalでもスキップしないそうです。

参考: Dev Containerでの開発ガイド - Railsガイド

🔗 Add application-name metadata to application layout by stevepolitodesign · Pull Request #54257 · rails/rails

アプリケーションのレイアウトファイルにapplication-nameメタデータを追加。

以下のメタタグはapp/views/layouts/application.html.erbファイルに追加される。

<meta name="application-name" content="Name of Rails Application">

Steve Polito
同Changelogより

🔗 Use secret_key_base from ENV or credentials when present locally by p8 · Pull Request #53705 · rails/rails

secret_key_baseが環境変数やcredentialsファイル内に存在する場合は、それらを使うよう修正された。

test環境やdevelopment環境でENV["SECRET_KEY_BASE"]またはRails.application.credentials.secret_key_baseが設定済みの場合は、tmp/local_secret.txtファイルを生成せずにそれらをRails.config.secret_key_baseで使うようになった。

Petrik de Heus
同Changelogより

これはRails 7.2の#49624で発生した問題の修正です。

🔗 CI: Introduce RAILS_MASTER_KEY placeholder by stevepolitodesign · Pull Request #52230 · rails/rails

ci.ymlファイルの生成時にRAILS_MASTER_KEYのプレースホルダが追加されるようになった。

Steve Polito
同Changelogより

          <%- elsif options[:database] == "postgresql" -%>
          DATABASE_URL: postgres://postgres:postgres@localhost:5432
          <%- end -%>
+         # RAILS_MASTER_KEY: ${{ secrets.RAILS_MASTER_KEY }}
          # REDIS_URL: redis://localhost:6379/0
        <%- if options[:api] || options[:skip_system_test] -%>
        run: bin/rails db:test:prepare test

🔗 Colorize console prompt on non standard environments by Uaitt · Pull Request #53027 · rails/rails

Railsコンソールをdevtestprod以外の非標準環境(stagingなど)で表示したときもプロンプトに色を表示するよう修正された。

Lorenzo Zabot
同Changelogより

🔗 Don't enable YJIT in development and test environments by aliismayilov · Pull Request #53746 · rails/rails

development環境とtest環境でYJITを有効にしないようになった。

development環境とtest環境ではコードの再読み込みやメソッドの再定義(モックなど)を行うことが多いため、YJITはそれらの環境では一般に高速にならない。

Ali IsmayilovJean Boussier
同Changelogより

この設定はconfig.yjitで変更できます。

🔗 Only include PermissionsPolicy::Middleware if global policy is configured by p8 · Pull Request #53621 · rails/rails

最適化のため、PermissionsPolicy::Middlewareはグローバルポリシーが設定済みの場合にのみincludeされるようになった。

Petrik de Heus
同Changelogより

参考: §9.4 Feature-Policyヘッダー -- Rails セキュリティガイド - Railsガイド

関連記事

速報: Rails World 2025のDHHキーノートとRails 8.1beta1リリース

Rails 8.0 Changelog(全項目リンク付き)

Rails 7.2.0 Active Storage CHANGELOG(全項目リンク付き)


CONTACT

TechRachoでは、パートナーシップをご検討いただける方からの
ご連絡をお待ちしております。ぜひお気軽にご意見・ご相談ください。