Ruby on Rails

Rails 8.1 リリースノートまとめ

  • POST
Rails 8.1 リリースノートについてまとめたものを備忘録として残しておく Rails 7 リリースノートまとめ Rails 7.1 リリースノートまとめ Rails 7.2 リリースノートまとめ Rails 8 リリースノートまとめ Rails 8.1 のリリースノートは以下の通り Rails 8.1 系での新機能および変更点 Railties rails credentials:fetch PATH コマンドが追加された フィクスチャで動的 ERB 式の代わりに静的 BCrypt パスワードダイジェストが生成されるようになった .gitignoreエントリが拡張され、すべてのキーファイルが無視されるようになった bin/setupに--reset オプションが追加された GitHub ActionsワークフローテンプレートのRuboCopジョブにRuboCopキャッシュ復元が追加された ActionMailerを使用しないアプリケーションで認証ジェネレータがメーラー関連ファイルの生成をスキップするようになった bin/ciが導入され、テスト、スタイルチェック、セキュリティ監査をローカルまたはクラウドで実行できるようになった 認証ジェネレータ実行時にセッションコントローラテストが生成されるようになった bin/bundler-auditとconfig/bundler-audit.ymlが追加され、アプリケーションgemの既知のセキュリティ問題を発見・管理できるようになった bin/bundlebinstubの生成が停止された SessionTestHelperモジュールが追加され、sign_in_as(user)とsign_outテストヘルパーが提供されるようになった 認証ジェネレータでパスワードリセットのレート制限が追加された rails new --minimalオプションが更新され、最近追加された機能が除外されるようになった アプリケーションレイアウトにapplication-nameメタデータが追加された ローカルでENVまたはcredentialsからsecret_key_baseが使用されるようになった 生成されたci.ymlファイルにRAILS_MASTER_KEYプレースホルダーが導入された 非標準環境でも Rails コンソールプロンプトがカラー化されるようになった 開発環境とテスト環境で YJIT が有効化されなくなった ポリシーが設定されている場合のみPermissionsPolicy::Middlewareが含まれるようになった Action Cable ActionCable::Channel#stream_for に複合チャネルを渡せるようになった 例: stream_for [ group, group.owner ] Redis のサブスクリプション接続識別子に nil を設定できるようになった Action Pack action_controller.loggerを nil または false に設定することで無効化できるようになった .md/.markdownが Markdown 拡張として追加され、デフォルトのmarkdown:レンダラーが追加された エンジンルート検査コマンドにヘッダーが追加された エラーページに「Copy as text」ボタンが追加された rate_limitメソッドにscope:オプションが追加された ActionDispatch::Executorでrack.response_finishedコールバックのサポートが追加された rescue_fromが呼び出されたときにログが生成されるようになった Rails 設定の hosts からのホストリダイレクトが許可されるようになった rate_limit.action_controller通知に追加のペイロードが含まれるようになった 組み込みヘルスコントローラーに JSON サポートが追加された ブラウザからクラッシュでソースファイルを開けるようになった クエリ文字列キーが値と同様に有効なエンコーディングかチェックされるようになった PublicExceptionsとDebugExceptionsで HEAD リクエストの空のボディが常に返されるようになった RFC 9111に従った HTTP Cache-Control リクエストディレクティブの包括的なサポートが追加された assert_in_body/assert_not_in_bodyがレスポンスボディ内のテキストをチェックする最も簡単な方法として追加された クッキー名が最大許可サイズの計算に含まれるようになった RFC 9111に従ったmust-understandディレクティブが実装された JSON レンダラーが HTML エンティティや Unicode 行区切り文字をエスケープしなくなった テストルートを挿入する前に遅延ルートセットが読み込まれるようになった レンダリング後に head が呼び出された場合にAbstractController::DoubleRenderErrorが発生するようになった Cookie Serializerがメッセージパックを使用する際にActive Support SafeBufferをシリアライズできるようになった Rails.application.reload_routes!がほぼすべてのルートをクリアする問題が修正された #resource または#resources に無効な :only または :except オプションが与えられた場合のArgumentErrorにリソース名が追加された 存在しないコントローラーを指すルートが 404 ではなく 500 を返すようになった ActionDispatch::Session::CacheStoreにcheck_collisionsオプションが追加された ExceptionWrapperでビルトインテンプレートとのバックトレース行のマッチングが改善された Mimeタイプ のシンボルでコンテンツタイプを設定できるようになった Action View preload_link_tagで生成される HTML と一致するように Link ヘッダーに fetchpriority が追加された preload_link_tagで生成される Link ヘッダーに CSP nonce が追加された current_page?がmethod:オプションで特定の HTTP メソッドとマッチできるようになった form_tag,token_tag,method_tagで生成される隠し入力から autocomplete=“off” が削除された button_to,check_box,select(multiple付き),file_fieldフォームに含まれる隠しパラメータフィールドから autocomplete=“off” が削除された Action Viewテンプレート間の依存関係を追跡する戦略の設定が有効になった relative_time_in_wordsヘルパーが導入された nonce: falseが javascript_tag, javascript_include_tag, stylesheet_link_tag から nonce 属性を削除するようになった 無制限の数のオブジェクトから dom_id のような文字列を作成する dom_target ヘルパーが追加された collection_checkboxesが隠し<input>を生成する際にhtml_options[:form]が尊重されるようになった レイアウトが render に渡されるローカル変数にアクセスできるようになった テンプレートの strict locals に関連する引数エラーがActionView::StrictLocalsErrorを発生させるようになった ERB テンプレートまたは do-end ブロック内でエラーが発生した場合のマルチライン メソッドのエラーハイライトが改善された コンパイルされたテンプレートでソーステンプレートの終端を超えた行でエラーが発生した場合の ERB テンプレートエラーハイライトのクラッシュが修正された ERB テンプレートエラーハイライトの信頼性が向上し、ハイライトでの無限ループとクラッシュが修正され、代替 ERB ハンドラーの許容性が改善された hidden_fieldとhidden_field_tagがカスタム autocomplete 値を受け入れるようになった content_security_policy_nonce_directives設定オプションで指定されたディレクティブの影響を受けるタグに nonce を自動的に追加する新しい設定content_security_policy_nonce_autoが追加された Action Mailer deliver_all_laterが追加され、複数のメールを一度にエンキューできるようになった Active Record libpq >= 18とpg < 1.6.0の互換性問題により、cancel_any_running_queryでPG::Connection#cancelの呼び出しがスキップされるようになった 新しいデータベース設定オプションkeepalive,max_age、min_connectionsが導入され、 pool が max_connections にリネームされた LIMIT 検証がクエリ生成時から limit() が呼び出された時に移動された ActiveRecord::CheckViolationエラークラスがチェック制約違反用に追加された ActiveRecord::ExclusionViolationエラークラスが排他制約違反用に追加された filter_attributesでフィルタされた属性がfilter_parametersでもフィルタされるようになった connection.current_transaction.isolationAPIが現在のトランザクションの分離レベルをチェックできるようになった #mergeと#orまたは#andと属性と SQL 文字列の混合で不正なクエリが生成される問題が修正された スキーマダンパーが :ruby 形式でダンプする際にActiveRecord.dump_schemasを考慮するようになった update_column/update_columnsメソッドに :touch オプションが追加された Active Record バッチングが範囲を使用する際にさらに最適化された インデックスとテーブル名の長さ検証のエラーメッセージに現在の文字長が含まれるようになった PostgreSQL 用の rename_schema メソッドが追加された アソシエーションの非推奨化サポートが実装された PostgreSQL アダプタの create DB が locale_provider と locale をサポートするようになった PostgreSQL で ntuples を使用して row_count を populateするようになった 永続化されていないレコードが厳密に読み込まれた has_and_belongs_to_many アソシエーションに include? されるかどうかのチェックが修正された ブロック内のすべてのプールのトランザクション分離を変更する機能が追加された 順序に依存するファインダーメソッド(#first、#last)が順序値なしで呼び出された場合にActiveRecord::MissingRequiredOrderErrorが発生するようになった 多態性 belongs_to アソシエーションで :class_name が無効になった db:migrate:reset が複数データベースをサポートするようになった ActiveRecord::Resultに affected_rows が追加された 再試行可能な SqlLiterals を #where に渡すことができるようになった insert_all/upsert_allで主キーのデフォルトが設定されるようになった ActiveRecord::DatabaseConfigurations用のロードフックactive_record_database_configurationsが追加された SQLite クエリで boolean カラムに TRUE と FALSE が使用されるようになった サポートされる SQLite の最小バージョンが 3.23.0 に引き上げられた 割り当てられた Active Record がアソシエーションをルックアップできるようになった 暗号化が属性ごとにsupport_unencrypted_data: trueを設定することをサポートするようになった モデルジェネレータがデータベース接続なしでカラムタイプを検証できるようになった 署名付き ID 検証器がRails.application.message_verifiersで設定可能になった PostgreSQLのstructure_loadでextra_flagsが前置されるようになった implicit_order_columnで主キー/制約の追加をバイパスできるようになった データベース設定でschema_formatを設定できるようになった MySQL v8.0.0+ と MariaDB v10.6.0+でインデックスの無効化がサポートされた ActiveRecord::Relation#reverse_orderでimplicit_order_columnが尊重されるようになった SQLite3 用のActiveRecord::Resultにカラムタイプが追加された 読み取り専用ロールで悲観的ロックを使用した場合にActiveRecord::ReadOnlyErrorが発生するようになった Rails アプリケーション外で SQLite3Adapter の dbconsole メソッドを使用する問題が修正された ActiveRecord::PendingMigrationアクションで複数データベースのマイグレーションが修正された 接続エラーで冪等なアソシエーションクエリの自動再試行が有効になった sql.active_record 計装に allow_retry が追加された PostgreSQL と SQLite3 で JOIN を使用した UPDATE のサポートが改善された ActiveSupport::Testing::Parallelizationに before-fork フックが導入され、既存の接続がクリアされるようになった PoolConfig が接続クラスへの参照を保持しなくなった 非同期クエリを使用する際に SQL 通知が送信されない場合がある問題が修正された PostgreSQL でダンプされたスキーマキャッシュの読み込みクエリが排除された ActiveRecord::Coder::JSONがインスタンス化できるようになった アソシエーション内の永続化されていないレコードでinsert_all/upsert_allを使用することが非推奨になった index_exists?でカラム名がオプションになった sql.active_record通知のペイロード名がeager loadingで「SQL」から「#{model.name} Eager Load」に変更された 接続エラーで冪等な#exists?クエリの自動再試行が有効になった update_allとサポートされていないメソッドの併用が非推奨になった schema.rb内のテーブルカラムがアルファベット順にソートされるようになった スキーマダンパー用のバージョンフォーマッターが導入された シリアライズされた属性が比較可能としてマークできるようになった MySQLのデフォルト関数がカラムのnullabilityを変更する際に削除される問題が修正された SQLite拡張がconfig/database.ymlで設定できるようになった ActiveRecord::Middleware::ShardSelectorが細かいデータベース接続切り替えをサポートするようになった insert_all/upsert_all後にリレーションがリセットされるようになった 並列テストデータベースのサフィックスに_Nが使用されるようになった データベース接続が最近検証されたことを記憶するようになった 複数のレコードのキャッシュカウンターをリセットできるようになった sql.active_record通知にaffected_rowsが追加された グループ化された計算でsumが修正された データベースごとにトランザクションテストの有効/無効がサポートされるようになった URL 設定を使用する際に query_cache 値がキャストされるようになった NULLS NOT DISTINCTがUNIQUE CONSTRAINTとUNIQUE INDEXの両方で動作するようになった PG::UnableToSend: no connection to the serverが接続関連の例外として再試行可能になった Active Storage GCP メタデータサーバーへの不要な呼び出しが削除された ダイレクトアップロードの進行状況がサーバー処理時間を考慮するようになった ActiveStorage::Filename#to_strが#to_sに委譲されるようになった config.active_storage.checksum_implementationを通じて代替MD5実装のサポートが追加された Blob が関連する Attachment を自動保存しなくなった Active Model バリデーションコールバックに except_on: オプションが追加された ActiveRecord::NormalizationがActiveModel::Attributes::Normalizationにバックポートされた Active Support ActiveSupport::Cache::Store#namespace=と#namespaceが追加された 並列テスト実行用のparallel_worker_idヘルパーが作成された ActiveSupport::Cache::Strategy::LocalCache::Middlewareのキャッシュが更新可能になった ActiveSupport::EventReporter用のassert_events_reportedテストヘルパーが追加された ActiveSupport::TimeZone#standard_nameメソッドが追加された Rails.eventでアクセス可能なStructured Event Reporterが追加された ActiveSupport::Loggerが#freezeフレンドリーになった ActiveSupport::Gzip.compressが入力に基づいて決定論的になった ActiveSupport::BacktraceCleaner#clean_locationsメソッドが追加された CurrentAttributesとExecutionContextの状態管理がテストケースで改善された ActiveSupport::BacktraceCleaner#first_clean_locationメソッドが追加された FileUpdateCheckerとEventedFileUpdateCheckerが Gem.path の変更を無視するようになった ActiveSupport::BacktraceCleaner#first_clean_frameメソッドが追加された CurrentAttributesインスタンスが常にクリアされるようになった 並列テストでbefore_fork_hookのパブリック API が追加された 並列テストデータベースの作成をスキップする機能が実装された 最大キャッシュキーサイズの設定が可能になった ActiveSupport::Cache::RedisCacheStoreで非ブロッキング削除にUNLINKコマンドが使用されるようになった Cache#read_counterとCache#write_counterが追加された ActiveSupport::Testing::ErrorReporterAssertions#capture_error_reportsが導入された ActiveSupport::ErrorReporter#add_middlewareが導入された 実行ラッピングがすべての例外(Exceptionを含む)を報告するように変更された ActiveSupport::Testing::Parallelization.before_fork_hookでテストワーカーフォーク直前に呼び出されるコールバックの宣言が可能になった #freeze_timeテストヘルパーが日付または時間引数を受け入れるようになった ActiveSupport::JSONがオプションを受け入れるようになった ActiveSupport::Testing::NotificationAssertionsのassert_notificationがデフォルトでペイロードサブセットとマッチするようになった nil.to_query("key")がkeyを返すようになった ActiveSupport::Cache::RedisCacheStoreで :redis オプションが既に ConnectionPool の場合に Redis を ConnectionPool でラップしないようになった ERB::Util.tokenizeが ERB タグを含まない文字列で完全な入力文字列と :PLAIN トークンを返すように変更された ERB::Util.tokenizeでマルチバイト文字の前に ERB タグがある場合の不正なトークン化バグが修正された ActiveSupport::Testing::NotificationAssertionsモジュールがActiveSupport::Notificationsのテストを支援するために追加された ActiveSupport::CurrentAttributes#attributesが各呼び出しで新しいハッシュオブジェクトを返すようになった ActiveSupport::JSON.encodeがCIDR記法をサポートするようになった ActiveSupport::FileUpdateCheckerが多くのファイル拡張子をチェックする際に高速化された Active Job ActiveJob::Serializers::ObjectSerializers#klassメソッドがパブリックになった ActiveJob::Continuablez を使用してジョブを中断・再開できるようになった enqueue_after_transaction_commitが有効な場合の ActiveJob エンキューコールバックの呼び出しがコミット後に延期されるようになった ActiveJob::Base#retry_onと#discard_onにreport:オプションが追加された ActiveJob::ConfiguredJob#perform_laterがブロックを受け入れるようになった デシリアライゼーション時に以前にシリアライズされたジョブクラスが不明な場合により具体的なエラーが発生するようになった Action Text fill_in_rich_text_areaオプションが Capybara に転送されるようになった アタッチメントアップロードの進行状況がサーバー処理時間を考慮するようになった Trix 依存関係がベンダーファイルではなく action_text-trixgem で満たされるようになった ActionText::RichText#embedsの割り当てが before_save から before_validation に変更された Action Mailbox Mail::Message に reply_to_address 拡張メソッドが追加された 非推奨および削除された機能 Action Pack 以下が削除された パラメータ名の先頭の角括弧([])をスキップする機能 クエリ文字列のセミコロン(;)区切りのサポート 複数のパスに対するルート設定のサポート Rails.application.config.action_dispatch.ignore_leading_brackets が非推奨になった Active Record 以下が削除された SQLite3 アダプターの :retries オプション MySQL の以下のカラムメソッド :unsigned_float :unsigned_decimal Active Storage azure ストレージサービスが削除された Active Job 以下が削除された ActiveJob::Base.enqueue_after_transaction_commit を :never, :always, :default に設定するサポート Rails.application.config.active_job.enqueue_after_transaction_commit 内部の SuckerPunch アダプタ

