1 Rails 6.1へのアップグレード
既存のアプリケーションをアップグレードするのであれば、その前に質のよいテストカバレッジを用意するのはよい考えです。アプリケーションがRails 6.0までアップグレードされていない場合は先にそれを完了し、アプリケーションが正常に動作することを十分確認してからRails 6.1にアップデートしてください。アップグレードの注意点などについてはRailsアップグレードガイドを参照してください。
2 主要な機能
2.1 データベース単位のコネクション切り替え
Rails 6.1でデータベース単位のコネクション切り替え機能が使えるようになりました(#40370。6.0の場合は、ロールをreading
に切り替えるとすべてのデータベースコネクションもreadingロールに切り替わりました。6.1からは、Railsの設定でlegacy_connection_handling
をfalse
に指定しておけば、対応する抽象クラスでconnected_to
を呼び出すことでデータベースへのコネクションを切り替えられます。
2.2 水平シャーディング
Rails 6.0では、データベースの機能的パーティショニング(スキーマの異なる複数パーティション)が提供されていましたが、Active Recordのモデルがクラス単位およびロール単位で1つのコネクションしか持てなかったため、水平シャーディング(スキーマの同じ複数のパーティション)がサポートされていませんでした。Rails 6.1ではこの点が修正され、水平シャーディングを利用できるようになりました(#38531)
2.3 関連付けのstrict loading
関連付けのstrict loadingによって、N+1クエリ問題が発生する前に関連付けをeager loadingしてN+1クエリを防げるようになりました(#37400)。
2.4 Delegated Types
「Delegated Types」は、シングルテーブル継承(STI: Single Table Instance)の代替に使える設計です。(#39341)。Delegated Typesはクラス階層を表現するときに有用で、スーパークラスを「スーパークラス自身が持つテーブルで表される具象クラス」にできるようになります。スーパークラスの各サブクラスは、追加属性用に独自のテーブルを持ちます。
2.5 関連付けの非同期削除
関連付けの非同期削除は、関連付けをバックグラウンドジョブでdestroy
する機能を追加します(#40157)。データを削除するときのタイムアウトやパフォーマンス上の問題を回避するのに有用です。
3 Railties
変更点について詳しくはChangelogを参照してください
3.1 削除されたもの
非推奨の
rake notes
タスクを削除非推奨の
connection
オプションをrails dbconsole
コマンドから削除非推奨の
SOURCE_ANNOTATION_DIRECTORIES
環境変数サポートをrails notes
から削除非推奨の
server
引数をrailsのサーバーコマンドから削除非推奨の
HOST
環境変数でサーバーIPを指定する機能のサポートを削除非推奨の
rake dev:cache
タスクを削除非推奨の
rake routes
タスクを削除非推奨の
rake initializers
タスクを削除
3.2 非推奨化
(準備中...)
3.3 主な変更
(準備中...)
4 Action Cable
変更点について詳しくはChangelogを参照してください。
4.1 削除されたもの
(準備中...)
4.2 非推奨化
(準備中...)
4.3 主な変更
(準備中...)
5 Action Pack
変更点について詳しくはChangelogを参照してください。
5.1 削除されたもの
非推奨の
ActionDispatch::Http::ParameterFilter
を削除非推奨のコントローラレベルの
force_ssl
を削除
5.2 非推奨化
-
config.action_dispatch.return_only_media_type_on_content_type
を非推奨化
5.3 主な変更
-
ActionDispatch::Response#content_type
が完全なContent-Typeヘッダーを返すよう変更
6 Action View
変更点について詳しくはChangelogを参照してください。
6.1 削除されたもの
非推奨の
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メソッドを呼び出すサポート(非推奨)を削除
6.2 非推奨化
(準備中...)
6.3 主な変更
ActionView::Base
のサブクラスが#compiled_method_container
を実装することが必須化されたActionView::Template#initialize
でlocals
引数が必須化されたアセットヘルパーの
javascript_include_tag
とstylesheet_link_tag
がアセットのプリロードに関するヒントを提供するLink
ヘッダを生成するようになった。これはconfig.action_view.preload_links_header
をfalse
に設定することで無効にできる
7 Action Mailer
変更点について詳しくはChangelogを参照してください。
7.1 削除されたもの
- 非推奨の
ActionMailer::Base.receive
を削除(今後はAction Mailboxを利用)
7.2 非推奨化
(準備中...)
7.3 主な変更
(準備中...)
8 Active Record
変更点について詳しくはChangelogを参照してください。
8.1 削除されたもの
-
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の利用(非推奨)を削除
8.2 非推奨化
ActiveRecord::Base.allow_unsafe_raw_sql
を非推奨化connected_to
のキーワード引数database
を非推奨化legacy_connection_handling
にtrue
を設定している場合のconnection_handlers
を非推奨化
8.3 主な変更
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')
9 Active Storage
変更点について詳しくはChangelogを参照してください。
9.1 削除されたもの
ActiveStorage::Transformers::ImageProcessing
に:combine_options
操作を渡すサポート(非推奨)を削除非推奨の
ActiveStorage::Transformers::MiniMagickTransformer
を削除非推奨の
config.active_storage.queue
を削除非推奨の
ActiveStorage::Downloading
を削除
9.2 非推奨化
-
Blob.create_after_upload
を非推奨化、今後はBlob.create_and_upload
を利用( #34827)
9.3 主な変更
Blob.create_and_upload
を追加: blobを新規作成し、指定のio
をサービスにアップロードする(#34827)ActiveStorage::Blob#service_name
カラムを追加: アップグレード後にマイグレーションを実行する必要がある。マイグレーションを生成するためにはbin/rails app:update
を実行する
10 Active Model
変更点について詳しくはChangelogを参照してください。
10.1 削除されたもの
(準備中...)
10.2 非推奨化
(準備中...)
10.3 主な変更
- Active Modelのエラーが、モデルで発生したエラーのインタラクティブな操作をアプリケーションで簡単に行えるインターフェイスを持つオブジェクトになった(#32313): この機能に含まれるクエリインターフェイスによってテストの精度が向上し、エラーの詳細にアクセスできるようになる。
11 Active Support
変更点について詳しくはChangelogを参照してください。
11.1 削除されたもの
config.i18n.fallbacks
が空の場合にI18n.default_local
にフォールバックする挙動(非推奨)を削除非推奨の
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=
を削除
11.2 非推奨化
-
ActiveSupport::Multibyte::Unicode.default_normalization_form
を非推奨化
11.3 主な変更
(準備中...)
12 Active Job
変更点について詳しくはChangelogを参照してください。
12.1 削除されたもの
(準備中...)
12.2 非推奨化
-
config.active_job.return_false_on_aborted_enqueue
を非推奨化
12.3 主な変更
- キューに入っているジョブがabortされたときに
false
を返すようになった
13 Action Text
変更点について詳しくはChangelogを参照してください。
13.1 削除されたもの
(準備中...)
13.2 非推奨化
(準備中...)
13.3 主な変更
リッチテキストコンテンツの存在を確認するメソッド(リッチテキスト属性名の後ろに
?
を追加する)を追加(#37951)システムテストケースヘルパー
fill_in_rich_text_area
を追加: Trixエディタを探索して、指定のHTMLコンテンツを入力する(#35885)ActionText::FixtureSet.attachment
を追加: データベースfixtureで<action-text-attachment>
要素を生成する(#40289)
14 Action Mailbox
変更点について詳しくはChangelogを参照してください。
14.1 削除されたもの
(準備中...)
14.2 非推奨化
(準備中...)
14.3 主な変更
(準備中...)
15 Ruby on Railsガイド
変更点について詳しくはChangelogを参照してください。
15.1 主な変更
(準備中...)
16 Credits
Railsを頑丈かつ安定したフレームワークにするために多大な時間を費やしてくださった多くの開発者については、Railsコントリビューターの完全なリストを参照してください。これらの方々全員に深く敬意を表明いたします。
支援・協賛
Railsガイドは下記のサポーターから継続的な支援を受けています。