rails6.1で加わった新しいアプリケーション設定であるnew_framework_defaults_6_1.rbの各項目をさらっと解説

## new_framework_defaults_6_1.rbとは
railsバージョンアップの工程で、`rails app:update`コマンドを実行すると、`config/initializers/new_framework_defaults_6_1.rb`と言うファイルが作成されます。
このファイルにはrails6.0, 6.1間で変更される設定値が書かれています。

## この記事の内容
実際にバージョンアップをする際は、このファイルの設定値を確認しながらバージョンアップを行うので内容を把握する必要があるため数行で各項目を解説していきます。
どのように使うかの詳細はこの記事では書きません。
config/initializers/new_framework_defaults_6_1.rwo

## 解説
### Rails.application.config.active_record.has_many_inversing = true

has_manyでinverse_of:を追加した場合に関連付けのモデルを作成した時に、関連付けのモデルのコールバックが実行されてしまうバグフィックスがあったが、破壊的な変更になるためオプション設定できる様になった。

デフォルトでは`true`で、これまで通りコールバックが実行される。

See: https://github.com/rails/rails/pull/37413
https://github.com/rails/rails/pull/37429

### Rails.application.config.active_storage.track_variants = true

ActiveStorageでvariantsの存在チェックでのオーバーヘッドが大きいためデフォルトで処理を廃止し、存在チェックを行いたい場合はオプションで設定できるようにした。

See: https://github.com/rails/rails/pull/37901

### Rails.application.config.active_job.retry_jitter = 0.15

jitterがデフォルトで指定されるようになった。
デフォルト値を変更にしたい場合は値を書き換える。

See: https://github.com/rails/rails/pull/37923

### Rails.application.config.active_job.skip_after_callbacks_if_terminated = true

ActibJobで、job実行時にcallback chainがhaltした場合、after_enqueue, after_perform を実行しないよう修正された。
これは、破壊的な変更になるため、デフォルトでは互換性を保つためにfalseになっている。(= haltしてもコールバックが実行される)
新しい挙動を有効化したい場合はtrueを指定する。

### Rails.application.config.action_dispatch.cookies_same_site_protection = :lax

Cookieを書き込み時に、SameSite属性の値が指定される様になった。
デフォルトはLax。
Strictにしたい場合、`:strict`を指定する。SameSiteを無効化したい場合は`:none`を指定する。
この設定を有効にすると以前のバージョンとの互換性は失われます。ロールバックが困難になるため、`:none`に設定しておきバージョンアップが安定したあと再度この指定を行うことをお勧めします。

### Rails.application.config.action_controller.urlsafe_csrf_tokens = true
CSRFのエンコード方式がbase64からurlsafeなbase64に変更されました。

この設定を有効にすると以前のバージョンとの互換性は失われます。ロールバックが困難になるため、`false`に設定しておきバージョンアップが安定したあと設定を削除しデフォルトの挙動`true`へ移行することをお勧めします。

### ActiveSupport.utc_to_local_returns_utc_offset_times = true
gem 'tzinfo'をv2にバージョンアップしたことで`ActiveSupport::TimeZone.utc_to_local`の返り値にUTC offsetが含まれようになった。
デフォルトは`false`で返り値にUTC offsetが含まない。

### Rails.application.config.action_dispatch.ssl_default_redirect_status = 308

GET, HEADリクエストをHTTPからHTTPSにリダイレクトするときに使用されるHTTPステータスコードをRFC7538に準拠した308にデフォルトを定義します。

See: https://tools.ietf.org/html/rfc7538

### Rails.application.config.active_record.legacy_connection_handling = false

`connected_to`メソッドを`ActiveRecord::Base`からだけでなく、抽象クラスからも呼び出せるようになりました。
抽象クラス内で複数のデータベース接続をするためにコレクションの切り替えを行います。

### Rails.application.config.action_view.form_with_generates_remote_forms = false
`form_with`ヘルパーで生成される`form`タグの`data-remote`属性のデフォルトが`true`から`false`になった。下位バージョンと互換性を保つためには`true`を設定する。

### Rails.application.config.active_storage.queues.analysis = nil
`config.active_storage.queue`は非推奨になり、`config.active_storage.queues.analysis`, `config.active_storage.queues.purge`に分割された。