Rails 8 rails new コマンドのオプションについて

  • POST
Rails 8 rails new コマンドのオプションについてまとめたものを備忘録として残しておく 環境 ruby: 3.4.2 rails: 8.0.2 mode: API mode 全オプション rails new -h で確認 Usage: rails new APP_PATH [options] Options: [--skip-namespace] # Skip namespace (affects only isolated engines) # Default: false [--skip-collision-check] # Skip collision check # Default: false -r, [--ruby=PATH] # Path to the Ruby binary of your choice # Default: /Users/kazuki_kawazoe/.rbenv/versions/3.4.2/bin/ruby -n, [--name=NAME] # Name of the app -m, [--template=TEMPLATE] # Path to some application template (can be a filesystem path or URL) -d, [--database=DATABASE] # Preconfigure for selected database # Default: sqlite3 # Possible values: mysql, trilogy, postgresql, sqlite3, mariadb-mysql, mariadb-trilogy -G, [--skip-git] # Skip git init, .gitignore and .gitattributes [--skip-docker] # Skip Dockerfile, .dockerignore and bin/docker-entrypoint [--skip-keeps] # Skip source control .keep files -M, [--skip-action-mailer] # Skip Action Mailer files [--skip-action-mailbox] # Skip Action Mailbox gem [--skip-action-text] # Skip Action Text gem -O, [--skip-active-record] # Skip Active Record files [--skip-active-job] # Skip Active Job [--skip-active-storage] # Skip Active Storage files -C, [--skip-action-cable] # Skip Action Cable files -A, [--skip-asset-pipeline] # Indicates when to generate skip asset pipeline -J, --skip-js, [--skip-javascript] # Skip JavaScript files [--skip-hotwire] # Skip Hotwire integration [--skip-jbuilder] # Skip jbuilder gem -T, [--skip-test] # Skip test files [--skip-system-test] # Skip system test files [--skip-bootsnap] # Skip bootsnap gem [--skip-dev-gems] # Skip development gems (e.g., web-console) [--skip-thruster] # Skip Thruster setup [--skip-rubocop] # Skip RuboCop setup [--skip-brakeman] # Skip brakeman setup [--skip-ci] # Skip GitHub CI files [--skip-kamal] # Skip Kamal setup [--skip-solid] # Skip Solid Cache, Queue, and Cable setup [--dev], [--no-dev], [--skip-dev] # Set up the application with Gemfile pointing to your Rails checkout [--devcontainer], [--no-devcontainer], [--skip-devcontainer] # Generate devcontainer files [--edge], [--no-edge], [--skip-edge] # Set up the application with a Gemfile pointing to the 8-0-stable branch on the Rails repository --master, [--main], [--no-main], [--skip-main] # Set up the application with Gemfile pointing to Rails repository main branch [--rc=RC] # Path to file containing extra configuration options for rails command [--no-rc] # Skip loading of extra configuration options from .railsrc file [--api], [--no-api], [--skip-api] # Preconfigure smaller stack for API only apps # Default: false [--minimal], [--no-minimal], [--skip-minimal] # Preconfigure a minimal rails app -j, --js, [--javascript=JAVASCRIPT] # Choose JavaScript approach # Default: importmap # Possible values: importmap, bun, webpack, esbuild, rollup -c, [--css=CSS] # Choose CSS processor. Check https://github.com/rails/cssbundling-rails for more options # Possible values: tailwind, bootstrap, bulma, postcss, sass -B, [--skip-bundle] # Don't run bundle install [--skip-decrypted-diffs] # Don't configure git to show decrypted diffs of encrypted credentials Runtime options: -f, [--force] # Overwrite files that already exist -p, [--pretend], [--no-pretend], [--skip-pretend] # Run but do not make any changes -q, [--quiet], [--no-quiet], [--skip-quiet] # Suppress status output -s, [--skip], [--no-skip], [--skip-skip] # Skip files that already exist Rails options: -h, [--help], [--no-help], [--skip-help] # Show this help message and quit -v, [--version], [--no-version], [--skip-version] # Show Rails version number and quit Description: The `rails new` command creates a new Rails application with a default directory structure and configuration at the path you specify. You can specify extra command-line arguments to be used every time `rails new` runs in the .railsrc configuration file in your home directory, or in $XDG_CONFIG_HOME/rails/railsrc if XDG_CONFIG_HOME is set. Note that the arguments specified in the .railsrc file don't affect the default values shown above in this help message. You can specify which version to use when creating a new rails application using `rails _<version>_ new`. Examples: `rails new ~/Code/Ruby/weblog` This generates a new Rails app in ~/Code/Ruby/weblog. `rails _<version>_ new weblog` This generates a new Rails app with the provided version in ./weblog. `rails new weblog --api` This generates a new Rails app in API mode in ./weblog. `rails new weblog --skip-action-mailer` This generates a new Rails app without Action Mailer in ./weblog. Any part of Rails can be skipped during app generation. 不要そうなオプション(skip しても良さそうなオプション) –skip-docker Skip Dockerfile, .dockerignore and bin/docker-entrypoint ここでいう Dockerfile は Deploy 用のため他ツールを使用する場合は不要 –skip-asset-pipeline api モードではアセットは使用しないため不要 –skip-javascript api モード では javascript は使用しないため不要 –skip-hotwire api モード では Hotwire は使用しないため不要 –skip-jbuilder jbuilder 以外の gem を使用する場合は不要 –skip-test rspec 使用の場合は不要 –skip-system-test rspec 使用の場合は不要 –skip-thruster api モード では HTTP/2プロキシ「Thruster」は使用しないため不要 –skip-kamal Deploy tool に他を使用する場合は不要 –skip-devcontainer devcontainer を使用しない場合は不要 –skip-bundle bundle install をさせたくない場合は不要 必要そうなオプション(skip しない方が良さそうなオプション) –skip-git Skip git init, .gitignore and .gitattributes git 関連のファイルを作成しない –skip-keeps Skip source control .keep files .keep ファイルを作成しない 空のディレクトリを Git に含めるために必要 –skip-rubocop ruby コードの静的チェック –skip-brakeman ソースコードに、SQL インジェクションや XSS 等の脆弱性がないかを解析してくれる Gem –skip-ci GitHub CI files を生成しない –skip-active-record Active Record を使用しない –skip-active-storage Active Storage を使用しない FE からファイルアップロードを行う場合は必要 –skip-bootsnap bootsnap を使用しない bootsnap は起動を高速化させるので必要 –skip-dev-gems Gemfile 内の development 記載をしない development の gem を自分で記載する場合は必要 –skip-active-job Active Job(Queue 機能)を使用する場合は必要 –skip-action-cable Active Cable(Websocket 通信)を使用する場合は必要 –skip-solid 以下の機能を使用する場合は必要 Solid Cache(Cache 機能) Queue(Queue 機能) Cable(Websocket 通信) –skip-action-mailer Action Mailer を使用する場合は必要 –skip-action-mailbox Action Mailbox を使用する場合は必要 –skip-action-text Action Text を使用する場合は必要 使用例 App Name: myapp

