WIP: Ruby on Rails 6.0 リリースノート

Rails 6.0の注目ポイント:

本リリースノートでは、主要な変更についてのみ説明します。多数のバグ修正および変更点については、GithubのRailsリポジトリにあるlist of commitsのchangelogを参照してください。

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

既存のアプリケーションをアップグレードするのであれば、その前に質のよいテストカバレッジを用意するのはよい考えです。アプリケーションがRails 5.2までアップグレードされていない場合は先にそれを完了し、アプリケーションが正常に動作することを十分確認してからRails 6.0にアップデートしてください。アップグレードの注意点などについてはRuby on Railsアップグレードガイドを参照してください。

2 主要な機能

2.1 Action Mailbox

Pull Request

Action Mailboxは、受信メールをコントローラ的なメールボックスにルーティングできます。Action Mailboxについて詳しくは、Action Mailbox Basicsガイドを参照してください。

2.2 Action Text

Pull Request

Action Textは、リッチテキストコンテンツと編集機能をRailsで使えるようにします。Trixエディタは、リンク/引用/リスト/画像埋め込み/ギャラリー【原文怪しい】などあらゆるものを扱えます。Trixエディタで生成されるリッチテキストコンテンツは独自のRichTextモデルに保存され、アプリ内にある既存のActive Recordモデルに関連付けられます。 埋め込み画像などの添付ファイルは自動的にActive Storageを用いて保存され、RichTextモデルに関連付けられます。

Action Textについて詳しくはガイドのAction Text の概要を参照してください。

2.3 並列テスト

Pull Request

並列テスト(parallel testing)機能によってテストスイートを並列化できます。デフォルトではプロセスをforkしますが、スレッド(threading)もサポートされます。テストを並列実行することで、テストスイート全体の実行時間を削減できます。

2.4 Action Cableのテスト支援

Pull Request

Action Cableテストツールを用いて、Action Cableの機能を任意のレベル(接続レベル/チャネルレベル/ブロードキャストレベル)でテストできます。

3 Railties

変更点について詳しくはChangelogを参照してください

3.1 削除されたもの

  • プラグインテンプレートの非推奨化after_bundleヘルパーを削除 (Commit)

  • config.ruでアプリケーションクラスをrunの引数として用いる非推奨サポートを削除 (Commit)

  • railsコマンドから非推奨environment引数を削除 (Commit)

  • ジェネレータとテンプレートから非推奨のcapify!メソッドを削除 (Commit)

  • 非推奨のconfig.secret_token設定を削除 (Commit)

3.2 非推奨化

  • Rackサーバー名を正規の引数としてrails serverに渡すことを非推奨化 (Pull Request)

  • サーバーIPの指定にHOST環境変数を使えるようにするサポートを非推奨化 (Pull Request)

  • config_forから返されるハッシュにシンボルでないキーでアクセスすることを非推奨化 (Pull Request)

3.3 主な変更

  • rails serverコマンドでサーバーを指定する明示的な--using(または-u)オプションを追加 (Pull Request)

  • rails routes出力を拡張フォーマットで表示できる機能を追加 (Pull Request)

  • インラインのActive Jobアダプタを用いてデータベースseedタスクを実行 (Pull Request)

  • アプリケーションのデータベースを切り替えるrails db:system:changeコマンドを追加 (Pull Request)

  • Action Cableチャネルだけをテストするrails test:channelsコマンドを追加 (Pull Request)

  • DNSリバインディング攻撃からの保護を導入 (Pull Request)

  • ジェネレータコマンド実行中の失敗をabortする機能を追加 (Pull Request)

  • WebpackerがRails 6のデフォルトJavaScriptコンパイラになる (Pull Request)

  • rails db:migrate:statusコマンドでマルチデータベースをサポート (Pull Request)

  • ジェネレータでマルチデータベースごとに異なるパスを利用する機能を追加 (Pull Request)

  • credentialを複数の環境でサポート (Pull Request)

  • null_storeがtest環境のデフォルトキャッシュになる (Pull Request)

