edge
詳細はrubyonrails.orgで: もっとRuby on Rails

Ruby on Rails 6.1 リリースノート

Rails 6.1 のハイライト:

これらのリリースノートでは、主要な変更のみをカバーしています。さまざまなバグ修正や変更については、変更ログを参照するか、GitHub のメイン Rails リポジトリのコミットのリストをチェックしてください。

1 Rails 6.1 へのアップグレード

既存のアプリケーションをアップグレードする場合は、アップグレードする前に十分なテストカバレッジを持つことが重要です。また、Rails 6.1 への更新を試みる前に、まず Rails 6.0 にアップグレードし、アプリケーションが正常に動作することを確認してください。アップグレード時に注意するべき事項のリストは、Ruby on Rails のアップグレードガイドで確認できます。

2 主要な機能

2.1 データベースごとの接続切り替え

Rails 6.1 では、データベースごとの接続切り替えが可能になりました。6.0 では、reading ロールに切り替えると、すべてのデータベース接続も読み取りロールに切り替わってしまいました。しかし、6.1 では設定で legacy_connection_handlingfalse に設定すると、対応する抽象クラスで connected_to を呼び出すことで、単一のデータベースの接続を切り替えることができるようになります。

2.2 水平シャーディング

Rails 6.0 では、データベースを機能的にパーティション分割(複数のパーティション、異なるスキーマ)することができましたが、水平シャーディング(同じスキーマ、複数のパーティション)をサポートすることはできませんでした。Rails では、Active Record のモデルはクラスごとに1つの接続しか持つことができなかったため、水平シャーディングをサポートすることができませんでした。しかし、これは修正され、Rails で水平シャーディングが利用可能になりました。

2.3 厳密な関連の読み込み

厳密な関連の読み込みでは、すべての関連を積極的に読み込み、N+1問題を発生させる前に停止することができます。

2.4 委譲型

委譲型は、単一テーブル継承の代替手段です。これにより、スーパークラスを独自のテーブルで表現することができる具体的なクラスのクラス階層を表現するのに役立ちます。各サブクラスには、追加の属性のために独自のテーブルがあります。

2.5 非同期での関連の削除

非同期での関連の削除により、アプリケーションで関連をバックグラウンドジョブで「削除」することができるようになりました。これにより、データを削除する際にタイムアウトやその他のパフォーマンスの問題を回避することができます。

3 Railties

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

3.1 削除

  • 廃止予定の rake notes タスクを削除しました。

  • rails dbconsole コマンドの connection オプションを廃止しました。

  • rails notes から SOURCE_ANNOTATION_DIRECTORIES 環境変数のサポートを廃止しました。

  • rails server コマンドから廃止予定の server 引数を削除しました。

  • サーバー IP を指定するために HOST 環境変数を使用するサポートを廃止しました。

  • 廃止予定の 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 削除

  • ActionView::Template::Handlers::ERBescape_whitelist を廃止しました。

  • ActionView::Resolverfind_all_anywhere を廃止しました。

  • ActionView::Template::HTMLformats を廃止しました。

  • ActionView::Template::RawFileformats を廃止しました。

  • ActionView::Template::Textformats を廃止しました。

  • ActionView::PathSetfind_file を廃止しました。

  • ActionView::LookupContextrendered_format を廃止しました。

  • ActionView::ViewPathsfind_file を廃止しました。

  • ActionView::Base#initialize の最初の引数に ActionView::LookupContext ではないオブジェクトを渡すサポートを廃止しました。

  • ActionView::Base#initializeformat 引数を廃止しました。

  • 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のパターン引数の非推奨化を削除します。

  • 一部のビューヘルパーでオブジェクトからプライベートメソッドを呼び出すサポートを削除します。

6.2 非推奨化

6.3 注目すべき変更

  • ActionView::Baseのサブクラスが#compiled_method_containerを実装する必要があるようにします。

  • ActionView::Template#initializelocals引数が必要になります。

  • javascript_include_tagstylesheet_link_tagのアセットヘルパーは、モダンなブラウザにアセットのプリロードに関するヒントを与えるLinkヘッダーを生成します。これは、config.action_view.preload_links_headerfalseに設定することで無効にすることができます。

7 Action Mailer

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

7.1 削除

  • Action Mailboxを利用するために、非推奨化されたActionMailer::Base.receiveを削除します。

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_attributesActiveRecord::Base#update_attributes!の非推奨化を削除します。

  • ActiveRecord::ConnectionAdapter::SchemaStatements#assume_migrated_upto_versionでの非推奨化されたmigrations_path引数を削除します。

  • 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_todatabaseキーワード引数を非推奨化します。

  • legacy_connection_handlingがfalseに設定されている場合、connection_handlersを非推奨化します。