Rails 8 リリースノートまとめ

  • POST
Rails 8 リリースノートについてまとめたものを備忘録として残しておく Rails 7 リリースノートまとめ Rails 7.1 リリースノートまとめ Rails 7.2 リリースノートまとめ Rails 8 系での新機能および変更点 Kamal(Docker コンテナのデプロイツール) Kamalという Docker コンテナを本番環境に簡単にデプロイするツールが同梱されるようになった ※Rails アプリケーションのデプロイで使用されていた Capistrano をコンテナように置き換えたツールのイメージ Thruster(HTTP/2 プロキシサーバ) Rails アプリケーションの Docker ファイルに、Thruster と呼ばれるプロキシサーバの設定が含まれ、Puma の前段に配置するようになった これにより、Nginx など別の Web サーバーを用意する必要がなくなる Thrusterの機能 HTTP/2のサポート Let’s Encrypt による自動化された TLS 証明書の管理 公開アセット(JavaScript、CSS、画像など)の HTTP キャッシュ X-Sendfile のサポートと圧縮 Solid Cable Solid Cable によって Redis を使用せずに WebSocket を使用したリアルタイム機能を使用することができる Solid Cache Solid Cache によってメモリを使用した Redis や Memcached よりも長期間にわたって大容量のアプリケーションのデータのキャッシュを行うことができる Solid Queue Solid Queue は、Redis を使用した Sidekiq や Resque といったジョブ実行システムと同様に、単純なジョブのエンキューや実行だけでなく、遅延実行、同期処理の制御、定期(繰り返し)実行、キューの停止、優先順序づけなど本格的な実用に耐えるものが実現できる

