Rails 7.0の注目ポイント:
既存のアプリケーションをアップグレードするのであれば、その前に質のよいテストカバレッジを用意するのはよい考えです。アプリケーションがRails 6.1までアップグレードされていない場合は先にそれを完了し、アプリケーションが正常に動作することを十分確認してからRails 7.0にアップデートしてください。アップグレードの注意点などについてはRailsアップグレードガイドを参照してください。
変更点について詳しくはChangelogを参照してください。
dbconsoleで非推奨化されていたconfigを削除。特になし。
Sprocketsへの依存がオプショナルになった
rails gemがsprockets-railsに依存しなくなりました。自分のアプリケーションでSprocketsを使う必要がある場合は、以下のようにGemfileに追加してください。
gem "sprockets-rails"
変更点について詳しくはChangelogを参照してください。
特になし。
特になし。
特になし。
変更点について詳しくはChangelogを参照してください。
非推奨化されていたActionDispatch::Response.return_only_media_type_on_content_typeを削除。
非推奨化されていたRails.config.action_dispatch.hosts_response_appを削除。
非推奨化されていたActionDispatch::SystemTestCase#host!を削除。
fixture_pathへの相対パスをfixture_file_uploadに渡すサポート(非推奨化済み)を削除。
特になし。
特になし。
変更点について詳しくはChangelogを参照してください。
Rails.config.action_view.raise_on_missing_translationsを削除特になし。
button_toメソッドでオブジェクトがURLのビルドに使われている場合に、Active RecordオブジェクトからHTTP verb [method]を推論するようになった。
button_to("Do a POST", [:do_post_action, Workshop.find(1)]) # Before #=> <input type="hidden" name="_method" value="post" autocomplete="off" /> # After #=> <input type="hidden" name="_method" value="patch" autocomplete="off" />
変更点について詳しくはChangelogを参照してください。
ActionMailer::DeliveryJobおよびActionMailer::Parameterized::DeliveryJobが削除された(今後はActionMailer::MailDeliveryJobを使う)。特になし。
特になし。
変更点について詳しくはChangelogを参照してください。
非推奨化されていたdatabaseキーワード引数をconnected_toから削除。
非推奨化されていたActiveRecord::Base.allow_unsafe_raw_sqlを削除。
configs_forメソッドで非推奨化されていた:spec_nameオプションを削除。
Rails 4.2および4.1フォーマットで非推奨化されていたActiveRecord::BaseインスタンスのYAML読み込みサポートを削除。
PostgreSQLで:intervalカラムが使われている場合の非推奨化警告メッセージを削除。
今後:intervalカラムは文字列ではなくActiveSupport::Durationオブジェクトを返します。
従来の振る舞いを維持する場合は、以下の行を自分のモデルに追加できます。
attribute :column, :string
コネクションのspecification名として"primary"を用いてコネクションを解決するサポート(非推奨化済み)を削除。
ActiveRecord::Baseオブジェクトを引用符で直接囲めるようにするサポート(非推奨化済み)を削除。
ActiveRecord::Baseオブジェクトをtype_castで直接データベース値へ型キャストできるようにするサポート(非推奨化済み)を削除。
カラムをtype_castに直接渡せるようにするサポート(非推奨化済み)を削除。
非推奨化されていたDatabaseConfig#configメソッドを削除。
非推奨化されていた以下のrakeタスクを削除。
db:schema:load_if_rubydb:structure:dumpdb:structure:loaddb:structure:load_if_sqldb:structure:dump:#{name}db:structure:load:#{name}db:test:load_structuredb:test:load_structure:#{name} Model.reorder(nil).firstを用いて非決定論的な順序で検索できるようにするサポート(非推奨化済み)を削除。
Tasks::DatabaseTasks.schema_up_to_date?で非推奨化されていたenvironment引数とname引数を削除。
非推奨化されていたTasks::DatabaseTasks.dump_filenameを削除。
非推奨化されていたTasks::DatabaseTasks.schema_fileを削除。
非推奨化されていたTasks::DatabaseTasks.specを削除。
非推奨化されていたTasks::DatabaseTasks.current_configを削除。
非推奨化されていたActiveRecord::Connection#allowed_index_name_lengthを削除。
非推奨化されていたActiveRecord::Connection#in_clause_lengthを削除。
非推奨化されていたActiveRecord::DatabaseConfigurations::DatabaseConfig#spec_nameを削除。
非推奨化されていたActiveRecord::Base.connection_configを削除。
非推奨化されていたActiveRecord::Base.arel_attributeを削除。
非推奨化されていたActiveRecord::Base.configurations.default_hashを削除。
非推奨化されていたActiveRecord::Base.configurations.to_hを削除。
非推奨化されていたActiveRecord::Result#map!およびActiveRecord::Result#collect!を削除。
非推奨化されていたActiveRecord::Base#remove_connectionを削除。
Tasks::DatabaseTasks.schema_file_typeを非推奨化。トランザクションブロックが期待より早期に返された場合にトランザクションをロールバックするようになった。
変更前は、ブロックが期待より早期に返されるとトランザクションがコミットされる可能性がありました。
この問題は、トランザクションブロック内部でトリガーされるタイムアウトによって不完全なトランザクションがコミットされるというものです。この問題を回避するため、トランザクションブロックはロールバックされます。
同じカラム上で条件をマージした場合に両方の条件が維持されなくなり、常に後者の条件によって置き換わるようになった。
# Rails 6.1 (IN句はマージする側の等値条件によって置き換えられる) Author.where(id: [david.id, mary.id]).merge(Author.where(id: bob)) # => [bob] # Rails 6.1 (競合する条件がどちらも存在する: 非推奨) Author.where(id: david.id..mary.id).merge(Author.where(id: bob)) # => [] # Rails 6.1でrewhereを用いてRails 7.0の挙動に移行する) Author.where(id: david.id..mary.id).merge(Author.where(id: bob), rewhere: true) # => [bob] # Rails 7.0 (IN句の振る舞いは同じで、マージされる側の条件が常に置き換えられる) Author.where(id: [david.id, mary.id]).merge(Author.where(id: bob)) # => [bob] Author.where(id: david.id..mary.id).merge(Author.where(id: bob)) # => [bob]
変更点について詳しくはChangelogを参照してください。
特になし。
特になし。
特になし。
変更点について詳しくはChangelogを参照してください。
ActiveModel::Errorsをハッシュとして列挙できるようにするサポート(非推奨化済み)を削除。
非推奨化されたActiveModel::Errors#to_hを削除。
非推奨化されたActiveModel::Errors#slice!を削除。
非推奨化されたActiveModel::Errors#valuesを削除。
非推奨化されたActiveModel::Errors#keysを削除。
非推奨化されたActiveModel::Errors#to_xmlを削除。
ActiveModel::Errors#messagesで非推奨化されていたconcatエラーのサポートを削除。
ActiveModel::Errors#messagesのエラーをclearするサポート(非推奨化済み)を削除。
ActiveModel::Errors#messagesのエラーをdeleteするサポート(非推奨化済み)を削除。
ActiveModel::Errors#messagesで[]=を利用できるようにするサポート(非推奨化済み)を削除。
MarshalとYAMLのloadからRails 5.xのエラーフォーマットのサポートを削除
MarshalのloadからRails 5.xのActiveModel::AttributeSetフォーマットのサポートを削除。
特になし。
特になし。
変更点について詳しくはChangelogを参照してください。
非推奨化されていたconfig.active_support.use_sha1_digestsを削除。
非推奨化されていたURI.parserを削除。
日時のrange内に値が含まれているかどうかのチェックにRange#include?を利用できるようにするサポート(非推奨化済み)を削除。
非推奨化されていたActiveSupport::Multibyte::Unicode.default_normalization_formを削除。
フォーマットを#to_sに渡すことが非推奨化された。今後Array、Range、Date、DateTime、Time、BigDecimal、Float、Integerでは#to_fsを使うこと。
この非推奨化は、Ruby 3.1である種のオブジェクトの式展開を高速化する最適化を利用できるようにするためのものです。
新しいアプリケーションではそれらのクラスの#to_sメソッドがオーバーライドされません。既存のアプリケーションではconfig.active_support.disable_to_s_conversionでオーバーライドされないようにできます。
特になし。
変更点について詳しくはChangelogを参照してください。
前のコールバックがthrow :abortで中断された場合に、after_enqueue/after_performコールバックが停止しない振る舞い(非推奨化済み)を削除。
非推奨化されていた:return_false_on_aborted_enqueueオプションを削除。
Rails.config.active_job.skip_after_callbacks_if_terminatedを非推奨化。
特になし。
変更点について詳しくはChangelogを参照してください。
特になし。
特になし。
特になし。
変更点について詳しくはChangelogを参照してください。
非推奨化されていたRails.application.credentials.action_mailbox.mailgun_api_keyを削除。
非推奨化されていた環境変数MAILGUN_INGRESS_API_KEYを削除。
特になし。
特になし。
変更点について詳しくはChangelogを参照してください。
特になし。
Railsを頑丈かつ安定したフレームワークにするために多大な時間を費やしてくださった多くの開発者については、Railsコントリビューターの完全なリストを参照してください。これらの方々全員に深く敬意を表明いたします。
Railsガイドは GitHub の yasslab/railsguides.jp で管理・公開されております。本ガイドを読んで気になる文章や間違ったコードを見かけたら、気軽に Pull Request を出して頂けると嬉しいです。Pull Request の送り方については GitHub の README をご参照ください。
原著における間違いを見つけたら『Rails のドキュメントに貢献する』を参考にしながらぜひ Rails コミュニティに貢献してみてください 🛠💨✨
本ガイドの品質向上に向けて、皆さまのご協力が得られれば嬉しいです。
Railsガイド運営チーム (@RailsGuidesJP)
Railsガイドは下記の協賛企業から継続的な支援を受けています。支援・協賛にご興味あれば協賛プランからお問い合わせいただけると嬉しいです。