8.3 注目すべき変更

  • MySQL: ユニーク性のバリデータは、デフォルトのデータベースの照合順序を尊重し、デフォルトでは大文字と小文字を区別しない比較を強制しません。

  • relation.createは、初期化ブロックとコールバックでクラスレベルのクエリメソッドにスコープを漏洩させなくなります。

    Before:

    User.where(name: "John").create do |john|
      User.find_by(name: "David") # => nil
    end
    

    After:

    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
    

    Before:

    User.where(name: "John").david
    # SELECT * FROM users WHERE name = 'John' AND name = 'David'
    

    After:

    User.where(name: "John").david
    # SELECT * FROM users WHERE name = 'David'
    
  • where.notは、NORではなくNAND述語を生成するようになりました。

    Before:

    User.where.not(name: "Jon", role: "admin")
    # SELECT * FROM users WHERE name != 'Jon' AND role != 'admin'
    

    After:

    User.where.not(name: "Jon", role: "admin")
    # SELECT * FROM users WHERE NOT (name = 'Jon' AND role = 'admin')
    
  • パーデータベースの接続ハンドリングを使用するには、legacy_connection_handlingをfalseに変更し、connection_handlersの非推奨化されたアクセサを削除する必要があります。connects_toconnected_toのパブリックメソッドには変更は必要ありません。

9 Active Storage

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

9.1 削除

  • ActiveStorage::Transformers::ImageProcessingcombine_options操作を渡すサポートを削除します。

  • ActiveStorage::Transformers::MiniMagickTransformerの非推奨化を削除します。

  • config.active_storage.queueの非推奨化を削除します。

  • ActiveStorage::Downloadingの非推奨化を削除します。

9.2 非推奨化

  • Blob.create_after_uploadBlob.create_and_uploadに非推奨化します。 (Pull Request)

9.3 注目すべき変更

  • Blob.create_and_uploadを追加し、指定されたioをサービスにアップロードする新しいblobを作成します。 (Pull Request)
  • ActiveStorage::Blob#service_nameカラムが追加されました。アップグレード後にマイグレーションを実行する必要があります。そのマイグレーションを生成するには、bin/rails app:updateを実行してください。

10 Active Model

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

10.1 削除

10.2 非推奨化

10.3 注目すべき変更

  • Active Modelのエラーは、モデルによってスローされるエラーをより簡単に処理および操作できるインターフェースを持つオブジェクトになりました。 この機能には、クエリインターフェース、より正確なテスト、エラーの詳細へのアクセスが含まれています。 Active Support --------------

詳細な変更については、変更履歴を参照してください。

10.4 削除

  • config.i18n.fallbacks が空の場合に I18n.default_locale への非推奨なフォールバックを削除しました。

  • 非推奨な LoggerSilence 定数を削除しました。

  • 非推奨な ActiveSupport::LoggerThreadSafeLevel#after_initialize を削除しました。

  • 非推奨な Module#parent_nameModule#parentModule#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_graphemesActiveSupport::Multibyte::Unicode.unpack_graphemesActiveSupport::Multibyte::Unicode.normalizeActiveSupport::Multibyte::Unicode.downcaseActiveSupport::Multibyte::Unicode.upcaseActiveSupport::Multibyte::Unicode.swapcase を削除しました。

  • 非推奨な ActiveSupport::Notifications::Instrumenter#end= を削除しました。

10.5 廃止予定

  • ActiveSupport::Multibyte::Unicode.default_normalization_form を廃止予定にしました。

10.6 注目すべき変更

11 Active Job

詳細な変更については、変更履歴を参照してください。

11.1 削除

11.2 廃止予定

  • config.active_job.return_false_on_aborted_enqueue を廃止予定にしました。

11.3 注目すべき変更

  • ジョブのエンキューが中止された場合に false を返すようになりました。

12 Action Text

詳細な変更については、変更履歴を参照してください。

12.1 削除

12.2 廃止予定

12.3 注目すべき変更

  • リッチテキスト属性の名前の後に ? を追加することで、リッチテキストコンテンツの存在を確認するメソッドを追加しました。 (プルリクエスト)

  • システムテストケースヘルパー fill_in_rich_text_area を追加し、指定されたHTMLコンテンツでtrixエディタを検索して埋めることができるようにしました。 (プルリクエスト)

  • データベースフィクスチャで <action-text-attachment> 要素を生成するための ActionText::FixtureSet.attachment を追加しました。 (プルリクエスト)

13 Action Mailbox

詳細な変更については、変更履歴を参照してください。

13.1 削除

13.2 廃止予定

  • Rails.application.credentials.action_mailbox.api_keyMAILGUN_INGRESS_API_KEYRails.application.credentials.action_mailbox.signing_keyMAILGUN_INGRESS_SIGNING_KEY に置き換えるために、Rails.application.credentials.action_mailbox.api_keyMAILGUN_INGRESS_API_KEY を廃止予定にしました。

13.3 注目すべき変更

14 Ruby on Rails Guides

詳細な変更については、変更履歴を参照してください。

14.1 注目すべき変更

15 クレジット

Railsに多くの時間を費やして安定かつ堅牢なフレームワークにした多くの人々に感謝します。 Railsへの貢献者の完全なリスト を参照して、彼ら全員に敬意を表します。

フィードバック

このガイドの品質向上にご協力ください。

タイポや事実の誤りを見つけた場合は、ぜひ貢献してください。 開始するには、ドキュメントへの貢献セクションを読んでください。

不完全なコンテンツや最新でない情報も見つかるかもしれません。 メインのドキュメントに不足しているドキュメントを追加してください。 修正済みかどうかは、まずEdge Guidesを確認してください。 スタイルと規約については、Ruby on Rails Guides Guidelinesを確認してください。

修正すべき点を見つけたが、自分で修正できない場合は、 問題を報告してください

そして最後に、Ruby on Railsのドキュメントに関するあらゆる議論は、公式のRuby on Railsフォーラムで大歓迎です。