Ruby
 Computer >> コンピューター >  >> プログラミング >> Ruby

Rails 7 が公開:主な機能と今後の改善点

Rails 7 はすぐそこまで来ています。確定したリリース日はありませんが、クリスマス前に公開される予定なので、それほど長くはありません。この記事の公開時点での最新バージョンは 7.0.0.rc1 です。 、最初のリリース候補です。Basecamp、HEY、Github、Shopify はすべて実稼働環境で Rails 7 アルファを実行しているため、リリース候補でもかなり安定していることが期待できます。

この投稿では、Rails 7 によってもたらされる新機能と変更点のいくつかを見ていきます。

ノードと Webpack は必要ありません

はい、正しく読みました! Rails 7 の JavaScript では NodeJS や Webpack が必要なくなります。また、npm パッケージは引き続き使用できます。

Babel で ES6 をトランスパイルし、Webpack でバンドルするには、多くのセットアップが必要です。 Rails は Webpacker でかなりうまくサポートしていましたが、 gem、これは多くの荷物をもたらし、特にアップグレード可能性を維持しながら、理解して変更を加えるのが困難でした。

rails new で作成された新しいアプリのデフォルトになりました。 importmaps-rails を介してインポート マップを使用することです gem.package.json を記述する代わりに npm を使用して依存関係をインストールします または yarn./bin/importmap を使用します CLI で依存関係を固定 (または固定解除または更新) します。

たとえば、date-fns をインストールするには :

 

これにより、config/importmap.rb に行が追加されます。 のように:

 

JavaScript コードでは、これまでどおりすべてを引き続き使用できます。

 

この設定で留意すべき点の 1 つは、作成した内容とブラウザが取得する内容の間にトランスパイルがないことです。重要なすべてのブラウザがすぐに ES6 をサポートするようになったため、ほとんどの場合、これで問題ありません。

ただし、これは TypeScript や JSX を使用できなくなることも意味します。これらは使用前に JS にトランスパイルする必要があるためです。

したがって、JSX で React を使用したい場合は、別のセットアップ (webpack/rollup/esbuild を使用) にフォールバックする必要があります。

Rails 7 ではこれを行うことができます。必要なのは、選択した戦略を使用した 1 つのコマンドだけです。

 

ターボリンクと UJS はターボとスティミュラスに置き換えられました

Rails 7 で生成されたアプリケーションは、デフォルトで、Turbolinks と UJS の代わりに、Turbo と Stimulus (Hotwire から) を取得します。 Hotwire は、HTML を回線経由で送信することで DOM に高速更新を提供する新しいアプローチです。

データベース層での暗号化

Rails 7 では、encrypts を使用して特定のデータベース フィールドを暗号化済みとしてマークできます。 ActiveRecord::Base のメソッド 。これは、初期セットアップの後、次のようなコードを記述できることを意味します。

 

暗号化された属性は、他の属性と同様に引き続き使用できます。 Rails 7 は、データベースとアプリケーションの間で自動的に暗号化と復号化を行います。

ただし、これには少し癖があります。deterministic: true を渡さない限り、そのフィールドでデータベースをクエリすることはできません。 encrypts のオプション 決定的モードはデフォルトの非決定的モードよりも安全性が低いため、絶対にクエリする必要がある属性にのみ使用してください。

非同期クエリ

load_async が追加されました。 データをクエリしてバックグラウンドで結果を取得するときに使用できるメソッド。これは、コントローラー アクションからいくつかの無関係なクエリを読み込む必要がある場合に特に重要です。次のコマンドを実行できます。

 

これにより、両方のクエリがバックグラウンドで同時に起動されます。したがって、各クエリに 200 ミリ秒かかる場合、データをシリアルにフェッチすると、データのフェッチにかかる合計時間は 400 ミリ秒ではなく、最大 200 ミリ秒になります。

Rails 7 のツァイトヴェルク モード

これは、クラシック ローダーをまだ実行している古いアプリケーションにとっては重大な変更です。すべての Rails 7 アプリケーションは Zeitwerk モードを使用する必要がありますが、切り替えは非常に簡単です。 Zeitwerk アップグレード ガイドの全文をご覧ください。

その他の Rails 7 アップデート

ジョブを無制限に再試行

ActiveJob で :unlimited を渡すことができるようになりました attempts として retry_on のパラメータ 。 Rails は最大試行回数を設定せずにジョブを試行し続けます。

 