4 Action Cable

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

4.1 削除されたもの

4.2 非推奨化

4.3 主な変更

  • Action CableのJavaScriptパッケージがCoffeeScriptからES2015に変換され、ソースコードがnpmディストリビューションでパブリッシュされるようになりました。

    これによって、Action Cableのユーザーがコンパイル済みコードではなくJavaScriptソースコードを当てにできるようになり、JavaScriptバンドルのサイズが小さくなります。

    この変更に伴い、Action CableのJavaScript APIの一部のオプションで以下のようなbreaking changes(互換性のない変更)が発生します。

    • WebSockeアダプタやloggerアダプタの設定が、ActionCableのプロパティからActionCable.adaptersのプロパティに移動しました。
    • ActionCable.startDebugging()メソッドとActionCable.stopDebugging()メソッドが削除され、ActionCable.logger.enabledのプロパティに置き換わりました。

5 Action Pack

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

5.1 削除されたもの

  • 非推奨化されたfragment_cache_keyヘルパーを削除、今後はcombined_fragment_cache_keyを用いる (Commit)

  • ActionDispatch::TestResponseから非推奨化された次のメソッドを削除: #success?(今後は#successful?を使う)、#missing?(今後は#not_found?を使う)、#error?(今後は#server_error?を使う) (Commit)

5.2 非推奨化

  • ActionDispatch::Http::ParameterFilterを非推奨化、今後はActiveSupport::ParameterFilterを用いる (Pull Request)

  • コントローラレベルのforce_sslを非推奨化、今後はconfig.force_sslを用いる (Pull Request)

5.3 主な変更

  • リソースparamにコロンが含まれている場合はArgumentErrorをraiseするようになった (Pull Request)

  • ActionDispatch::SystemTestCase.driven_byをブロック付きで呼ぶことで特定のブラウザの機能を定義できるようになった (Pull Request)

  • ActionDispatch::HostAuthorizationミドルウェアを追加(DNSリバインディング攻撃から保護する) (Pull Request)

  • parsed_bodyActionController::TestCase内で利用できるようになった (Pull Request)

  • 複数のルートルーティングが同じコンテキストに存在し、as:による命名仕様がない場合はArgumentErrorをraiseするようになった (Pull Request)

  • パラメータのパースエラーを#rescue_fromで扱えるようになった (Pull Request)

  • ActionController::Parameters#each_valueを追加(パラメータの列挙用) (Pull Request)

  • send_datasend_fileでContent-Dispositionファイル名をエンコードするようになった (Pull Request)

  • ActionController::Parameters#each_keyが公開された (Pull Request)

  • purposeメタデータを署名済み/暗号化済みcookieに追加(cookie値を別のcookieにコピーされないようにする) (Pull Request)

  • respond_to呼び出しが衝突した場合にActionController::RespondToMismatchErrorをraiseするようになった (Pull Request)

  • リクエストフォーマットでテンプレートが見つからない場合に使う明示的なエラーページを追加 (Pull Request)

  • ActionDispatch::DebugExceptions.register_interceptorを導入した(レンダリング開始前にDebugExceptionsにフックして例外を処理する手段のひとつ) (Pull Request)

  • 1リクエストに付きContent-Security-Policy(CSP)nonceヘッダー値を1つしか出力しないようになった (Pull Request)

  • Railsのコントローラで明示的にincludeできるデフォルトのヘッダー設定で主に用いられるモジュールを追加 (Pull Request)

  • #digActionDispatch::Request::Sessionに追加 (Pull Request)

6 Action View

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

6.1 削除されたもの

6.2 非推奨化

6.3 主な変更

7 Action Mailer

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

7.1 削除されたもの

7.2 非推奨化

7.3 主な変更

8 Active Record

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