Rails 7.2 リリースノートまとめ

  • POST
Rails 7.2 リリースノートについてまとめたものを備忘録として残しておく 他バージョンのリリースノートまとめ Rails 7 リリースノートまとめ Rails 7.1 リリースノートまとめ Rails 7.2 系での新機能および変更点 開発用のDockerコンテナ(devコンテナ) Docker コンテナをフル機能の開発環境として使用できる dev コンテナと呼ばれる新機能が追加されました。 デフォルトでは、以下のようなコンテナが含まれています。 データベース(SQLite, PostgreSQL, MySQL, MariaDBなど) Active Storage Redis システムテスト(Headless Chrome) 新規のアプリケーションで dev コンテナを使用するには、rails new でアプリケーションを生成する際に --devcontainer オプションを追加する rails new myapp --devcontainer YJIT のデフォルト化 YJIT は Ruby の JIT コンパイラで、有効にすることで Rails アプリケーションのパフォーマンスを大幅に向上させ、レイテンシを15〜25%改善することができる Rails 7.2 で Ruby 3.3以上を使用している場合は、YJIT がデフォルトで有効となる 無効にする場合は以下の設定が必要 Rails.application.config.yjit = false ブラウザのバージョンの Guard デフォルト化 アプリケーション生成時に以下の設定が Application Controller に追加されるようになった allow_browser versions: :modern リクエストのヘッダの User-Agent に基づいて、モダンブラウザ(WebP画像、Import maps、CSS入れ子などの機能をサポート)のアクセスを許可する ※古いバージョンのブラウザに対しては許可せず、HTTP status 406を返す ※User-Agent がリクエストのヘッダに含まれない場合もアクセスを許可するため注意

