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