ActiveStorageでオブジェクトがDBに登録されたときにActiveJob経由で、ファイルからメタデータを抽出しblobレコードのmetadataカラムに保存される。(このカラムはmini_magickを使って画像からheightやwidthを取り出すときによく使われる。)
このjobのキューがdefaultキューにしか投入できなかったが、このオプションでキューを指定できる様になった。

### Rails.application.config.active_storage.queues.purge = nil
`config.active_storage.queue`は非推奨になり、`config.active_storage.queues.analysis`, `config.active_storage.queues.purge`に分割された。

ActiveStorageのオブジェクトが指すファイルパスの更新時に古いファイルを削除するjobのキューがdefaultキューにしか投入できなかったが、このオプションでキューを指定できる様になった。

### Rails.application.config.action_mailbox.queues.incineration = nil
処理が成功したInboundEmailのincinerate(削除)ActiveJobの実行キューが選択可能になりました。

### Rails.application.config.action_mailbox.queues.routing = nil
InboundEmail受信時のルーティング処理をするActiveJobの実行キューが選択可能になりました。
非同期になっているのは他の処理を行なっている間にハングする時間をかけずに新しい受信メールを受け入れるため。

### Rails.application.config.action_mailer.deliver_later_queue_name = nil
ActionMailerでのメールの非同期送信をするActiveJobの実行キューが選択可能になりました。

## ファイル全文

```
# Be sure to restart your server when you modify this file.
#
# This file contains migration options to ease your Rails 6.1 upgrade.
#
# Once upgraded flip defaults one by one to migrate to the new default.
#
# Read the Guide for Upgrading Ruby on Rails for more info on each option.

# Support for inversing belongs_to -> has_many Active Record associations.
# Rails.application.config.active_record.has_many_inversing = true

# Track Active Storage variants in the database.
# Rails.application.config.active_storage.track_variants = true

# Apply random variation to the delay when retrying failed jobs.
# Rails.application.config.active_job.retry_jitter = 0.15

# Stop executing `after_enqueue`/`after_perform` callbacks if
# `before_enqueue`/`before_perform` respectively halts with `throw :abort`.
# Rails.application.config.active_job.skip_after_callbacks_if_terminated = true

# Specify cookies SameSite protection level: either :none, :lax, or :strict.
#
# This change is not backwards compatible with earlier Rails versions.
# It's best enabled when your entire app is migrated and stable on 6.1.
# Rails.application.config.action_dispatch.cookies_same_site_protection = :lax

# Generate CSRF tokens that are encoded in URL-safe Base64.
#
# This change is not backwards compatible with earlier Rails versions.
# It's best enabled when your entire app is migrated and stable on 6.1.
# Rails.application.config.action_controller.urlsafe_csrf_tokens = true

# Specify whether `ActiveSupport::TimeZone.utc_to_local` returns a time with an
# UTC offset or a UTC time.
# ActiveSupport.utc_to_local_returns_utc_offset_times = true

# Change the default HTTP status code to `308` when redirecting non-GET/HEAD
# requests to HTTPS in `ActionDispatch::SSL` middleware.
# Rails.application.config.action_dispatch.ssl_default_redirect_status = 308

# Use new connection handling API. For most applications this won't have any
# effect. For applications using multiple databases, this new API provides
# support for granular connection swapping.
# Rails.application.config.active_record.legacy_connection_handling = false

# Make `form_with` generate non-remote forms by default.
# Rails.application.config.action_view.form_with_generates_remote_forms = false

# Set the default queue name for the analysis job to the queue adapter default.
# Rails.application.config.active_storage.queues.analysis = nil

# Set the default queue name for the purge job to the queue adapter default.
# Rails.application.config.active_storage.queues.purge = nil

# Set the default queue name for the incineration job to the queue adapter default.
# Rails.application.config.action_mailbox.queues.incineration = nil

# Set the default queue name for the routing job to the queue adapter default.
# Rails.application.config.action_mailbox.queues.routing = nil

# Set the default queue name for the mail deliver job to the queue adapter default.
# Rails.application.config.action_mailer.deliver_later_queue_name = nil
```

## 参考
https://guides.rubyonrails.org/configuring.html