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

Ruby on Rails 8 徹底解説:新機能と拡張機能のすべて

Rails 8 の最初のベータ版が正式にリリースされ、魅力的な新機能、バグ修正、改善が多数含まれています。このバージョンは Rails 7.2 の基盤の上に構築されており、Rails 開発をさらに生産的で楽しいものにするための新機能や最適化が導入されています。

主なハイライトとしては、Kamal 2 との統合による手間のかからないデプロイ、新しいデフォルトアセットパイプラインとしての Propshaft の導入、そして Active Record の大幅な強化が挙げられます。さらに Rails 8 では SQLite 統合のアップグレードも数多く行われ、SQLite が本番環境で実用的な選択肢となりました。

それでは、Rails 8 が提供するすべての機能を見ていきましょう!

Kamal 2 と Thruster による手軽なデプロイ

Rails 8 では、Kamal 2 と Thruster を活用することで、アプリケーションのデプロイがこれまで以上に簡単になります。

Kamal 2 を使えば、クラウド VM、ベアメタルサーバー、VPS 環境への迅速かつ簡単なデプロイが可能になり、マネージドクラウドサービスや PaaS(Platform as a Service)プラットフォームへの依存を減らせます。

コマンド1つ(kamal setup)を実行するだけで、標準的な Linux マシン上に本番環境レディの Rails 環境を構築でき、デプロイが簡単かつコスト効率の良いものになります。

Kamal 2 はまた、Rails 向けに特別に開発されたカスタムプロキシである Thruster とも統合されています。これにより、ゼロダウンタイムデプロイ、HTTP/2 サポート、Let's Encrypt による自動 SSL 設定、Gzip 圧縮、そして複雑な設定なしで1台のサーバーに複数アプリをホストすることが可能になります。

Kamal 2 と Thruster の組み合わせにより、Rails 8 ではアプリのデプロイがかつてないほど容易になりました。もし別のデプロイ環境を使いたい場合は、--skip-kamal フラグを使用してオプトアウトし、既存のワークフローを維持することもできます。

Solid アダプタによるより軽量な Rails デプロイ

Rails 8 の大きな改善点のひとつは、Web アプリケーションに求められる一般的な要件を実現するために必要な追加サービスの数を減らし、デプロイをシンプルにしたことです。

従来、ジョブキュー、キャッシュ、pub/sub メッセージングなどの機能が必要な場合、PostgreSQL のようなデータベースに加えて、補助的な機能のために Redis を組み合わせて使うのが一般的でした。

Rails 8 では、3つの新しいデータベースバックエンドのアダプタ——Solid Cable、Solid Cache、Solid Queue——のおかげで、これらすべてを SQLite だけで処理できるようになりました。

  1. Solid Cable は、本番環境における Rails の新しいデフォルト Action Cable アダプタであり、Redis への依存をなくすことができます。pub/sub サーバーとして機能し、SQLite を使った高速ポーリングによって、アプリと接続されたクライアント間でメッセージを中継します。ポーリング方式ではありますが、ほとんどの状況で Solid Cable のパフォーマンスは Redis に匹敵します。

  2. Solid Cache は、キャッシュに RAM の代わりにディスクストレージを使用することで、Redis の必要性を置き換えます。このアプローチにより、パフォーマンスを犠牲にすることなく、より大規模でコスト効率の高いキャッシュを実現し、長期間の保持とより多くのリクエスト処理が可能になります。暗号化ストレージや保持ポリシーにも対応しており、プライバシー要件にも応えられます。

  3. Solid Queue は、Active Job のバックグラウンド処理において Redis を置き換えるもので、FOR UPDATE SKIP LOCKED メカニズムを使用して効率的にジョブを処理します(PostgreSQL、MySQL、SQLite に対応)。同時実行制御、リトライ、定期ジョブといった必須機能を備えており、すでに HEY で実績を上げており、1日あたり2,000万件のジョブを管理しています。

これら3つのアダプタは、シンプルな考え方に基づいて設計されています。それは「最新の SSD や NVMe ドライブは高速すぎて、以前はインメモリソリューションが必要だった多くのタスクを十分に処理できる」というものです。こうした高速ドライブを活用することで、Rails は Redis のような RAM ベースの別ツールを必要としなくなりました。

SQLite がついに本番環境へ

Rails 8 では、SQLite アダプタと Ruby ドライバへの大規模な改良により、SQLite は軽量な開発ツールから本番環境で信頼できる選択肢へと進化しました。

前述の Solid アダプタの導入により、SQLite は Action Cable、Rails.cache、Active Job を効果的に支える能力を持ち、プロトタイプやテスト環境にとどまらない役割を果たせるようになりました。

Rails 8 における SQLite 統合の主な改善点は以下の通りです。

  • create_virtual_table を使用した全文検索と仮想テーブルがサポートされました。
  • アダプタがフィクスチャの一括挿入に対応し、データシーディングのパフォーマンスが向上しました。
  • トランザクションがデフォルトで IMMEDIATE モードになり、同時実行性が向上しました。
  • SQLite3::BusyExceptionActiveRecord::StatementTimeout に変換することで、エラーハンドリングが強化されました。

Propshaft によるアセットパイプラインの新時代

Rails 8 では、長年使われてきた Sprockets システムに代わり、Propshaft が新しいデフォルトのアセットパイプラインとして導入されました。Sprockets は10年以上にわたって Rails 開発者に貢献してきましたが、JavaScript ビルドツールの爆発的な普及やモダンブラウザの進化以前の時代に設計されたものでした。