8.1 削除されたもの

  • 非推奨の#set_stateをトランザクションオブジェクトから削除 (Commit)

  • 非推奨の#supports_statement_cache?をデータベースアダプタから削除 (Commit)

  • 非推奨の#insert_fixturesをデータベースアダプタから削除 (Commit)

  • 非推奨のActiveRecord::ConnectionAdapters::SQLite3Adapter#valid_alter_table_type?を削除 (Commit)

  • ブロックが1つ渡されたときにカラム名をsumに渡すサポートを廃止 (Commit)

  • ブロックが1つ渡されたときにカラム名をcountに渡すサポートを廃止 (Commit)

  • arelへのリレーション内で「missing」メソッドの委譲サポートを廃止 (Commit)

  • クラスのprivateメソッドへのリレーション内で「missing」メソッドの委譲サポートを廃止 (Commit)

  • #cache_keyのタイムスタンプ名指定のサポートを廃止 (Commit)

  • 非推奨のActiveRecord::Migrator.migrations_path=を削除 (Commit)

  • 非推奨のexpand_hash_conditions_for_aggregatesを削除 (Commit)

8.2 非推奨化

  • uniquenessバリデータで、大文字小文字が一致しない照合順序(collation)比較を非推奨化 (Commit)

  • レシーバのスコープが漏洩している場合のクラスレベルのクエリ送信メソッドを非推奨化 (Pull Request)

  • config.activerecord.sqlite3.represent_boolean_as_integerを非推奨化 (Commit)

  • migrations_pathsconnection.assume_migrated_upto_versionに渡すことを非推奨化 (Commit)

  • ActiveRecord::Result#to_hashを非推奨化、今後はActiveRecord::Result#to_aを用いる (Commit)

  • DatabaseLimitsの以下のメソッドを非推奨化: column_name_lengthtable_name_lengthcolumns_per_tableindexes_per_tablecolumns_per_multicolumn_indexsql_query_lengthjoins_per_query (Commit)

  • update_attributes/!を非推奨化、今後はupdate/!を用いる (Commit)

