HN 日本語サマリー

← 一覧へ戻る
Web開発

Rails 8ガイド: 機能、要件、アップグレードパス (2026)

Rails 8 Guide: Features, Requirements and Upgrade Path (2026) (blog.appsignal.com)

19 pointsby andreigaspar3 コメント

要約

Rails 8.0は2024年11月7日にリリースされ、Ruby 3.2.0以降が必要です。主な新機能として、組み込み認証ジェネレータ、Redis不要のSolid Queue/Cache/Cable、Kamal 2 + Thrusterによるデプロイ、Propshaft、本番環境対応SQLiteなどが挙げられます。Rails 8.1は2025年10月リリースで、Rails 8.0は2026年11月までセキュリティ修正のみが提供されます。

全文翻訳

Rails 8ガイド: 機能、要件、アップグレードパス (2026) Rails 8.0は2024年11月7日にリリースされ、Ruby 3.2.0以降が必要です。主な機能は、組み込み認証ジェネレータ、Solid Queue/Cache/Cable(データベースベース、Redis不要)、Kamal 2 + Thrusterデプロイ、Propshaft、本番環境対応SQLiteです。Rails 8.1(2025年10月)が現在のリリースです。Rails 8.0は、2026年11月までセキュリティ修正のみを受け取ります。このガイドでは、Rails 8の各機能について、使用するコマンドとデフォルト設定を解説します。また、現在のサポート期間、Rails 7.1または7.2からのアップグレードチェックリスト、Rails 8.1での変更点の概要も紹介します。このガイドのすべてのバージョン情報は、Rails 8.1.3.1およびRuby 3.4.10で新規作成したrails newアプリに対して検証済みです。 要件とサポート状況 Rails 8.0と8.1はどちらもRuby 3.2.0以降が必要です。rails gemはgemspecを通じてこれを強制するため、Ruby 3.1以前ではgem install railsは失敗します。実際には、最小バージョンよりも新しいRubyを使用することをお勧めします。現在のRuby 3.4シリーズは、YJITの改善と、最も長いRubyセキュリティパッチの提供期間をもたらします。 以下は、2026年8月時点のRailsメンテナンスポリシーに基づいた、最近の各Railsバージョンのサポート状況です。 バージョン 最小Ruby バグ修正 セキュリティ修正 Rails 8.1 Ruby 3.2.0 2026年10月10日まで 2027年10月10日まで Rails 8.0 Ruby 3.2.0 2026年5月7日に終了 2026年11月7日まで Rails 7.2 Ruby 3.1.0 終了 2026年8月9日に終了 Rails 7.1 Ruby 2.7.0 終了 終了(サポート終了) この表から2つの重要な点がわかります。第一に、Rails 8.0は最終段階にあり、セキュリティ修正のみを受け取っており、それらは2026年11月7日に終了します。第二に、7.1と7.2の両方はすでにサポートリストから完全に外れています。もしどちらかを本番環境で使用しているなら、アップグレードチェックリストは「いつか」ではなく「今すぐ」実施すべきです。 最小RubyバージョンはRailsアップグレードガイドから取得され、8.1の機能セットはRails 8.1リリースノートで文書化されています。 組み込み認証をシンプルに Railsは何年もかけて認証のビルディングブロックを提供してきました。Rails 5ではhas_secure_password、その後Rails 7.1ではnormalizes、generates_token_for、authenticate_byを提供しました。Rails 8はそれらのピースをジェネレータにまとめました。 1つのコマンドで、データベースベースのセッションとパスワードリセットを含む、完全なセッションベースの認証システムをスキャフォールディングできます。 Shell bin/rails generate authentication このジェネレータは、モデル、コントローラー、メーラー、ビューを作成します。 text app/models/current.rb app/models/user.rb app/models/session.rb app/controllers/sessions_controller.rb app/controllers/passwords_controller.rb app/mailers/passwords_mailer.rb app/views/sessions/new.html.erb app/views/passwords/new.html.erb app/views/passwords/edit.html.erb app/views/passwords_mailer/reset.html.erb app/views/passwords_mailer/reset.text.erb db/migrate/xxxxxxx_create_users.rb db/migrate/xxxxxxx_create_sessions.rb test/mailers/previews/passwords_mailer_preview.rb 生成されたコードはアプリ内に配置されるため、すべての行を読み取り、変更できます。セッションロジックを隠すエンジンはないため、このジェネレータは、習慣的にDeviseを使用していたチームにとって強力なデフォルトとなります。残りは、アプリケーションに合わせてサインアップフローを追加することだけです。 Solidアダプターによる軽量なRailsデプロイ Rails 8は、典型的な本番アプリケーションが必要とするサービス数を削減します。ジョブキュー、キャッシング、Pub/Subメッセージングは、従来はリレーショナルデータベースの隣にRedisを実行する必要がありました。Rails 8は、これらをデフォルトで各新規アプリにインストールされる3つのデータベースベースのアダプターに置き換えます。Solid Queue、Solid Cache、Solid Cableです。 Solid Queueは新しいデフォルトのActive Jobバックエンドです。PostgreSQL、MySQL、またはSQLiteでの効率的なジョブディスパッチのためにFOR UPDATE SKIP LOCKEDメカニズムを使用し、同時実行制御、リトライ、繰り返しジョブを備えています。HEYでは1日に2000万件のジョブを実行しています。 Solid CacheはRails.cacheをRAMではなくディスクストレージでバックアップします。最新のNVMeドライブはほとんどのワークロードで十分な速度を提供し、ディスク容量は安価です。デプロイ間で永続化されるはるかに大きなキャッシュ、および暗号化されたストレージと保持ポリシーが得られます。 Solid Cableは、本番環境でのデフォルトのAction Cableアダプターです。ほとんどの状況でRedisと同等のパフォーマンスを発揮する、高速なデータベースポーリングを通じてアプリと接続されたクライアント間のメッセージを中継します。 新しいRails 8アプリは、これら3つすべてを自動的に配線します。生成されるGemfileにはgemが含まれ、production.rbはconfig.cache_store = :solid_cache_storeおよびconfig.active_job.queue_adapter = :solid_queueを設定し、cable.ymlはsolid_cableを指します。既存のアプリは、例えばbin/rails solid_queue:installのように、インストーラーを使用して各アダプターを個別に採用できます。 RedisをSolid Queueに切り替えると、ジョブキューがデータベースに移動します。これは注意すべき点です。AppSignalはSolid Queueを標準でインストゥルメントするため、キューのレイテンシと失敗したジョブがRailsパフォーマンスデータと並んで表示されます。 Kamal 2とThrusterによる簡単なデプロイ Rails 8は、デフォルトのデプロイツールとしてKamal 2を同梱しています。KamalはアプリをDockerコンテナとして、PaaSを介さずにクラウドVM、ベアメタルサーバー、またはVPSにデプロイします。単一のコマンド(kamal setup)で、標準的なLinuxボックス上に本番環境対応のRails環境をプロビジョニングできます。 Kamal 2はThrusterとペアになります。ThrusterはRails向けに構築されたHTTPプロキシであり、各新規アプリのGemfileに含まれています。Thrusterは、Pumaの前にゼロダウンタイムデプロイ、HTTP/2サポート、Let's Encryptによる自動SSL証明書、アセットキャッシュと圧縮を追加します。複数のアプリが追加設定なしで単一サーバーを共有できます。 Rails 8.1以降、Kamalは基本的なデプロイのためにDocker Hubのようなリモートレジストリを必要としなくなりました。Kamal 2.8はデフォルトでローカルレジストリを使用するため、最初のデプロイではサーバーとSSHアクセス以外は何も必要ありません。別の方法でデプロイする場合は、rails newで--skip-kamalを渡し、既存のワークフローを維持してください。kamalとthruster gemはrequire: falseとマークされているため、どちらの場合もアプリの起動時間に影響を与えません。 本番環境対応のSQLite Rails 8は、SQLiteアダプターとRubyドライバーに対する広範な作業に支えられ、SQLiteを開発時の利便性からサポートされる本番データベースへと昇格させます。 Solidアダプターは主要な利用者です。シングルサーバーアプリでは、SQLiteは現在、プライマリデータベースと並んでActive Job、Rails.cache、Action Cableをサポートできます。これにより、小規模および中規模のアプリは、真に依存関係のないスタック(1つのサーバー、1つのデータベースエンジン、Redisなし)を持つことができます。 アダプター自体もRails 8で本番環境に焦点を当てた改善を得ました。create_virtual_tableによるフルテキスト検索と仮想テーブル。データシードを高速化するためのバルクフィクスチャ挿入。同時実行性を向上させるためのトランザクションはデフォルトでIMMEDIATEモードになります。SQLite3::BusyExceptionはActiveRecord::StatementTimeoutに変換されるため、ビジーデータベースエラーはPostgreSQLおよびMySQLの同等物と同様に動作します。 マルチサーバーセットアップや高負荷の書き込み同時実行性には、PostgreSQLとMySQLが引き続き適切な選択肢です。しかし、「本番環境でのSQLite」は、このリリースでジョークではなくなりました。 Propshaftによるアセットパイプラインの新時代 Rails 8は、10年以上にわたるSprocketsに代わり、Propshaftをデフォルトのアセットパイプラインとして採用します。Sprocketsは、最新のJavaScriptビルドツールやHTTP/2が存在する前に設計され、トランスパイル、バンドル、ミニフィケーションといった責任を蓄積しました。Propshaftはこれらすべてをドロップします。2つのことを行います。アセットパスを解決し、キャッシュバスターのためにファイル名にダイジェストをスタンプします。 この狭いスコープは、今日のRailsアプリの構築方法に適合しています。インポートマップはビルド不要のJavaScriptパスをカバーし、より重いフロントエンドを持つアプリはesbuild、Bun、またはViteを利用します。いずれにしても、アセットパイプラインがビルドツールである必要はなくなり、Propshaftもそうあろうとしません。 新しいスクリプトフォルダとActive Recordの改善 Rails 8は、データ移行やクリーンアップタスクなどの単発および汎用スクリプトのためにスクリプトフォルダを追加しました。対応するジェネレータがそれらをスキャフォールディングします。 Shell bin/rails generate script my_script その後、次のようにスクリプトを実行します。 Shell bundle exec ruby script/my_script.rb これにより、ユーティリティスクリプトが整理され、単発コードが永続しがちなlib/tasksから分離されます。 多数の追加機能