Rails 6.0.1がリリース!修正を追ってみました

現地時間11/5のリリースでした。そういえば昨日Dockerでrails newしてたら6.0.1だったような気がしてましたが、見返したら本当でした。

せっかくなので、これまで週刊Railsウォッチの「先週の改修」で追ったプルリクもたどってみました。全変更履歴だと多すぎてつらいので、commits/v6.0.1/activesupportのようにライブラリごとに履歴を追う方がやりやすいことがだんだんわかってきました。

ほとんどがバグ修正でした。セキュリティ修正はchangelogレベルでは見当たりません。

Active Support

#37494
ActiveSupport::SafeBufferEnumeratorのメソッドをサポート(ウォッチ20191028
#37085
Redisのキャッシュストアが「max number of clients reached」時に安全にfailするよう修正(ウォッチ20191007
#37587
メモリキャッシュストアから返された値を改変するとキャッシュされた値まで改変される問題を修正
@8237c4d
デフォルトのinflectorをzeitwerkモードでオーバーライド可能になり、ガイドも更新(ウォッチ20191105
# config/initializers/zeitwerk.rb
Rails.autoloaders.each do |autoloader|
  autoloader.inflector.inflect(
    "html_parser" => "HTMLParser",
    "ssl_error"   => "SSLError"
  )
end
#37178など
Range#===Range#include?Range#cover?を開始値や終了値の省略に対応(ウォッチ20190729
#37114
Process#clock_gettime CLOCK_PROCESS_CPUTIME_IDをSolarisで無効に(ウォッチ20190909

Active Record

#37525
PostgreSQLのリードオンリークエリでCTE(Common Table Expressions)を利用できるようになった
#37511
関連付けリレーションでのインスタンス作成でunscopeが効くように修正(ウォッチ20191028
#37434
find_in_batchesの停止が早すぎるエッジケースを修正(ウォッチ20191021
#37295
カスタムバリデーションのコンテキストでautosaveされた関連付けが常にバリデーションされるよう修正(参考: ウォッチ20191015
#37328
sql.active_record通知のペイロードに:connectionを含めた
@39730bd
after_commitコールバック内でのロールバックで、コミット済みのレコードのステートをロールバックしないよう修正
#37235
eager_load時のjoinsの順序をできるだけ維持するよう修正(参考: ウォッチ20191015
#37240
リードオンリー接続でDESCRIBEクエリを利用できるようになった
#37153
inspectされたレコードがマーシャリングされないことがあったのを修正
36998など
コネクションプールreaperのスレッドがプロセスのfork再度spawnされる問題を修正し、forkしたプロセスのアイドリングコネクションがreaperで処理されないようになった(ウォッチ20190826など)
#36985
ActiveRecord::Relation#takeの結果のメモ化がActiveRecord::Relation#resetActiveRecord::Relation#reloadで正しくクリアされるよう修正(ウォッチ
#37465
MySQL 8.0で導入されたprimary_keysforeign_keysのパフォーマンスリグレッションを修正
#37154
insertinsert_allupsertupsert_allでクエリキャッシュがクリアされるよう修正(ウォッチ20190917
@66bc2ff
connected_toからwhile_preventing_writesを直接呼べるようになった

アプリケーションの作者がデータベース切り替えミドルウェアを用いてconnected_toで明示的に呼び出したい場合がある。アプリの書き込みをオフにしてconnected_to(role: :writing)を呼ぶまでオンにしないようにできる。
今回の変更では、書き込みを許可したいロールが書き込みを行うことを前提とすることでアプリを修正できるようにした(書き込みを明示的にオフにしている場合を除く)。

#36932
mysql2アダプタでファイルソート中にクエリが終了するエッジケースでのActiveRecord::StatementTimeoutによるエラー検出を改善

Action View

@b425af0
IE 9互換のためUJSでElement.closest()を回避(ウォッチ20191007

Action Pack

#36283
ActionDispatch::SystemTestCaseActionDispatch::IntegrationTestではなくActiveSupport::TestCaseを継承するようになり、システムテストでジョブを実行できるようになった
#36996など
登録済みMIMEタイプにフラグを追加できるようになった(ウォッチ20190902
Mime::Type.register "text/html; fragment", :html_fragment

Active Storage

@06f8baf:
ActiveRecord::RecordNotFoundエラーでActiveStorage::AnalyzeJobsをdiscardするようにした
#34827
サービスにアップロードする前にblobがデータベースに常に記録されるようになったことで、生成されたblobのキーが衝突してデータ喪失につながる可能性が修正された

Railties

@3ac9e22
zeitwerk:check rakeタスクがアプリのルートディレクトリの外のファイルもレポートするようになった
#37102
eventedファイルアップロードチェッカーで発生する可能性のあるエラーを修正(ウォッチ20190930
#37053
パラレルテスト機能で生成されたSQLite3データベースファイルが新規アプリの.gitignoreにデフォルトで含まれるようになった
@04cfbc8
tmp/pidsに.keepファイルを生成し、rackupでもサーバーを起動できるよう修正

おたより発掘

関連記事

クジラに乗ったRuby: Evil Martians流Docker+Ruby/Rails開発環境構築(翻訳)

Rails 6のB面に隠れている地味にうれしい機能たち(翻訳)

デザインも頼めるシステム開発会社をお探しならBPS株式会社までどうぞ 開発エンジニア積極採用中です! Ruby on Rails の開発なら実績豊富なBPS

この記事の著者

hachi8833

Twitter: @hachi8833、GitHub: @hachi8833 コボラー、ITコンサル、ローカライズ業界、Rails開発を経てTechRachoの編集・記事作成を担当。 これまでにRuby on Rails チュートリアル第2版の監修および半分程度を翻訳、Railsガイドの初期翻訳ではほぼすべてを翻訳。その後も折に触れて更新翻訳中。 かと思うと、正規表現の粋を尽くした日本語エラーチェックサービス enno.jpを運営。 実は最近Go言語が好きで、Goで書かれたRubyライクなGoby言語のメンテナーでもある。 仕事に関係ないすっとこブログ「あけてくれ」は2000年頃から多少の中断をはさんで継続、現在はnote.muに移転。

hachi8833の書いた記事

夏のTechRachoフェア2019

週刊Railsウォッチ

インフラ

ActiveSupport探訪シリーズ