8.3 主な変更

  • SQLite3の最小バージョンを1.4に上げる (Pull Request)

  • rails db:prepareを追加: データベースが存在しない場合は作成してからマイグレーションを実行する (Pull Request)

  • after_save_commitコールバックを追加(after_commit :hook, on: [ :create, :update ]のショートカット) (Pull Request)

  • ActiveRecord::Relation#extract_associatedを追加: 関連付けられたレコードをリレーションから切り出す (Pull Request)

  • ActiveRecord::Relation#annotateを追加: ActiveRecord::RelationクエリにSQLコメントを追加する (Pull Request)

  • データベースにOptimizer Hintsを設定するサポートを追加 (Pull Request)

  • 一括INSERTを行うinsert_all/insert_all!/upsert_allメソッドを追加 (Pull Request)

  • rails db:seed:replantを追加: 現在の環境で各データベースのテーブルをTRUNCATEしてseedを読み込む (Pull Request)

  • reselectメソッドを追加(unscope(:select).select(fields)のショートハンド) (Pull Request)

  • すべてのenum値についてネガティブスコープを追加 (Pull Request)

  • #destroy_by#delete_byを追加: 条件付き削除を実行 (Pull Request)

  • データベース接続を自動的に切り替える機能を追加 (Pull Request)

  • 1つのブロック内でデータベースへの書き込みを防ぐ機能を追加 (Pull Request)

  • 接続切り替え用APIを追加(マルチデータベースサポート用) (Pull Request)

  • マイグレーションのタイムスタンプにデフォルトでprecision: 6を指定 (Pull Request)

  • MySQLでテキストやblobのサイズを変更する:sizeオプションを追加 (Pull Request)

  • dependent: :nullifyストラテジーのポリモーフィック関連付けで外部キーと外部typeカラムを両方ともNULLに設定 (Pull Request)

  • ActionController::Parametersの許可されたインスタンスをActiveRecord::Relation#exists?の引数として渡せるようになった (Pull Request)

  • Ruby 2.6で導入されたエンドレスrangeを#whereでサポート (Pull Request)

  • MySQLのテーブル作成オプションでROW_FORMAT=DYNAMICをデフォルトで設定 (Pull Request)

  • ActiveRecord.enumで生成されたスコープを無効にする機能を追加 (Pull Request)

  • カラムの暗黙のORDERが設定可能になった (Pull Request)

  • PostgreSQLの最小バージョンが9.3になり、9.1や9.2のサポートを廃止 (Pull Request)

  • enumの値がfrozenになり、変更しようとするとエラーがraiseするようになった (Pull Request)

  • ActiveRecord::StatementInvalidエラーのSQLがerrorプロパティになり、SQLバインドを独立したerrorプロパティとして含まれるようになった (Pull Request)

  • :if_not_existsオプションをcreate_tableに追加 (Pull Request)

  • rails db:schema:cache:dumprails db:schema:cache:clearにマルチデータベースのサポートを追加 and rails db:schema:cache:clear. (Pull Request)

  • ActiveRecord::Base.connected_toのデータベースハッシュでハッシュやURLの設定をサポート (Pull Request)

  • MySQLでデフォルト式や式インデックスをサポート (Pull Request)

  • change_tableマイグレーションヘルパーにindexオプションを追加 (Pull Request)

  • マイグレーションでのtransactionのrevertを修正(従来のtransaction内のコマンドが修正された) (Pull Request)

  • ActiveRecord::Base.configurations=がシンボルのハッシュで設定されるようになった (Pull Request)

  • レコードが実際に保存された場合にのみカウンタキャッシュが更新されるよう修正 (Pull Request)

  • SQLiteアダプタで式インデックスをサポート (Pull Request)

  • 関連付けられたレコードのautosaveコールバックをサブクラスで再定義できるようになった (Pull Request)

  • MySQLの最小バージョンが5.5.8に上がった (Pull Request)

  • MySQLでデフォルトでutf8mb4文字セットが使われるようになった (Pull Request)

  • #inspectの個人情報データをフィルタで除外する機能を追加 (Pull Request, Pull Request)

  • ActiveRecord::Base.configurationsの戻り値をハッシュからオブジェクトに変更 (Pull Request)

  • データベース設定にアドバイザリーロック(勧告ロック)を無効にする設定を追加 (Pull Request)

  • SQLite3アダプタのalter_tableメソッドを更新し、外部キーをリストアするようになった (Pull Request)

  • remove_foreign_key:to_tableオプションをロールバックできるようにした (Pull Request)

  • MySQLのtime型でprecisionが指定されている場合のデフォルト値を修正 (Pull Request)

  • touchオプションの挙動をPersistence#touchの挙動に合わせて修正 (Pull Request)

  • マイグレーションでカラム定義が重複した場合に例外をraiseするようになった (Pull Request)

  • SQLiteの最小バージョンが3.8に上がった (Pull Request)

  • 子レコードが重複している場合に親レコードが保存されない問題を修正 (Pull Request)

  • Associations::CollectionAssociation#sizeAssociations::CollectionAssociation#empty?で読み込み済みの関連idが存在する場合はそれを使うようになった (Pull Request)

  • リクエストされた関連付けが一部のレコードにない場合にポリモーフィック関連付けをプリロードするサポートを追加 (Commit)

  • touch_allメソッドをActiveRecord::Relationに追加 (Pull Request)

  • ActiveRecord::Base.base_class?述語メソッドを追加 (Pull Request)

  • ActiveRecord::Store.store_accessorにカスタムprefix/suffixオプションを追加 (Pull Request)

  • ActiveRecord::Base.create_or_find_by/!を追加: データベースのunique制限に依存する形でActiveRecord::Base.find_or_create_by/!でSELECTやINSERTの競合を扱う (Pull Request)

  • Relation#pickを追加(pluckで単独の値を取るショートハンド) (Pull Request)

