Rails 8 が公開:主な機能と導入の自由度
Rails 8 がついに登場し、非常にエキサイティングな方法で物事を揺るがしています。すでに Rails コミュニティで活動している場合は、「PaaS は必要ありません」というキャッチフレーズを聞いたことがあるかもしれません。
これは珍しい (しかし驚くべきことではない) 使命です。このリリースの目的は、完全な機能を備えたサービスとしてのプラットフォーム (PaaS) を必要とせずに、Rails アプリのデプロイを容易にすることです。
プラットフォームは、開発者がコードを実行する基盤となるインフラストラクチャを管理せずに、アプリを Web 上で入手できる方法を提供します。 Heroku、Render、Fly、Railway などのビジネスはすべて、Rails コミュニティで人気のある選択肢です。開発者は多くの場合、開発者エクスペリエンス プラットフォームが提供するために、追加のホスティング コストと引き換えに喜んで提供しますが、今回の Rails リリースでは、そのトレードの魅力を少しでも軽減しようとしています。
この記事では、それを可能にした新機能と改善された機能をレビューします。 Solid Cache、Solid Queue、Solid Cable などは Rails 8 の新機能であり、これまで必要だった依存関係の一部 (Redis など) が取り除かれています。現在、Kamal 2 がデプロイメントのデフォルトとなっており、さらに別の gem を必要としない新しい認証ジェネレーターが追加されています。では、本題に入りましょう。
Rails 8 では何が変わりましたか?
Rails (特に Rails 8) が本当に望んでいる プラットフォームの料金を支払うことなく、アプリケーションを運用環境に簡単に出荷できるようになります。 Rails のこのリリースの変更のほとんどは、PaaS を必要とせずに、Rails アプリケーションを自分でホストするのに必要な作業を削減するという、その使命を中心に展開しています。
主な変更点をそれぞれ詳しく見てみましょう。
Redis フリーのキャッシュのためのソリッド キャッシュ
Rails は ActiveSupport を使用します これは、Web アプリのパフォーマンスを向上させるために重要です。歴史的に、人々は高速で信頼性の高い Redis をキャッシュに利用してきました。
Solid Cache は、ActiveSupport 用の Redis フリー キャッシュ ストアとして少し前にリリースされました。 これはしばらくの間 37signals などで使用されており、Rails は現在それをデフォルトの選択肢として推進しています。キャッシュ ストアに RAM ではなくデータベース (デフォルトでは SQLite) を使用するため、通常よりもはるかに多くのキャッシュを保存できるという利点もあります。データベース スペースは RAM よりも安価であるため、キャッシュ システムのバックアップにデータベースを使用するのは RAM を使用するよりも遅くなりますが、より多くのものをより長くキャッシュできる機能により、一部のアプリのパフォーマンスがさらに向上する可能性があります。
このパフォーマンスのトレードオフは、一部のユースケースでは最適ですが、他のユースケースでは理想的ではない可能性があるため、他のキャッシュ ストアのいずれかを使用するのが簡単です。デフォルトで Redis または Memcached の必要性を取り除くことで、Rails が取り組んでいる「PaaS 不要」という使命に一歩近づくことができます。
Redis フリーのバックグラウンド ジョブ用の Solid Queue
Rails が ActiveJob を使用していることはおそらくすでにご存知でしょう。 ライブラリを使用すると、バックグラウンド ジョブの作成と実行が容易になります。キャッシュと同様に、Rails では ActiveJob を動作させるバックエンドを選択できます。 。多くの人は Sidekiq や Good Job を愛していますが、今日のほとんどのオプションには 2 つの問題があります。
- これらは、インポート、管理、そして場合によっては支払いが必要となるもう 1 つの依存関係です
- 彼らは Redis のような別のサービスに頼っています(ホスト、管理、そして場合によっては料金を支払う必要があります)
Solid Queue は、Redis に依存せずにバックグラウンド ジョブを管理することで、これらの両方を解決しようとします。 Sidekiq または Redis に依存する別のキュー プロバイダーを使用している場合、Solid Queue は複雑さを軽減し、ホスティングを容易にする代替手段です。 Solid Cache と同様に、Solid Queue は RAM の代わりにアプリケーションのデータベースを使用してバックグラウンド ジョブを追跡します。これは、依存関係を減らし、本番環境のデプロイメントを簡素化するために、Rails がデフォルトで提供するもう 1 つの機能です。
Redis フリー Web ソケット用のソリッド ケーブル
Rails は Action Cable を使用して、開発者がリアルタイム機能に Web ソケットを簡単に使用できるようにします。歴史的に、これには Redis が必要です。おそらく、これがどこに向かうのか推測できるでしょう!
「Solid」テーマを踏襲し、Rails 8 には別のデフォルトのデータベース支援アダプターが同梱されています。必要はありません ただし、Web ソケットの使用を検討しており、Redis の構成と保守を避けたい場合には、これは優れたファーストパーティ オプションです。 Solid Cache と Solid Queue を併用すると、Solid Cable を使用すると、Redis の必要性がなくなりデータベースに依存するため、PaaS を使用せずに Rails アプリケーションをさらに簡単に出荷できるようになります。
Kamal 2 による導入の容易化
Rails 8 の次の新機能は、Solid アダプターとはまったく異なります。それでも、Kamal (特に Kamal 2) を使用すると、アプリケーションを独自のハードウェアに同梱することがより簡単になります。 Docker によりソフトウェアのモジュール化が容易になったため、言語に関係なく、Docker コンテナを出荷するためのソフトウェアを用意することは完全に理にかなっています。
私の意見では、Kamal は、Rails 8 の残りの部分と組み合わせても、ほとんどのプラットフォームの開発者エクスペリエンスに実際に触れることはできません。それでも、 それははるかに簡単になります。 Rails を使用していない場合でも、ソフトウェアを独自の Web サーバーに配布できます。 PaaS の完全な代替品ではないかもしれませんが、初期セットアップが完了したら、kamal deploy を実行します。 自分でデプロイメントを行うよりも大幅に改善されます。
認証ジェネレータ (Devise なし!)
ユーザーがいる Rails アプリを作成している場合 、おそらく認証が必要になります。これまでのところ、Rails にはフレームワークの一部として認証が含まれていません。コミュニティには、Rails 開発者が認証を作成するのに役立ついくつかの優れたソリューションがあり、その中で最も人気のあるソリューションは Devise です。
Rails 8 には認証ジェネレーターが同梱されています 。これは完全な認証システムではありませんが、重要な部分 (セキュリティなど) を正しく行うには十分です。ログインとユーザーのサインアップ フローを処理するビューを作成するのは開発者の責任ですが、ジェネレーターはセッション、パスワード認証、さらにはパスワード電子メールも処理します。 DHH は、オーセンティケーター内のビューを除外するという選択が、Rails アプリがすべて同じに見えるのを防ぐための意図的なものであることについて少し話しました。
これらの新しいジェネレーターの追加は、アプリケーションの出荷を直接簡素化するものではありませんが、Rails には長らく欠けていた、Web アプリケーションの構築における一般的な問題に対するファーストパーティのソリューションを提供します。
アセット パイプラインのプロペラシャフト
Rails 8 の最大の (内部的な) 変更の 1 つは、デフォルトのアセット パイプラインが Sprockets から Propshaft に移行したことです。 Rails は Sprockets を使用したい場合、または使用する必要がある場合は引き続きサポートしますが、新しい Rails 8 8 アプリケーションはデフォルトで Propshaft を使用します。
プロップシャフトはそうではないという点について非常に意見が分かれています。 アセットのバンドルまたは縮小。 Rails が PaaS を不要にしようとしているのと同じように、複雑なビルド パイプラインも不要にしようとしています。 Rails 8 の他の多くの新しいデフォルトと同様に、古いバージョンの Rails で Propshaft を使用しても、Rails 8 の Sprockets を引き続き使用できます。
SQLite と Rails
SQLite は正確には Rails の一部ではありませんが、Rails はこのリリースで SQLite にさらに依存しています。 SQLite はサーバーレス データベース エンジンであり、Postgres などよりもシンプルです。 Rails アプリケーションが SQLite を使用している場合、Web プロセスとは別にデータベース プロセスを実行する必要はありません。もちろん、これは Rails 8 の使命と非常に一致しており、Web アプリケーションの出荷がより簡単になります。
Rails 8 には SQLite のファーストパーティ サポートが同梱されており、従来のデータベースのニーズを処理し、データベースをサポートする新しい Solid アダプターをサポートするのに十分強力であることが保証されます。
Rails 8 の新機能はすべて、プラットフォームの必要性を軽減することです
既存の Rails アプリを Rails 8 にアップグレードする場合、アップグレードを完了するために行う必要があることはそれほど多くありません。削除されたのはほんのわずかで、主に Active Record で削除されました。 、すでにしばらく前から非推奨の通知がありました。もちろん、「Rails 8 の新機能」のデフォルトをすべて利用して、アプリケーションのデプロイメントを簡素化することもできますが、これはオプションです。
Rails 8 の最大の変更点は、新しい Rails アプリに関するものです。新しい Rails アプリは、デフォルトでバックグラウンド ジョブ用に Solid Queue、キャッシュ用に Solid Cache、Web ソケット用に Solid Cable、アセット パイプライン用に Propshaft、デプロイメント用に Kamal 2 を使用します。
Rails は最近、複雑さを圧縮し、最新の Web アプリを作成するためのフル機能のフレームワークを提供するという使命を担っています。 Rails 8 は作成を超えて前進します ウェブアプリから配送へ 既存のオプションとの互換性を維持しながら、Web アプリを利用できます。
Rails 8 のデフォルトをすべて使用することも、一部を使用することも、まったく使用しないこともでき、その開発者エクスペリエンスを希望する場合はプラットフォームを使用することもできます。しかし、このリリースの目的は、プラットフォームをスキップしてインフラストラクチャの所有権をさらに高めるオプションを提供することです。
この記事を気に入っていただけましたら、Honeybadger ニュースレターに登録して、Ruby と Rails のニュースやチュートリアルを受信箱で直接ご覧ください。
-
Trix および Turbo Frame を使用して Rails で動的テーブル エディタを作成する
この投稿では、Rails アプリケーションに基本的な ActionText テーブル エディタを実装します。次の方法を学習します。 ActionText と Trix は添付ファイルを処理します 独自の Attachable を実装するには と入力し、これを活用して基本的なテーブル エディタを構築します ターボ フレームを使用してテーブルを編集できます ターボは役立つと同時に邪魔にもなります この記事は、2020 年の優れたブログ投稿「Stimulus.js を使用して ActionText にテーブルを追加する」からインスピレーションを得ています。ただし、これは Turbo の出現前に
-
Rubyの実用的なリンクリスト
これは、「Rubyの実用的なコンピュータサイエンス」シリーズの3番目のエントリです。今日はリンクリストについてお話します。 では、リンクリストとは何ですか? 名前が示すように、リンクリストはデータをリスト形式で保存する方法です(ありがとう、キャプテンオブビシャス!)。 「リンクされた」部分は、データがノードに格納され、これらのノードが順番に相互にリンクされているという事実に由来します。 これはアレイとどう違うのですか? リンクリストと配列 リンクリストには、配列とは異なるパフォーマンス特性があります。これが、どちらかを選択する理由の1つです。 これは、リンクリストが配列よりも