Rails の新しいバージョンがもうすぐ登場します。現時点では発売日は未定ですが、クリスマス前には発売される予定です。この記事の公開時点での最新バージョンは 7.0.0.rc1 です。おい、 ギットハブ、Shopify、および ベースキャンプ すべて実稼働環境で Rails 7 アルファを実行しているため、リリース候補であっても安定していることが期待できます。
この投稿の目的は、Rails 7 によってもたらされる新機能と変更点のいくつかを検討することです。
Ruby on Rails 7 に何か新しいことはありますか?
最新の Ruby on Rails バージョンには、驚くべきエキサイティングな機能がいくつかあります。 Rails作成者によると デビッド・ハンソン, このバージョンには、開発者が最新の Web アプリケーションを作成するために必要なものがすべて含まれています。ハンソン氏によると、このリリースは、5つの異なる分野で同時に進められた長年の進歩の集大成だという。 Ruby on Rails 7 が提供するものを見てみましょう
1. Webpack や Node は必要ありません。
開発者が npm パッケージを使用するために Webpack や Nodejs を持っている必要はありません。 ES6 と Babel を翻訳してバンドルするには、多くの手順が必要になります。このタスクには Webpacker gem を使用できますが、追加の荷物が発生し、変更するのが困難でした。
importmaps-rails gem により、開発者はマップをインポートできるようになりました。依存関係を更新、固定、または固定解除するには、package.json のコードを記述する代わりに ./bin/importmap を使用できます。
たとえば、date-fns をインストールするには:
$ ./bin/importmap ピン date-fns
これにより、config/importmap.rb に次のような行が自動的に追加されます。
「date-fns」内、「https://ga.jspm.io/npm:[email protected]/esm/index.js」
そして、JavaScript では、これまでと同じようにコードを書き続けます。
import { formatDistance, subDays } from 'date-fns'
formatDistance(subDays(new Date(), 3), new Date(), { addSuffix: true })
//=> 「3日前」
この構造を使用する場合は、作成した内容がブラウザで認識されるものには反映されないため、この点に留意する必要があります。現在、ほとんどのブラウザが ES6 をサポートしているため、これは問題ありません。 JS への変換は、JSK と Typescript の場合にのみ必要です。
たとえば、開発者が JSX で React を使用したい場合は、webpack、esbuild、および rollup を使用する必要があります。
これは、Rail 7 を使用するとすぐに実行できます。選択した戦略のいずれかを使用して、次のコマンドを実行するだけです。
$ ./bin/rails javascript:install:[esbuild|rollup|webpack]
2. 暗号化されたデータベース層
Rail 7 では、開発者は ActiveRecord::Base の encrypts メソッドを使用して特定のデータベース フィールドを暗号化できます。初期設定を行った後、次のコードを記述する必要があります。
クラス メッセージ < ApplicationRecord
暗号化:テキスト
終わり
暗号化された属性と他の属性の間に違いはありません。 Rails 7 フレームワークは、データベースとアプリケーションを自動的に暗号化および復号化します。
ただし、deterministic: true オプションを encrypts メソッドに渡す場合、フィールドのデータベースをクエリすることはできません。結果として、決定論的モデルは他のモードに比べて安全性が低いため、通常は緊急時にのみ使用されます。
3. 非同期クエリ
開発者がデータをクエリするときに、load_async メソッドを使用できるようになりました。複数のクエリを一緒に尋ねると、時間を節約できます。これを使用して以下を実行できます。
def PostsController
デフォルトインデックス
@posts = Post.load_async
@categories = カテゴリ.load_async
終わり
終わり
2 つのクエリが同時に実行されます。つまり、各クエリに 200 ミリ秒かかった場合、2 つの結果をフェッチする合計時間は 400 ミリ秒ではなく 200 ミリ秒になります。
4. アプリケーションは Zeitwerk モードでのみ実行可能です。
Rail 7 の Zeitwerk モードがすべてのアプリケーションで利用できるようになります。経営陣は、この変革が開発者にとってスムーズに行われることを保証しています。 Ruby on Rails コードローダー Zeitwerk。これにより、開発者はプロジェクトからモジュールやクラスを簡単にロードできるようになります。
これは、gem の依存関係、プロジェクト、アプリケーションなどを起動するために使用されます。インフレクター、構成、ロガーはすべて、各ローダーに固有です。 Zeitwerk モードとクラシック モードの唯一の違いは、より優れた読み込み戦略が提供されることです。
5. 現在、Stimulus と Turbolinks が UJS と Turbolinks に取って代わります。
Rails 7 アプリケーションには、デフォルトで Stimulus と Turbo (Hotwire から) が付属するようになりました。 Hotwire では、JSON ではなく HTML がネットワーク経由で送信されるため、開発者は最小限の JavaScript で Web アプリケーションを構築できます。
その結果、ページは迅速に読み込まれ、テンプレートはサーバー上で同時に実行され、開発者は生産的な開発エクスペリエンスを得ることができます。 Turbo を使用すると、ページの変更を高速化し、複雑なページをコンポーネントに合理化し、WebSocket 経由で更新をストリーミングできます。
Hotwire と Turbo はどちらもハイブリッド テクノロジーです。 iOS および Android デバイスに統合できます。 Turbo と組み合わせた Stimulus は、高速で魅力的なアプリケーションを構築するためのソリューションを提供します。
6. 単一レコードでクエリをインライン化するには、sole を使用します。
クエリが単一のレコードに一致することをアサートする場合、開発者は、sole または find_sole_by の代わりに first または find_by を使用できるようになりました。
Product.where([“価格 = %?”, 価格]).sole
# => ActiveRecord::RecordNotFound (指定された価格の製品がない場合)
# => # (指定された価格の製品が 1 つの場合)
# => ActiveRecord::SoleRecordExceeded (指定された価格の製品が複数ある場合)
user.api_keys.find_sole_by(キー: キー)
# 上記と同様
7. ストリーム生成ファイルはコントローラーのアクションで処理できます。
Rail on Ruby 7 は、コントローラー アクション内で send_stream を使用して、その場で生成されるファイルを合理化します。
send_stream(ファイル名: “subscribers.csv”) は |stream| を実行します
stream.write “email_address,updated_at\n”
@subscribers.find_each は |subscriber| を行います
stream.write “#{subscriber.email_address},#{subscriber.updated_at}\n”
終わり
終わり
Heroku にデプロイすると、開発者は即時または部分的な応答を受け取り、何かが起こっていることを知ることができます。
8. 名前付きのバリアント
Ruby on Rails 7 は、ActiveStorage を使用した命名バリアントをサポートしています。
結論
Rails 7 リリースノートには、バグ修正、機能、変更の完全なリストが記載されています。現時点では包括的なものではありませんが、近日中に更新される予定です。
Rails 7 の最終リリースで Rails 6 以下をまだ実行している場合、Rails 6.1 はバグ修正を受け取らないことに注意してください。 Rails 5.2 の EOL は、更新を受け取らないため、サポートも終了します。
コーディングを楽しんでください! 接触 レールカーマ 詳細については!