9 Active Storage

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

9.1 削除されたもの

9.2 非推奨化

9.3 主な変更

  • アタッチされるモデルをupdateupdate!で更新すると(例: @user.update!(images: [ … ]))、単に追加するのではなく既存の画像を置き換えるようになった (Pull Request)

10 Active Model

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

10.1 削除されたもの

10.2 非推奨化

10.3 主な変更

  • ActiveModel::Errors#full_messageのフォーマットをカスタマイズする設定オプションを追加 (Pull Request)

  • has_secure_passwordの属性名を設定するサポートを追加 (Pull Request)

  • #slice!メソッドをActiveModel::Errorsに追加 (Pull Request)

  • ActiveModel::Errors#of_kind?を追加: 特定のエラーが存在するかどうかをチェックする (Pull Request)

11 Active Support

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

11.1 削除されたもの

11.2 非推奨化

11.3 主な変更

12 Active Job

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

12.1 削除されたもの

12.2 非推奨化

12.3 主な変更

  • Active Jobの引数にカスタムシリアライザのサポートを追加 (Pull Request)

  • キューが送信されたタイムゾーンでActive Jobを実行するサポートを追加 they were enqueued. (Pull Request)

  • retry_ondiscard_onに複数の例外を渡せるようになった (Commit)

  • assert_enqueued_withassert_enqueued_email_withをブロックなしで呼べるようになった (Pull Request)

  • enqueueenqueue_atの通知を、after_enqueueでラップするのではなくaround_enqueueでラップするようになった (Pull Request)

  • perform_enqueued_jobsをブロックなしで呼べるようになった (Pull Request)

  • assert_performed_withをブロックなしで呼べるようになった (Pull Request)

  • :queueオプションをジョブのアサーションやヘルパーに追加 (Pull Request)

  • Active Jobにretryやdiscardなどのフックを追加 (Pull Request)

  • ジョブ実行時に引数のサブセットをテストする方法を追加 (Pull Request)

  • Active Jobテストヘルパーから返されるジョブに、デシリアライズされた引数が含まれるようになった (Pull Request)

  • Active JobアサーションヘルパーでProcを受け取れるようになった(only用) keyword. (Pull Request)

  • アサーションヘルパーで、ジョブの引数からマイクロセカンドやナノセカンドの桁を取り除けるようになった (Pull Request)

13 Ruby on Rails Guides

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

13.1 主な変更

14 クレジット表記

Railsを頑丈かつ安定したフレームワークにするために多大な時間を費やしてくださった多くの開発者については、Railsコントリビューターの完全なリストを参照してください。これらの方々全員に深く敬意を表明いたします。

フィードバックについて

Railsガイドは GitHub の yasslab/railsguides.jp で管理・公開されております。本ガイドを読んで気になる文章や間違ったコードを見かけたら、上記リポジトリにてお気軽に Pull Request を出して頂けると嬉しいです。Pull Request の送り方については GitHub の README をご参照ください。

原著における間違いを見つけたら、「Ruby on Rails に貢献する方法」に記されている Rails のドキュメントに貢献するを参考にしながらぜひ Rails コミュニティに貢献してみてください :)

本ガイドの品質向上に向けて、皆さまのご協力が得られれば嬉しいです。よろしくお願いします。

YassLab 株式会社
https://yasslab.jp/

支援・協賛

Railsガイドは下記のサポーターから継続的な支援を受けています。Railsガイドへの出稿 (支援・協賛枠) にご興味あれば info@yasslab.jp までご連絡ください。

  1. ScoutApp - Application Performance Monitoring
  2. Takeyuweb: エンジニアリングをもっと自由に楽しく
  1. このエントリーをはてなブックマークに追加
  2. Star