Railsプロジェクトは10月5日(現地時間)、Railsのメジャーバージョンアップ版「Rails 7.1」をリリースしました(公式ブログ)。このリリースでは、Rails 7.0以降、800人以上の貢献者によって5,000を超えるコミットが行われています。
Rails 7.1では、新規にアプリケーションを生成する際に、Docker関連ファイルが作成されるようになりました。作成されたファイルは、Dockerを使用して本番環境にRailsアプリケーションをデプロイするための基本的なセットアップとして機能し、開発目的ではないとのことです。
docker build -t app . docker volume create app-storage docker run --rm -it -v app-storage:/rails/storage -p 3000:3000 --env RAILS_MASTER_KEY=app
また、開発者が独自の認証システムを構築するのに役立つ新機能が追加されています。データベースに保存する前に属性を正規化するのに便利なnormalizes
や、ユーザ認証の際に一般的なタイミング攻撃から保護するauthenticate_by
、パスワードリセットなどトークンを必要とする機能ためのgenerate_token_for
、パスワード更新時に現在のパスワードを自動的に検証できるhas_secure_password
が利用可能となっています。
has_secure_passwordの使用例:
# Schema: User(name:string, password_digest:string)
class User < ActiveRecord::Base
has_secure_password
end
user = User.new(name: "rafael", password: "railsrocks", password_confirmation: "railsrocks")
user.save # => true
user.update(password: "pwn3d", password_challenge: "") # => false, challenge doesn't authenticate
user.update(password: "railsGetsEvenBetter", password_challenge: "railsrocks") # => true
Active Recordの非同期クエリが拡充され、複数の遅いクエリをリクエストの処理を進めながら並行して実行することが容易になりました。非同期集計(count、sumなど)、単一レコードを返すメソッド、Relation以外のメソッドが追加されています。
- async_count
- async_sum
- async_minimum
- async_maximum
- async_average
- async_pluck
- async_pick
- async_find_by_sql
- async_count_by_sql
Trilogy MySQLアダプタの組み込みサポートや、複合主キーのサポート、大量のジョブを同時にエンキューするperform_all_later
の追加、config.autoload_lib
とconfig.autoload_lib_once
の導入によるオートロードの強化、JavaScriptランタイムBunのサポートなど、さまざまな新機能が追加されています。
Ruby on Rails 7.1の新機能についてはリリースノートでも確認可能です。