1 Rails 7.0にアップグレードする

既存のアプリケーションをアップグレードするのであれば、その前に質のよいテストカバレッジを用意するのはよい考えです。アプリケーションがRails 6.1までアップグレードされていない場合は先にそれを完了し、アプリケーションが正常に動作することを十分確認してからRails 7.0にアップデートしてください。アップグレードの注意点などについてはRailsアップグレードガイドを参照してください。

2 主要な機能

3 Railties

変更点について詳しくはChangelogを参照してください。

3.1 削除されたもの

  • dbconsoleで非推奨化されていたconfigを削除。

3.2 非推奨化

特になし。

3.3 主な変更点

  • Sprocketsへの依存がオプショナルになった

    rails gemがsprockets-railsに依存しなくなりました。自分のアプリケーションでSprocketsを使う必要がある場合は、以下のようにGemfileに追加してください。

    gem "sprockets-rails"
    

4 Action Cable

変更点について詳しくはChangelogを参照してください。

4.1 削除されたもの

特になし。

4.2 非推奨化

特になし。

4.3 主な変更点

特になし。

5 Action Pack

変更点について詳しくはChangelogを参照してください。

5.1 削除されたもの

  • 非推奨化されていたActionDispatch::Response.return_only_media_type_on_content_typeを削除。

  • 非推奨化されていたRails.config.action_dispatch.hosts_response_appを削除。

  • 非推奨化されていたActionDispatch::SystemTestCase#host!を削除。

  • fixture_pathへの相対パスをfixture_file_uploadに渡すサポート(非推奨化済み)を削除。

5.2 非推奨化

特になし。

5.3 主な変更点

特になし。

6 Action View

変更点について詳しくはChangelogを参照してください。

6.1 削除されたもの

  • 非推奨化されていたRails.config.action_view.raise_on_missing_translationsを削除

6.2 非推奨化

特になし。

6.3 主な変更点

  • 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" />
    

7 Action Mailer

変更点について詳しくはChangelogを参照してください。

7.1 削除されたもの

  • 非推奨化されていたActionMailer::DeliveryJobおよびActionMailer::Parameterized::DeliveryJobが削除された(今後はActionMailer::MailDeliveryJobを使う)。

7.2 非推奨化

特になし。

7.3 主な変更点

特になし。

8 Active Record

変更点について詳しくはChangelogを参照してください。

8.1 削除されたもの

  • 非推奨化されていた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_ruby
    • db:structure:dump
    • db:structure:load
    • db:structure:load_if_sql
    • db:structure:dump:#{name}
    • db:structure:load:#{name}
    • db:test:load_structure
    • db: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を削除。

8.2 非推奨化

  • Tasks::DatabaseTasks.schema_file_typeを非推奨化。

8.3 主な変更点

  • トランザクションブロックが期待より早期に返された場合にトランザクションをロールバックするようになった。

    変更前は、ブロックが期待より早期に返されるとトランザクションがコミットされる可能性がありました。

    この問題は、トランザクションブロック内部でトリガーされるタイムアウトによって不完全なトランザクションがコミットされるというものです。この問題を回避するため、トランザクションブロックはロールバックされます。

  • 同じカラム上で条件をマージした場合に両方の条件が維持されなくなり、常に後者の条件によって置き換わるようになった。

    # 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]
    

9 Active Storage

変更点について詳しくはChangelogを参照してください。

9.1 削除されたもの

特になし。

9.2 非推奨化

特になし。

9.3 主な変更点

特になし。

10 Active Model

変更点について詳しくはChangelogを参照してください。

10.1 削除されたもの

  • 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フォーマットのサポートを削除。

10.2 非推奨化

特になし。

10.3 主な変更点

特になし。

11 Active Support

変更点について詳しくはChangelogを参照してください。

11.1 削除されたもの

  • 非推奨化されていたconfig.active_support.use_sha1_digestsを削除。

  • 非推奨化されていたURI.parserを削除。

  • 日時のrange内に値が含まれているかどうかのチェックにRange#include?を利用できるようにするサポート(非推奨化済み)を削除。

  • 非推奨化されていたActiveSupport::Multibyte::Unicode.default_normalization_formを削除。

11.2 非推奨化

  • フォーマットを#to_sに渡すことが非推奨化された。今後ArrayRangeDateDateTimeTimeBigDecimalFloatIntegerでは#to_fsを使うこと。

    この非推奨化は、Ruby 3.1である種のオブジェクトの式展開を高速化する最適化を利用できるようにするためのものです。

    新しいアプリケーションではそれらのクラスの#to_sメソッドがオーバーライドされません。既存のアプリケーションではconfig.active_support.disable_to_s_conversionでオーバーライドされないようにできます。

11.3 主な変更点

特になし。

12 Active Job

変更点について詳しくはChangelogを参照してください。

12.1 削除されたもの

  • Removed deprecated behavior that was not halting after_enqueue/after_perform callbacks when a previous callback was halted with throw :abort.

  • 非推奨化されていた:return_false_on_aborted_enqueueオプションを削除。

12.2 非推奨化

Rails.config.active_job.skip_after_callbacks_if_terminatedを非推奨化。

12.3 主な変更

特になし。

13 Action Text

変更点について詳しくはChangelogを参照してください。

13.1 削除されたもの

特になし。

13.2 非推奨化

特になし。

13.3 主な変更点

特になし。

14 Action Mailbox

変更点について詳しくはChangelogを参照してください。

14.1 削除されたもの

  • 非推奨化されていたRails.application.credentials.action_mailbox.mailgun_api_keyを削除。

  • 非推奨化されていた環境変数MAILGUN_INGRESS_API_KEYを削除。

14.2 非推奨化

特になし。

14.3 主な変更点

特になし。

15 Ruby on Railsガイド

変更点について詳しくはChangelogを参照してください。

15.1 主な変更点

特になし。

16 クレジット

Railsを頑丈かつ安定したフレームワークにするために多大な時間を費やしてくださった多くの開発者については、Railsコントリビューターの完全なリストを参照してください。これらの方々全員に深く敬意を表明いたします。

フィードバックについて

Railsガイドは GitHub の yasslab/railsguides.jp で管理・公開されております。本ガイドを読んで気になる文章や間違ったコードを見かけたら、気軽に Pull Request を出して頂けると嬉しいです。Pull Request の送り方については GitHub の README をご参照ください。

原著における間違いを見つけたら『Rails のドキュメントに貢献する』を参考にしながらぜひ Rails コミュニティに貢献してみてください 🛠💨✨

本ガイドの品質向上に向けて、皆さまのご協力が得られれば嬉しいです。

Railsガイド運営チーム (@RailsGuidesJP)

支援・協賛

Railsガイドは下記の協賛企業から継続的な支援を受けています。支援・協賛にご興味あれば協賛プランからお問い合わせいただけると嬉しいです。

  1. Star
  2. このエントリーをはてなブックマークに追加