はじめに
2021年9月15日、Rails 7 のアルファ版がリリースされました。
通常、Rails のアルファ版リリースは行わないのですが、フロントエンドに大きな変更が加わることによって、慎重に検証する必要があると判断したみたいです。
ちょうど社内で Rails 7 についてアウトプットする場があり、良い機会なので情報をまとめてみたいと思います。
1. フロント面のリニューアル
まず Webpacker が廃止され、フロント面がリニューアルされます。
ES6 / ESM のブラウザサポートの進歩、HTTP/2 の普及、importmap の新標準に対応するためです。
具体的には、Turbllinks と Rails UJS が Stimulus と Turbo の Hotwire コンビに置き換わります。
node_modules、bundler の設定に依存せず、フロントの開発にありがちな問題も発生しません。
また、Rails と JavaScript + CSS bundler の統合も劇的に改善されたそうです。
Rails の新しい JavaScript と CSS で起動できる2つの Gem を通じてアプリケーションを起動できたり、importmap で始まるアプリケーションを esbuild、rollup.js、Webpack、Tailwind CSS、 PostCSS、 Dart Sass、 Bootstrap で変更することが簡単にできるようになっています。
2. Active Record の実行時暗号化機能
Active Record に実行時暗号化機能が追加されます。
HEY (Basecamp のサービス) で用いられている暗号化属性を抽出し、 Active Record に追加することによって、実行時の暗号化も可能になりました。
これはハッカーが DB やそのスナップショット、アプリケーションの log にアクセスした場合、暗号化により情報を保護することができます。
しかしより重要な点は、Active Record Encryption を使用することで、コードレベルでアプリケーションの機密情報を定義できることです。
例えば、暗号化されたデータを保存する監査可能なアプリケーションを構築することができます。
詳細を知りたい方は、こちらを確認してください。
https://edgeguides.rubyonrails.org/active_record_encryption.html
3. ActiveRecord で生成されたクエリにコメントが追加
Marginalia により、ActiveRecord で生成されたクエリにコメントが追加されるようになりました。
デフォルトでは各クエリの最後に、アプリケーション、controller、および action の名前がコメントとして追加されます。
4. 非同期クエリの読み込み速度向上
Controller で関連性のない2つのクエリを読み込む必要がある場合、Relation#load_async によって同時にロードができるようになりました。
それぞれ0.1秒かかる複雑な3つのクエリがある場合、以前は1つを実行するのに0.3秒、計0.9秒必要でした。
ただこの方法だと並列で実行することができるので、計0.3秒で処理が完了します。
5. Zeitwerk の一元化
かつての const_missing では、さまざまな癖や欠陥した機能を伴っていましたが、Zeitwerk コードローダーに一元化されました。
6. その他ハイライト
- コンピューターの性能向上により、大規模なアプリケーション以外では、Spring はあまり意味をなさなくなったため、デフォルトでオフになりました。
- ActionController:Live#send_stream は、Controller の Action でオンザフライ生成されるファイルを簡単にストリーミングできるようになりました。
- 並列化されたテストは、CPU コア数とテスト数を比較し、それにおおじて並列化の規模を調整できるようになりました。
- Active Storage はより高速で安全な libvips をデフォルトの Variant プロセッサとして使用するようになりました。
さいごに
いかがでしたでしょうか。
フロント面が大幅なリニューアルとなり、Rails 7 に期待を膨らませている方も多いと思います。
Rails 7 は年内のリリースを目指しているみたいなので、アルファ版を用いて新機能のテストにドンドン協力していきましょう!