Tech Racho エンジニアの「?」を「!」に。
  • Ruby / Rails関連

速報: Ruby on Rails 6.1がリリースされました

12/09にRails 6.1が正式にリリースされました🎉。

お気づきの点がありましたら@hachi8833までお知らせください🙇。

追記(2020/12/15): Railsガイドにも6.1リリースノートと6.0->6.1アップグレードガイドが掲載されました。

6.1の概要

何度も引用して恐縮ですが、@willnetさんによる以下のスライドとGistが概要を押さえるのに便利だと思います。

今回のリリース情報でフィーチャーされている機能

  • マルチプルDB機能の強化
    • データベース単位でのコネクション切り替え
    • 水平シャーディング
    • その他の各種強化
  • 関連付けのstrict loading
  • delegated typing
  • 関連付けをジョブで非同期削除可能に
  • ActiveModel::Error
  • Active Storageの強化
  • 特定のdeprecation warning発生時にエラーを発生するオプション
  • 各種パフォーマンス向上
  • 各種バグ修正
  • 「クラシック」オートローダーが非推奨化(今後はZeitwerkに)
  • その他多数の改修

Rails 6.1のChangelog

Action Pack
47件(うち非推奨機能の削除約2件、機能の非推奨化約1件)
Action View
50件(うち非推奨機能の削除約24件、機能の非推奨化約1件)
Active Record
142件(うち非推奨機能の削除約10件、機能の非推奨化約4件)
Active Model
6件
Active Support
56件(うち非推奨機能の削除約13件、機能の非推奨化約4件)
Active Storage
32件(うち非推奨機能の削除約4件、機能の非推奨化約4件)
Active Job
16件
Action Mailer
4件
Action Mailbox
9件
Action Cable
5件
Action Text
5件

なお、この中でActive Supportのrequire_dependency:zeitwerkモードではobsolete扱いとしており、まだ非推奨化はされていないものの今後は順次利用しないようにして欲しいという記述が目に止まりました。

Rails 6.0->6.1アップグレードガイド(edge)の要点

  • Rails.application.config_forの戻り値のハッシュをStringキーで参照する機能がサポート終了(edgeガイド
  • レスポンスのContent-Typeヘッダーが6.0と異なる場合がある(respond_to#anyを使う場合など)(edgeガイド
  • ActiveSupport::Callbacks#halted_callback_hookの第2引数にコールバック名を書けるようになった(edgeガイド
  • コントローラ内のヘルパー読み込みにrequire_dependencyが使われなくなったことによる注意事項(edgeガイド
  • HTTPからHTTPSへのリダイレクトで使われるデフォルトHTTPステータスコードが308に変わった(edgeガイド
  • Active Storageでimage_processing gemが必須になった(edgeガイド

現在のedgeアップグレードガイドには記載されていませんが、@willnetさんのGistにある「CSRFトークンのエンコード形式の変更」「ActiveRecordのmergeメソッドの挙動変更」も6.1へのアップグレードの場合に念のためチェックが必要そうです。

参考: RailsDiff

素のRailsアプリのバージョンごとのコンフィグdiff情報については以下のサイトでおおよそを確認できます(なおこのサイトはHTTPS化されていません)。

railsdiff/railsdiff - GitHub

おまけ: 6.1でrails new

Rails 6: Docker/docker-compose/dipで`rails new`力を取り戻す

記念写真を撮りたかったので、上の記事で作っておいた以下のリポジトリを元にRails 6.1アプリをサンプルとして作ってみました。

hachi8833/rails6_docker_quicksetup_sqlite3 - GitHub

  • リポジトリをクローンする
  • docker-compose.ymlでRubyを最新バージョンにする
# #L
x-var: &APP_IMAGE_TAG
  "my_app:1.0.0"
x-var: &RUBY_VERSION
+ "2.7.1-slim-buster"
+ "2.7.2-slim-buster"
x-var: &NODE_MAJOR
  12
x-var: &YARN_VERSION
  1.22.4
  • dipがインストールされていれば、後はdip provisionを実行するだけでrails newも含めて完了します。

docker-composeを便利にするツール「dip」を使ってみた

  • 仕上げに、lvh.meで参照するのであれば、config/environments/development.rbでRails.application.configureブロック内に以下の一行を追加します。
Rails.application.configure do
  # (略)
 config.hosts << "lvh.me"
  # (略)
end
  • dip rails sを実行し、ブラウザでlvh.me:3000を開きます。

Pumaの起動メッセージが少し賑やかになっていますね。

開始から10分かからずにrails newできました。次のRuby 3.0が楽しみです。


  • お知らせ: TechRachoではRubyやRailsの最新情報などの記事を平日に公開しています。TechRacho記事をいち早くお読みになりたい方はTwitterにて@techrachoのフォローをお願いします。また、タグやカテゴリごとにRSSフィードを購読することもできます(例:週刊Railsウォッチ

CONTACT

TechRachoでは、パートナーシップをご検討いただける方からの
ご連絡をお待ちしております。ぜひお気軽にご意見・ご相談ください。