Propshaft は、今日の開発者のコアなニーズを中心とした、よりシンプルでモダンなアセット管理のアプローチを体現しています。その目的は明快です。アセットへの明確なパスを提供し、キャッシュ用のダイジェストスタンプを適用することです。

数多くの追加タスクを担っていた Sprockets とは異なり、Propshaft は本質的な部分だけに焦点を絞っています。これは、アセットパイプラインをリーンに保つという新しい Rails の哲学に自然に適合しています(複雑な JavaScript の処理は Esbuild や Vite といった専用ツールに任されます)。

シンプルになった組み込み認証

Rails は長年にわたって認証の重要なコンポーネントを積み重ねてきました。Rails 5 の has_secure_password から始まり、Rails 7.1 では normalizesgenerates_token_forauthenticate_by が追加されました。

Rails 8 では、これらすべてのコンポーネントが統合され、安全なセッションベースの認証システムを構築するためのわかりやすい出発点が提供されます。

コマンドを1つ実行するだけで、データベースバックエンドのセッションとパスワードリセット機能を備えた認証システムに必要なものすべてをセットアップできます。

このコマンドは、モデル、コントローラ、メーラー、ビューといった主要なファイルを生成します。

これにより、安全で本番環境対応の認証への近道が開けます。あとは、アプリケーションのニーズに合わせたユーザーサインアップフローを統合するだけです。

新しい script フォルダとジェネレータ

Rails 8 では、データマイグレーション、クリーンアップタスク、その他のユーティリティ操作など、一度きりまたは汎用的なスクリプトを格納するための新しい script フォルダが導入されました。この追加により、スクリプトを整理整頓し、メインのアプリケーションロジックから分離して管理できます。

スクリプト作成を容易にするために、新しいスクリプトジェネレータも利用可能になりました。シンプルなコマンドでスクリプトを生成できます。

これらのコマンドは対応するスクリプトファイルを作成し、その後すぐに実行できます。

この合理化されたアプローチにより、アプリケーションが整理された状態を保ち、カスタムスクリプトの取り扱いがより便利で保守しやすくなります。

Active Record の多数の改善

Active Record にも Rails 8 で大きな強化が加えられました。パフォーマンスの向上、マイグレーションの簡素化、トラブルシューティングの改善、そして複雑なデータベースユースケースへのより良いサポートが実現しています。

この最新バージョンで導入された主な変更点は以下の通りです。

  • Rails 8 では PostgreSQL において float4float8 が区別されるようになりました。
  • drop_table が複数テーブルの一括削除をサポートするようになりました。
  • PostgreSQL でのテーブル作成時に、継承やパーティショニングを含む高度なオプションがサポートされました。
  • フィクスチャの一括挿入がサポートされ、データシーディングのパフォーマンスが向上しました。
  • 新しいデータベースのマイグレーションでは、マイグレーション実行前にまずデータベーススキーマを読み込むようになりました。
  • create_schemadrop_schema 操作が reversible(可逆)になりました。
  • 精度付き datetime などの進歩により、Rails 8 では MySQL 5.6.4 以降が必要になりました。
  • 開発環境ではクエリログタグがデフォルトで有効になり、SQL ステートメントをアプリケーションコードまで遡って追跡したり、使用中のデータベースを特定したりできます。

まとめ

Rails 8 は、Kamal による簡単なデプロイやモダンなアセットパイプラインから、Active Record の大幅な強化、SQLite の本番環境対応まで、影響力のある幅広いアップデートをもたらします。

これらの進化は開発者の生産性を高めるだけでなく、モダンなベストプラクティスとも調和しており、インフラの複雑さに悩まされることなく、アプリケーション開発そのものに集中できるようになります。

すべての新機能、最適化、変更点の詳細なリストについては、公式の Rails 8 リリースノートをご確認ください。

Rails への貢献に興味がある方は、Rails の GitHub リポジトリを訪れて、オープンな issue を確認したり、コントリビューションガイドラインを参照したりしてみてください。

最後までお読みいただきありがとうございました!

  1. Ruby on Rails学習におすすめの必読書ガイド|レベル別に厳選

    Webアプリケーション開発やデザインの分野で働いている方なら、「Ruby on Rails」という名前を一度は耳にしたことがあるでしょう。Rubyは長年の実績を持つ確立されたプログラミング言語であり、そこにRails(Rubyの機能を拡張するソフトウェアライブラリ)を組み合わせることで、強力なモダンアプリケーション開発ツールが手に入ります。Ruby on Railsを学べる書籍は数多く出版されていますが、どれが自分に合っているのか迷ってしまう方も多いのではないでしょうか。 この記事では、あなたの学習スタイルや目的にぴったりの1冊を見つけるためのガイドをご紹介します。プログラミングやアプリ開発の

  2. RuboCopで実現するRubyコードのリントと自動フォーマット徹底ガイド

    リンティング(Lint)とは、ソースコードに含まれるプログラム上の誤りやスタイル違反を自動的に検出する仕組みです。このチェックは「リンター」と呼ばれる静的コード解析ツールによって行われます。一方、コードフォーマッターは、あらかじめ設定されたルールセットにソースコードを厳密に準拠させることに特化したツールです。一般的にリンターは違反を報告するだけで、実際の修正はプログラマーの手に委ねられます。それに対してコードフォーマッターは、ルールを直接ソースコードに適用し、フォーマットのミスを自動的に修正してくれます。 プロジェクトで一貫性のあるコードスタイルを実現するには、通常リンティング用とフォーマッ