Rails 7.1 リリースノートまとめ

  • POST
Rails 7.1 リリースノートについてまとめたものを備忘録として残しておく 他バージョンのリリースノートまとめ Rails 7 リリースノートまとめ Rails 7.1 系での新機能および変更点 Dockerfileの生成 新規アプリケーションで Dockerfile が自動生成されるようになった 複合プライマリキーのサポート 複合プライマリキーがサポートされ、マイグレーションや、Active Record のクエリメソッドなど Rails のアプリケーション全般で使用できるようになった DB に複合プライマリキーを使用したテーブルを作成するには、以下のようにマイグレーションの change_table の primary_key: オプションにカラム名の配列を渡す class CreateBooks < ActiveRecord::Migration[7.1] def change create_table :books, primary_key: [:store_id, :sku] do |t| t.integer :store_id t.string :sku t.string :name t.text :description end end end 使用例 クエリメソッド Product.find([3, "XYZ12345"]) # store_id: 3, sku: "XYZ12345"を指定 Product.where(Product.primary_key => [[1, "ABC98765"], [7, "ZZZ11111"]]) # store_id: 3, sku: "XYZ12345"とstore_id: 7, sku: "ZZZ11111" Product.first # SELECT * FROM products ORDER BY products.store_id ASC, products.sku ASC LIMIT 1 モデルの関連 従来の id ではなく、複合プライマリキーを使用するには、has_many や belongs_to などのオプションで query_constraints を使用する

