Rails 8 リリースノートについてまとめたものを備忘録として残しておく
Rails 8 系での新機能および変更点
Kamal(Docker コンテナのデプロイツール)
Kamalという Docker コンテナを本番環境に簡単にデプロイするツールが同梱されるようになった
※Rails アプリケーションのデプロイで使用されていた Capistrano をコンテナように置き換えたツールのイメージ
Thruster(HTTP/2 プロキシサーバ)
Rails アプリケーションの Docker ファイルに、Thruster と呼ばれるプロキシサーバの設定が含まれ、Puma の前段に配置するようになった
これにより、Nginx など別の Web サーバーを用意する必要がなくなる
- Thrusterの機能
- HTTP/2のサポート
- Let’s Encrypt による自動化された TLS 証明書の管理
- 公開アセット(JavaScript、CSS、画像など)の HTTP キャッシュ
- X-Sendfile のサポートと圧縮
Solid Cable
Solid Cable によって Redis を使用せずに WebSocket を使用したリアルタイム機能を使用することができる
Solid Cache
Solid Cache によってメモリを使用した Redis や Memcached よりも長期間にわたって大容量のアプリケーションのデータのキャッシュを行うことができる
Solid Queue
Solid Queue は、Redis を使用した Sidekiq や Resque といったジョブ実行システムと同様に、単純なジョブのエンキューや実行だけでなく、遅延実行、同期処理の制御、定期(繰り返し)実行、キューの停止、優先順序づけなど本格的な実用に耐えるものが実現できる
Solid Queue では、以下の4種類のアクター(Actor)がプロセスとして実行される
※英語で複数形になっているものは複数実行され、The がついているものは1つのみ実行
- ワーカ(Workers)
- キューからジョブを取り出し実行を行う
- solid_queue_ready_executions テーブルに登録されたジョブに対して操作を行う
- キューからジョブを取り出し実行を行う
- ディスパッチャ(Dispatchers)
- スケジューリングされたジョブを選択し、ワーカが実行できるようにする
- solid_queue_scheduled_executions テーブルから solid_queue_ready_executions テーブルにジョブを移動する
- スケジューリングされたジョブを選択し、ワーカが実行できるようにする
- スケジューラ(The scheduler)
- 定期(繰り返し)実行の際にジョブをエンキューする
- スーパーバイザ(The supervisor)
- ワーカとディスパッチャを設定に基づいて実行し、動作状況をハートビートで監視し、必要に応じて停止と起動を行う
Propshaft で Sprockets を置き換え
Rails 8 で新しく生成されたアプリケーションのアセットパイプラインが、これまで長い間使用されていた Sprockets から Propshaft に変更された
Propshaft はアセットのロードパスの設定と、Digest の付与、開発用のサーバーといった単純な機能に絞ることで、実装としてはよりシンプルで高速に動作する
認証機能の生成
bin/rails generate authentication
で認証機能の生成が可能になった
これらは Rails 5 で導入された has_secure_password や Rails 7.1 で導入された authenticate_by を拡張したもので、以下のコードを生成する
- Sessionモデル
- ユーザID, トークン, IPアドレス, User-Agent などセッション関連
- Userモデル
- メールアドレス, ダイジェスト化されたパスワードなどユーザ関連
- PasswordsController と view ファイル, PasswordsMailer
- パスワードリセット機能
- SessionsController と view ファイル
- ログイン、ログアウトの機能
- Authentication concern
- セッション情報を元に、ログイン関連メソッドをコントローラに提供するモジュール
- 上記に関連したマイグレーションファイル
Devise など外部のライブラリを使用しなくても、簡単なパスワードログイン機能を Rails だけで実現可能となった