Rails 6.1の注目ポイント:
本リリースノートでは、主要な変更についてのみ説明します。多数のバグ修正および変更点については、GitHubのRailsリポジトリにあるコミットリストを参照してください。
既存のアプリケーションをアップグレードするのであれば、その前に質のよいテストカバレッジを用意するのはよい考えです。アプリケーションがRails 6.0までアップグレードされていない場合は先にそれを完了し、アプリケーションが正常に動作することを十分確認してからRails 6.1にアップデートしてください。アップグレードの注意点などについてはRailsアップグレードガイドを参照してください。
Rails 6.1でデータベース単位のコネクション切り替え機能が使えるようになりました(#40370)。6.0の場合は、ロールをreadingに切り替えるとすべてのデータベースコネクションもreadingロールに切り替わりました。6.1からは、Railsの設定でlegacy_connection_handlingをfalseに指定しておけば、対応する抽象クラスでconnected_toを呼び出すことでデータベースへのコネクションを切り替えられます。
Rails 6.0では、データベースの機能的パーティショニング(スキーマの異なる複数パーティション)が提供されていましたが、Active Recordのモデルがクラス単位およびロール単位で1つのコネクションしか持てなかったため、水平シャーディング(スキーマの同じ複数のパーティション)がサポートされていませんでした。Rails 6.1ではこの点が修正され、水平シャーディングを利用できるようになりました(#38531)
関連付けのstrict loadingによって、N+1クエリ問題が発生する前に関連付けをeager loadingしてN+1クエリを防げるようになりました(#37400)。
「Delegated Types」は、単一テーブル継承(STI: Single Table Instance)の代替に使える設計です。(#39341)。Delegated Typesはクラス階層を表現するときに有用で、スーパークラスを「スーパークラス自身が持つテーブルで表される具象クラス」にできるようになります。スーパークラスの各サブクラスは、追加属性用に独自のテーブルを持ちます。
関連付けの非同期削除は、関連付けをバックグラウンドジョブでdestroyする機能を追加します(#40157)。データを削除するときのタイムアウトやパフォーマンス上の問題を回避するのに有用です。
変更点について詳しくはChangelogを参照してください
非推奨のrake notesタスクを削除
非推奨のconnectionオプションをrails dbconsoleコマンドから削除
非推奨のSOURCE_ANNOTATION_DIRECTORIES環境変数サポートをrails notesから削除
非推奨のserver引数をrailsのサーバーコマンドから削除
非推奨のHOST環境変数でサーバーIPを指定する機能のサポートを削除
非推奨のrake dev:cacheタスクを削除
非推奨のrake routesタスクを削除
非推奨のrake initializersタスクを削除
(準備中...)
(準備中...)
変更点について詳しくはChangelogを参照してください。
(準備中...)
(準備中...)
(準備中...)
変更点について詳しくはChangelogを参照してください。
非推奨のActionDispatch::Http::ParameterFilterを削除
非推奨のコントローラレベルのforce_sslを削除
config.action_dispatch.return_only_media_type_on_content_typeを非推奨化ActionDispatch::Response#content_typeが完全なContent-Typeヘッダーを返すよう変更変更点について詳しくはChangelogを参照してください。
非推奨のescape_whitelistをActionView::Template::Handlers::ERBから削除
非推奨のfind_all_anywhereをActionView::Resolverから削除
非推奨のformatsをActionView::Template::HTMLから削除
非推奨のformatsをActionView::Template::RawFileから削除
非推奨のformatsをActionView::Template::Textから削除
非推奨のfind_fileをActionView::PathSetから削除
非推奨のrendered_formatをActionView::LookupContextから削除
非推奨のfind_fileをActionView::ViewPathsから削除
ActionView::Base#initializeでActionView::LookupContextでないオブジェクトを第1引数として渡す機能(非推奨)を削除
非推奨のformat引数をActionView::Base#initializeから削除
非推奨のActionView::Template#refreshを削除
非推奨のActionView::Template#original_encodingを削除
非推奨のActionView::Template#variantsを削除
非推奨のActionView::Template#formatsを削除
非推奨のActionView::Template#virtual_path=を削除
非推奨のActionView::Template#updated_atを削除
ActionView::Template#initializeで必須だった非推奨のupdated_at引数を削除
非推奨のActionView::Template.finalize_compiled_template_methodsを削除
非推奨のconfig.action_view.finalize_compiled_template_methodsを削除
ActionView::ViewPaths#with_fallbackのブロック付き呼び出し(非推奨)のサポートを削除
render template:に絶対パスを渡せる機能(非推奨)のサポートを削除
render file:に相対パスを渡せる機能(非推奨)のサポートを削除
引数を2つ受け取らないテンプレートハンドラー(非推奨)のサポートを削除
ActionView::Template::PathResolverのパターン引数(非推奨)を削除
一部のビューヘルパーでオブジェクトのprivateメソッドを呼び出すサポート(非推奨)を削除
(準備中...)
ActionView::Baseのサブクラスが#compiled_method_containerを実装することが必須化された
ActionView::Template#initializeでlocals引数が必須化された
アセットヘルパーのjavascript_include_tagとstylesheet_link_tagがアセットのプリロードに関するヒントを提供するlinkヘッダを生成するようになった。これはconfig.action_view.preload_links_headerをfalseに設定することで無効にできる
変更点について詳しくはChangelogを参照してください。
ActionMailer::Base.receiveを削除(今後はAction Mailboxを利用)(準備中...)
(準備中...)
変更点について詳しくはChangelogを参照してください。
ActiveRecord::ConnectionAdapters::DatabaseLimitsから以下の非推奨メソッドを削除
column_name_length
table_name_length
columns_per_table
indexes_per_table
columns_per_multicolumn_index
sql_query_length
joins_per_query
非推奨のActiveRecord::ConnectionAdapters::AbstractAdapter#supports_multi_insert?を削除
非推奨のActiveRecord::ConnectionAdapters::AbstractAdapter#supports_foreign_keys_in_create?を削除
非推奨のActiveRecord::ConnectionAdapters::PostgreSQLAdapter#supports_ranges?を削除
非推奨のActiveRecord::Base#update_attributesおよびActiveRecord::Base#update_attributes!を削除
非推奨のmigrations_path引数を
ActiveRecord::ConnectionAdapter::SchemaStatements#assume_migrated_upto_versionから削除
非推奨のconfig.active_record.sqlite3.represent_boolean_as_integerを削除
ActiveRecord::DatabaseConfigurationsから以下の非推奨メソッドを削除
fetch
each
first
values
[]=
非推奨のActiveRecord::Result#to_hashメソッドを削除
ActiveRecord::Relationメソッドでの安全でない生SQLの利用(非推奨)を削除
ActiveRecord::Base.allow_unsafe_raw_sqlを非推奨化
connected_toのキーワード引数databaseを非推奨化
legacy_connection_handlingにtrueを設定している場合のconnection_handlersを非推奨化
MySQL: uniquenessバリデーターでデータベースのデフォルトコレーション(collation)が反映されるようになり、大文字小文字を区別する比較をデフォルトで強制しなくなった
relation.createのスコープが、初期化ブロック内やコールバック内でクラスレベルのクエリメソッドにリークしないようになった
変更前:
User.where(name: "John").create do |john| User.find_by(name: "David") # => nil end
変更後:
User.where(name: "John").create do |john| User.find_by(name: "David") # => #<User name: "David", ...> end
名前付きスコープをチェーンしたときのスコープが、クラスレベルのクエリメソッドにリークしないようになった
class User < ActiveRecord::Base scope :david, -> { User.where(name: "David") } end
変更前:
User.where(name: "John").david # SELECT * FROM users WHERE name = 'John' AND name = 'David'
変更後:
User.where(name: "John").david # SELECT * FROM users WHERE name = 'David'
where.notがNORではなくNANDを述部で生成するようになった
変更前:
User.where.not(name: "Jon", role: "admin") # SELECT * FROM users WHERE name != 'Jon' AND role != 'admin'
変更後:
User.where.not(name: "Jon", role: "admin") # SELECT * FROM users WHERE NOT (name = 'Jon' AND role = 'admin')
変更点について詳しくはChangelogを参照してください。
ActiveStorage::Transformers::ImageProcessingに:combine_options操作を渡すサポート(非推奨)を削除
非推奨のActiveStorage::Transformers::MiniMagickTransformerを削除
非推奨のconfig.active_storage.queueを削除
非推奨のActiveStorage::Downloadingを削除
Blob.create_after_uploadを非推奨化、今後はBlob.create_and_uploadを利用(
#34827) Blob.create_and_uploadを追加: blobを新規作成し、指定のioをサービスにアップロードする(#34827)
ActiveStorage::Blob#service_nameカラムを追加: アップグレード後にマイグレーションを実行する必要がある。マイグレーションを生成するためにはbin/rails app:updateを実行する
変更点について詳しくはChangelogを参照してください。
(準備中...)
(準備中...)
変更点について詳しくはChangelogを参照してください。
config.i18n.fallbacksが空の場合にI18n.default_localeにフォールバックする挙動(非推奨)を削除
非推奨のLoggerSilence定数を削除
非推奨のActiveSupport::LoggerThreadSafeLevel#after_initializeを削除
非推奨のModule#parent_name、Module#parent、Module#parentsを削除
非推奨のactive_support/core_ext/module/reachableファイルを削除
非推奨のactive_support/core_ext/numeric/inquiryファイルを削除
非推奨のactive_support/core_ext/array/prepend_and_appendファイルを削除
非推奨のactive_support/core_ext/hash/compactファイルを削除
非推奨のactive_support/core_ext/hash/transform_valuesファイルを削除
非推奨のactive_support/core_ext/range/include_rangeファイルを削除
非推奨のActiveSupport::Multibyte::Chars#consumes?およびActiveSupport::Multibyte::Chars#normalizeを削除
非推奨のActiveSupport::Multibyte::Unicode.pack_graphemes、
ActiveSupport::Multibyte::Unicode.unpack_graphemes、
ActiveSupport::Multibyte::Unicode.normalize、
ActiveSupport::Multibyte::Unicode.downcase、
ActiveSupport::Multibyte::Unicode.upcase、ActiveSupport::Multibyte::Unicode.swapcaseを削除
非推奨のActiveSupport::Notifications::Instrumenter#end=を削除
ActiveSupport::Multibyte::Unicode.default_normalization_formを非推奨化(準備中...)
変更点について詳しくはChangelogを参照してください。
(準備中...)
config.active_job.return_false_on_aborted_enqueueを非推奨化falseを返すようになった変更点について詳しくはChangelogを参照してください。
(準備中...)
(準備中...)
リッチテキストコンテンツの存在を確認するメソッド(リッチテキスト属性名の後ろに?を追加する)を追加(#37951)
システムテストケースヘルパーfill_in_rich_text_areaを追加: Trixエディタを探索して、指定のHTMLコンテンツを入力する(#35885)
ActionText::FixtureSet.attachmentを追加: データベースfixtureで<action-text-attachment>要素を生成する(#40289)
変更点について詳しくはChangelogを参照してください。
(準備中...)
Rails.application.credentials.action_mailbox.api_keyおよびMAILGUN_INGRESS_API_KEYが非推奨化。今後はRails.application.credentials.action_mailbox.signing_keyおよびMAILGUN_INGRESS_SIGNING_KEYを利用すること。(準備中...)
変更点について詳しくはChangelogを参照してください。
(準備中...)
Railsを頑丈かつ安定したフレームワークにするために多大な時間を費やしてくださった多くの開発者については、Railsコントリビューターの完全なリストを参照してください。これらの方々全員に深く敬意を表明いたします。
Railsガイドは GitHub の yasslab/railsguides.jp で管理・公開されております。本ガイドを読んで気になる文章や間違ったコードを見かけたら、気軽に Pull Request を出して頂けると嬉しいです。Pull Request の送り方については GitHub の README をご参照ください。
原著における間違いを見つけたら『Rails のドキュメントに貢献する』を参考にしながらぜひ Rails コミュニティに貢献してみてください 🛠💨✨
本ガイドの品質向上に向けて、皆さまのご協力が得られれば嬉しいです。
Railsガイド運営チーム (@RailsGuidesJP)
Railsガイドは下記の協賛企業から継続的な支援を受けています。支援・協賛にご興味あれば協賛プランからお問い合わせいただけると嬉しいです。