Rails 7 リリースノートまとめ

  • POST
Rails 7 リリースノートについてまとめたものを備忘録として残しておく Rails 7 系での新機能および変更点 JavaScriptフロントエンドの刷新 ESM(ECMAScript modules)や import maps を使用し、Node.js をインストールせずにモダンな JavaScript が利用可能 ※デフォルトでは Hotwire, Stimulus, Turbo がインストールされる CSS Bundling 以下のサポートが追加 Tailwind CSS PostCSS アプリケーション新規作成時に指定可能 rails new myapp --css tailwind 既存に追加する場合は Gemfile に以下を追加して gem 'cssbundling-rails' 以下のコマンドを実行することでインストールおよび初期設定が可能 bin/bundle install bin/rails css:install:tailwind Active Recordの実行時暗号化機能 データの暗号化が可能になった bin/rails db:encryption:init コマンドを実行してランダムなキーを生成 結果をbin/rails credentials:editで開いたエディタの画面に貼り付けて保存 Model で以下のように指定 class User < ApplicationRecord encrypts :name end Spring のデフォルト値の変更 大規模なアプリケーション以外では Spring があまり意味をなさなくなったため、デフォルトがオフに変更 Sass と CSS ジェネレータの非標準化 最近では CSS フレームワークを使うようになっているため、Sass は使用されなくなってきている そのため sass-rails Gem が標準では Gemfile に含まれないようになった また、自動生成される CSS ファイルも拡張子が .scss ではなく .css のファイルになった そして、モデルごとに CSS ファイルを生成しないようになった

