これはなに
- 8.0.0 Milestoneを見て気になったものをまとめています
- マイルストーンは先週くらいにできたのですがもうマージされているやつもたくさんあります
- DHHが年末年始にめっちゃ働いている
気になったものたち
- Ruby3.3以上のサポート
- DHHは最初3.3以上で、という気持ちだったんだけど流石にみんな大変やろ、という意見が出て結局リリース時(2024年の予定)にサポートされているRubyのバージョン、つまり3.1以上に落ち着いた
- PR: Bump the required Ruby version to 3.1.0 by byroot · Pull Request #50491 · rails/rails
- ↑のPRでは「メジャーバージョンアップ時にRubyのサポートを落とす」だとRails自体のメンテも大変だしアプリケーション開発者も大変なので、毎回マイナーバージョンアップでもその時サポートしているRubyのバージョンだけサポートするようにしようぜ、という意見が出ている
- ついでにセキュリティフィックスバージョンも落とそうぜ、という意見もある
- このへん最終的にどうなるかわからないけど、Railsのバージョンを上げる会社はRubyのバージョンも上げるのでそんなに影響はない気がしますね
- solid_queue, solid_cache, prop_shaft, kamalがデフォルトに
- Action CableのアダプタのデフォルトをDBにする
- solid_queue, solid_cacheと一緒でredisなしをデフォルトにする方針っぽい
- もともとpostgresqlはアダプタとして使えたけれど、MySQLやsqlite3でも使えるようにしてそれをデフォルトにする、という方針
- ONCEではすでにそれでやっている模様
- 古いブラウザでアクセスしたときに古いよ、と出る機能
- Add allow_browser to set minimum versions for your application by dhh · Pull Request #50505 · rails/rails
- マージ済み
- ユーザエージェントの判別用にgshutler/useragent: HTTP User Agent parser が依存に追加されている
- allow_browserメソッドが追加
- versionsオプションで対象バージョンを追加
- 対象を
:modern
で指定するとSafari 17.2+, Chrome 119+, Firefox 121+, Opera 104+扱いになる - 古いブラウザでアクセスしたときにデフォルトだと public/426.html が表示される
block: -> { redirect_to blocked_path }
みたいなオプションで上書きできる
class ApplicationController < ActionController::Base # Allow only browsers natively supporting webp images, web push, badges, import maps, CSS nesting + :has allow_browser versions: :modern end class ApplicationController < ActionController::Base # All versions of Chrome and Opera will be allowed, but no versions of "internet explorer" (ie). Safari needs to be 16.4+ and Firefox 121+. allow_browser versions: { safari: 16.4, firefox: 121, ie: false } end class MessagesController < ApplicationController # In addition to the browsers blocked by ApplicationController, also block Opera below 104 and Chrome below 119 for the show action. allow_browser versions: { opera: 104, chrome: 119 }, only: :show end
- 認証機能の追加
- 今のところ lazaronixon/authentication-zero: An authentication system generator for Rails applications. のようなコードジェネレータを想定している模様
- lograge的な構造化したログ出力をする機能
Action Notifier(プッシュ通知用コンポーネントの追加)
- Railsでプッシュ通知を簡単に実装できるようになる
- ↑の準備としてPWA用のマニフェストをデフォルトで生成するようになった (こちらはマージ済み)
- Rubocopの追加
- rails/rubocop-rails-omakase: Omakase Ruby styling for Railsが自動でGemfileに入る
- LayoutやStyleなどの、みんなそれほど文句がなさそうなCopだけがデフォルト有効でほかは無効になっている
- standardrb/standard: Ruby's bikeshed-proof linter and formatter 🚲 はどう?という議論があったがDHHは採用しなかった
- マージ済み
- brakemanの追加
- brakemanが自動でGemfileに入る
- マージ済み
- GitHub Action用のファイルの生成
- rubocop, brakeman,
rails test test:system
を実行するGitHub Actionsのworkflowが追加される - マージ済み
- rubocop, brakeman,
- アクセス制限機能の追加
- rails/kredis: Higher-level data structures built on Redisを利用している
- マージ済み
- kredis側のPR
- kredis1.7.0以上で利用できる
- redisを利用した簡単なカウンタによるアクセス制限機能、という印象
- 最初にカウントしてから時間を計測して、withinの時間が過ぎたらリセットされるカウンタ
class SessionsController < ApplicationController rate_limit to: 10, within: 3.minutes, only: :create end class SignupsController < ApplicationController rate_limit to: 1000, within: 10.seconds, by: -> { request.domain }, with: -> { redirect_to busy_controller_url, alert: "Too many signups!" }, only: :new end