Rails 8.0の注目ポイント:
このリリースノートでは、主な変更点のみを取り上げています。バグ修正や変更点については、Changelogを参照するか、GitHubのRailsリポジトリにあるコミット一覧を確認してください。
既存のアプリケーションをアップグレードするのであれば、その前に質のよいテストカバレッジを用意するのはよい考えです。アプリケーションがRails 7.2までアップグレードされていない場合は先にそれを完了し、アプリケーションが正常に動作することを十分確認してからRails 8.0にアップデートしてください。アップグレードの注意点などについてはRailsアップグレードガイドを参照してください。
アプリケーションをデプロイするツールであるKamal 2がRailsにプリインストールされました。Kamalを使うと、新品のLinuxマシンをkamal setupコマンド1つでアプリケーションサーバーやアクセサリサーバーに変えます。
Kamal 2には、Kamal Proxyと呼ばれるプロキシも含まれています。これは、従来起動時に用いられていた汎用のTraefikオプションを置き換えたものです。
Dockerfileがアップグレードされ、Thrusterと呼ばれる新しいプロキシが含まれるようになりました。これはPuma Webサーバーの手前に配置され、X-Sendfileアクセラレーション、アセットキャッシュ、アセット圧縮を提供します。
Solid Cableは、Redisに代わる pub/subサーバーとして機能し、アプリケーションからのWebSocketメッセージを、異なるプロセスに接続されたクライアントに中継します。Solid Cableは、送信されたメッセージをデフォルトで1日間データベースに保持します。
Solid Cacheは、特にHTMLフラグメントキャッシュを保存するためにRedisまたはMemcachedのいずれかを置き換えます。
Solid Queueは、Redisと、Resque、Delayed Job、Sidekiqなどの独立したジョブ実行フレームワークを不要にします。
Solid Queueは、高パフォーマンス環境向けにFOR UPDATE SKIP LOCKEDという新しいメカニズムを基盤としています(これはPostgreSQL 9.5で初めて導入され、現在ではMySQL 8.0以降でも利用可能)。Solid QueueはSQLiteでも動作します。
Propshaftは、古いSprocketsシステムに代わってデフォルトのアセットパイプラインとなりました。
認証システムジェネレータが追加されました(#52328)これを元にして、セッションベース、パスワードリセット可能、メタデータ追跡機能を持つ認証システムを構築できます。
変更点について詳しくはChangelogを参照してください。
非推奨化されていたconfig.read_encrypted_secretsを削除。
非推奨化されていたrails/console/appファイルを削除
非推奨化されていたrails/console/helpersファイルを削除。
Rails::ConsoleMethodsによるRailsコンソール拡張のサポート(非推奨化済み)を削除。
"rails/console/methods"をrequireするサポートを非推奨化。
STATS_DIRECTORIESの変更を非推奨化。今後はRails::CodeStatistics.register_directoryに置き換えられる。
bin/rake statsを非推奨化。今後はbin/rails statsを使うこと。
Regexp.timeoutがデフォルトで1に設定されるようになった(Regexp DoS攻撃に対するセキュリティ強化のため)。変更点について詳しくはChangelogを参照してください。
変更点について詳しくはChangelogを参照してください。
Rails.application.config.action_controller.allow_deprecated_parameters_hash_equalityを削除。params#expectが導入されました。従来のparams.expect(table: [ :attr ])をシンプルなparams.require(:table).permit(:attr)に置き換えられます。変更点について詳しくはChangelogを参照してください。
form_withのmodel:引数にnilを渡す非推奨のサポートを削除。
tagビルダーで空のタグ要素にコンテンツを渡す非推奨のサポートを削除。
変更点について詳しくはChangelogを参照してください。
変更点について詳しくはChangelogを参照してください。
非推奨化されていたconfig.active_record.commit_transaction_on_non_local_returnを削除。
非推奨化されていたconfig.active_record.allow_deprecated_singular_associations_nameを削除。
Active Recordに登録されていないデータベースを探索するサポート(非推奨化)を削除。
enumをキーワード引数で定義するサポート(非推奨化済み)を削除。
非推奨化されていたconfig.active_record.warn_on_records_fetched_greater_thanを削除。
非推奨化されていたconfig.active_record.sqlite3_deprecated_warningを削除。
非推奨化されていたActiveRecord::ConnectionAdapters::ConnectionPool#connectionを削除。
cache_dump_filenameにデータベース名を渡すサポート(非推奨化済み)を削除。
ENV["SCHEMA_CACHE"]を設定するサポート(非推奨化済み)を削除。
SQLite3Adapterのretriesオプションを非推奨化。今後はtimeoutを使うこと。db:migrateを実行すると、マイグレーションの実行前にスキーマが読み込まれるように変更された。以後の呼び出しでは、保留中のマイグレーションが実行される。
(従来のようにマイグレーションを最初から実行する振る舞いが必要な場合は、db:migrate:resetを実行することで利用可能。これはデータベースをドロップして再作成した後にマイグレーションを実行する)変更点について詳しくはChangelogを参照してください。
変更点について詳しくはChangelogを参照してください。
変更点について詳しくはChangelogを参照してください。
非推奨化されていたActiveSupport::ProxyObjectを削除。
attr_internal_naming_formatに@をプレフィックスとして設定するサポート(非推奨化済み)を削除。
ActiveSupport::Deprecation#warnに文字列の配列を渡すサポート(非推奨化済み)を削除。
Benchmark.msを非推奨化。
加算やsinceでTimeとActiveSupport::TimeWithZoneを混ぜることを非推奨化。
変更点について詳しくはChangelogを参照してください。
config.active_job.use_big_decimal_serializerを削除。 enqueue_after_transaction_commitを非推奨化。
SuckerPunchアダプタを非推奨化。今後はsucker_punch gemに含まれるアダプタを使うこと。変更点について詳しくはChangelogを参照してください。
変更点について詳しくはChangelogを参照してください。
変更点について詳しくはChangelogを参照してください。
Railsを頑丈かつ安定したフレームワークにするために多大な時間を費やしてくださった多くの開発者については、Railsコントリビューターの完全なリストを参照してください。これらの方々全員に深く敬意を表明いたします。
Railsガイドは GitHub の yasslab/railsguides.jp で管理・公開されております。本ガイドを読んで気になる文章や間違ったコードを見かけたら、気軽に Pull Request を出して頂けると嬉しいです。Pull Request の送り方については GitHub の README をご参照ください。
原著における間違いを見つけたら『Rails のドキュメントに貢献する』を参考にしながらぜひ Rails コミュニティに貢献してみてください 🛠💨✨
本ガイドの品質向上に向けて、皆さまのご協力が得られれば嬉しいです。
Railsガイド運営チーム (@RailsGuidesJP)
Railsガイドは下記の協賛企業から継続的な支援を受けています。支援・協賛にご興味あれば協賛プランからお問い合わせいただけると嬉しいです。