rails で routes.rb を分割管理する方法

  • POST
プロジェクト自体が大きくなってきた際に routes.rb にまとめて記載すると見づらくて追加しようとした際にわかりずらい課題が発生した そのため、rails で routes.rb を分割管理する方法を備忘録として残しておく 参考 環境 ruby: 3.0.5 rails: 6.1.7 方法 concern を使用して共通の routes を定義する draw を使用して別ファイルに分割する 前提 config |-routes | |-concerns.rb # プロジェクト共通の routes | |-foo_service_provider.rb # Foo サービス用の routes | |-hoge_service_provider.rb # Hoge サービス用の routes | |-service_provider_common.rb # サービス共通の routes |-routes.rb 実際の例 concern :loggable do get "login", to: "sessions#new" post "login", to: "sessions#create" delete "logout", to: "sessions#destroy" end concern :data do namespace :data do get "download" end end namespace :service_provider, path: "services" do concerns :loggable scope :home, as: :home do get "/", to: "home#index" end end draw(:service_provider_common) namespace :service_provider, path: "services" do concerns :data end draw(:service_provider_common) namespace :service_provider, path: "services" do resources :users, only: [:index, :show] end # == Route Map # # Prefix Verb URI Pattern Controller#Action # admin_login GET /admin/login(.:format) admin/sessions#new # POST /admin/login(.:format) admin/sessions#create # admin_logout DELETE /admin/logout(.:format) admin/sessions#destroy # foo_service_provider_login GET /foo/services/login(.:format) foo/service_provider/sessions#new # POST /foo/services/login(.:format) foo/service_provider/sessions#create # foo_service_provider_logout DELETE /foo/services/logout(.:format) foo/service_provider/sessions#destroy # foo_service_provider_home GET /foo/services/home(.:format) foo/service_provider/home#index # foo_service_provider_users GET /foo/services/users(.:format) foo/service_provider/users#index # foo_service_provider_user GET /foo/services/users/:id(.:format) foo/service_provider/users#show # hoge_service_provider_data_download GET /hoge/services/data/download(.:format) hoge/service_provider/data#download # hoge_service_provider_users GET /hoge/services/users(.:format) hoge/service_provider/users#index # hoge_service_provider_user GET /hoge/services/users/:id(.:format) hoge/service_provider/users#show Rails.application.routes.draw do draw(:concerns) namespace :admin do concerns :loggable end namespace :foo do draw(:foo_service_provider) end namespace :hoge do draw(:hoge_service_provider) end end