名前付きバリアント

ActiveStorage でバリアントに名前を付けることができるようになりました アクセスするたびにサイズを指定するのではなく。

 

HTML 属性へのハッシュ

新しい tag.attributes が追加されました ハッシュを HTML 属性に変換するビューで使用するメソッド:

 

生成します

 

ルビー debug

デバッグの新しいデフォルトが byebug から変更されました debug へ 宝石。

byebug を呼び出す代わりに 、ここで debugger を呼び出す必要があります。 コード内でデバッグ セッションを開始します。

sole を使用して単一レコードをアサートします

レコードをクエリするときに、sole を呼び出せるようになりました。 または find_sole_by (first の代わりに または find_by ) クエリが 1 つのレコードのみに一致することを主張したい場合。

 

関連付けの有無を確認する

where.associated(:association) を使用できるようになりました。 ID の存在を結合して確認するのではなく、関連付けがレコードに存在するかどうかを確認します。

 

コントローラ アクションから生成されたファイルをストリーミングする

send_stream を使用できるようになりました。 コントローラ アクション内で、オンザフライで生成されるファイルのストリーミングを開始します。

 

これにより、ユーザーに即時 (部分的) 応答が提供されるため、ユーザーは何かが起こっていることを知ることができ、Heraku にデプロイする場合にはさらなる利点が得られます。

ファイルはすぐにストリーミングを開始するため、Heraku は接続を終了しません。これは、30 秒以上かかる 1 回限りのファイルを生成するためにバックグラウンド ジョブに頼る必要がないことを意味します。

Rails 7 へのアップグレード

Rails の以前のバージョンと同様に、アップグレードは簡単です。公式アップグレード ガイドはまだありませんが、手順は同じです。

<オル>
  • Gemfile の Rails バージョン番号を変更します (7.0.0.rc1) 公開日現在)、bundle update を実行します。 .
  • bundle exec rails app:update を実行します 。インタラクティブな CLI に従い、必要に応じてファイルを追加、置換、変更します。
  • テストを実行し、すべてが期待どおりに動作することを確認します。
  • まとめ

    バグ修正、機能、変更の完全なリストは、Rails 7 リリース ノートで確認できます。現時点ではこれらは包括的ではありませんが、間もなく更新される予定です。

    Rails 6 以前をまだ実行している場合は、Rails 7 の最終リリースでは、Rails 6.1 は「セキュリティ問題のみ」モードになり、バグ修正は受け取れなくなることに注意してください。これにより、修正も受け取れなくなるため、Rails 5.2 も EOL となります。

    コーディングを楽しんでください!

    追記Ruby Magic の投稿を報道後すぐに読みたい場合は、Ruby Magic ニュースレターを購読して、投稿を 1 つも見逃さないようにしてください。

    Rails 7 が公開:主な機能と今後の改善点

    プルキット ゴヤル

    ゲスト著者の Pulkit は、シニア フルスタック エンジニア兼コンサルタントです。自由時間には、自分の体験をブログに書いています。

    Pukit Goyal によるすべての記事


    1. 学ぶべきレールがたくさんあるので、どこから始めますか?

      Railsコンピテンシーチャートを見たことがありますか? CodeFellowsのBrookRiggioは、現代のRails開発者が知っておくべきすべての概念を示すためにそれをまとめました。ご覧ください: 恐ろしいですね。 あなたを攻撃する準備をしている200本の触手のモンスターのようです。 Railsを学ぶのが恐ろしいのも不思議ではありません。 SQLやDeploymentなどの一部のブランチは、キャ​​リアパス全体である可能性があります。アプリケーションアーキテクチャに何年も費やしても、専門家のようには感じられない可能性があります。 しかし、それは正確です。 このグラフをプ

    2. Hotwire を使用してインタラクティブな Rails アプリをすばやく構築する:初心者ガイド

      Hotwire は現在、すべての Rails 開発者にとってホットなトピックです。Rails を使用している場合は、すでに Hotwire についてよく聞いたことがあるでしょう。 Hotwire は、わずかなコード行でアプリにインタラクティブ性を追加するまったく新しい方法で、HTML を有線で送信することで非常に高速に動作します。つまり、ほとんどのシングル ページ アプリケーション (SPA) フレームワークから手を汚さずに済みます。また、ページの読み込み時間の短縮と対話性を維持しながら、レンダリング ロジックをサーバー上で集中管理することもできます。 この記事では、Hotwire の主な