rc2以後の更新はありません。
🔗 Railties CHANGELOG(7.1.0.rc2)
🔗 Fix the BroadcastLogger being initialized too late: by Edouard-chin · Pull Request #49417 · rails/rails
Railsロガーが常に
ActiveSupport::BroadcastLoggerのインスタンスになるよう修正。Edouard Chin
同CHANGELOGより
参考: ActiveSupport::BroadcastLoggerは以下のプルリクによって7.1のActive Supportに追加されました。
また、以下の修正もマージされました。
- PR: Handle case when
config.loggeris already a BroadcastLogger: by Edouard-chin · Pull Request #49462 · rails/rails - PR: Delegate block in broadcast logger method_missing by eugeneius · Pull Request #49458 · rails/rails
🔗 Railties CHANGELOG(7.1.0.rc1)
🔗 Fix uninitialized constant error on Puma boot by mattbrictson · Pull Request #49325 · rails/rails
production環境で
WEB_CONCURRENCY環境変数が明示的に指定されていない場合でもPumaが起動できるよう、config/puma.rbにrequire "concurrent-ruby"を追加。修正: #49323
Matt Brictson
同CHANGELOGより
🔗 Raise error when generating attribute with dangerous name by p8 · Pull Request #47752 · rails/rails
属性名が衝突する危険がある場合にエラーをraiseするようになった。
以下のコマンドは、
saveとhashが既にActive Recordで定義済みなのでエラーになる。$ bin/rails generate model Post save $ bin/rails generate model Post hashPetrik de Heus
同CHANGELOGより
参考: 週刊Railsウォッチ20230926: 名前が衝突する属性名を生成するとエラーを発生するようになった
🔗 Railties CHANGELOG(v7.1.0.beta1)
🔗 Add ability to show slow tests to the test runner by fatkodima · Pull Request #49082 · rails/rails
テストランナーで遅いテストを表示する機能を追加。
bin/test --profile # 最も遅いテストを10件表示(デフォルト) # または bin/test --profile 20 # 最も遅いテストを20件表示fatkodima
同CHANGELOGより
参考: --profileはシステムテストでも使えます。
🔗 Add Bun support by terracatta · Pull Request #49241 · rails/rails
rails new --javascriptでBunをサポートするようになった。rails new my_new_app --javascript=bunJason Meller
同CHANGELOGより
参考: 週刊Railsウォッチ20230926: rails newでBunを指定できるようになった
🔗 Make bin/setup work with bun by duduribeiro · Pull Request #49229 · rails/rails
Bunを使うアプリを生成した場合に、
bin/setupでyarnではなくbunを使うよう変更。
bunを使っている場合は、bin/setupでbun installを実行するようになる。Cadu Ribeiro
同CHANGELOGより
🔗 Generate config.autoload_lib(...) for new apps by fxn · Pull Request #49032 · rails/rails
新規アプリの
config/application.rbに以下が追加されるようになった。config.autoload_lib(ignore: %w(assets tasks))実用上は、Rails 7.1の新規アプリでは
libディレクトリをカスタマイズなしでオートロード可能になることを意味する。Xavier Noria
同CHANGELOGより
参考: 週刊Railsウォッチ20230906: config/application.rbにconfig.autoload_libが追加されるようになった
🔗 Add an option to start rails console in sandbox mode by default by shouichi · Pull Request #48984 · rails/rails
production環境のRailsコンソールをデフォルトでsandboxモードで起動するオプションを追加。
デフォルトでRailsコンソールをsandboxモードで起動する
sandbox_by_defaultオプションが追加された。このオプションを有効にすると、sandboxモードをオフにしてRailsを起動するには--no-sandboxを指定しなければならない。なお、このオプションはRailsがdevelopment環境やtest環境の場合には無視される。
Shouichi Kamiya
同CHANGELOGより
参考: 週刊Railsウォッチ20230906: production環境のRailsコンソールを常にsandboxモードにするコンフィグが追加
🔗 Omit webdrivers gem from Gemfile template by seanpdoyle · Pull Request #48847 · rails/rails
Gemfileテンプレートからwebdriversgemへの依存を削除。Sean Doyle
同CHANGELOGより
参考: 週刊Railsウォッチ20230824: webdriversへの依存を解消
🔗 Support filtering tests by line ranges by shouichi · Pull Request #48807 · rails/rails
テストの行範囲を指定して実行できるようになった。
新しい構文ではテストコードの行を範囲指定できるようになる。
たとえば、以下のコマンドはテストコードの10行目〜20行目を実行する。$ rails test test/models/user_test.rb:10-20Shouichi Kamiya, Seonggi Yang, oljfte, Ryohei UEDA
同CHANGELOGより
参考: 週刊Railsウォッチ20230823: minitestの行範囲を指定して実行可能になった
🔗 Update default scaffold templates to set 303 (See Other) as status c… · rails/rails@5ed37b3
デフォルトのscaffoldテンプレートを更新し、XHRリクエスト(
GETやPOSTを除く)に対するupdateアクションでリダイレクト時のステータスコードを303 (See Other)に設定するようになった。これは、ブラウザが元のリクエストメソッドを利用してリダイレクトを追跡し、PATCHやPUTが2回発生するなどの問題を回避するため。Guillermo Iguaran
同CHANGELOGより
この修正は、Rails 7.0.7でリリース済みです。
参考: 7.1rc1でscaffold生成したupdate
# PATCH/PUT /users/1
def update
if @user.update(user_params)
redirect_to @user, notice: "User was successfully updated.", status: :see_other
else
render :edit, status: :unprocessable_entity
end
end
🔗 Introduce config.autoload_lib_once(ignore:) by fxn · Pull Request #48610 · rails/rails
config.autoload_lib_onceはconfig.autoload_libと似ているが、libディレクトリをconfig.autoload_once_pathsに追加する点が異なる。
config.autoload_lib_onceを呼び出すと、アプリケーションのイニシャライザからでもlibディレクトリ内のクラスやモジュールをオートロードする。ただし再読み込みは行われない。詳しくは定数の自動読み込みと再読み込みガイドを参照。
Xavier Noria
同CHANGELOGより
参考: 週刊Railsウォッチ20230725: config.autoload_lib_onceを追加
🔗 Make the log level in DebugExceptions configurable by skipkayhil · Pull Request #48575 · rails/rails
ActionDispatch::DebugExceptionsで使われるログレベルをカスタマイズするconfig.action_dispatch.debug_exception_log_levelを追加。デフォルトは
:fatalだが、load_defaults "7.1"のデフォルトは:errorになる。Hartley McGuire
同CHANGELOGより
参考: config.action_dispatch.debug_exception_log_level -- Rails アプリケーションを設定する - Railsガイド
🔗 DATABASE option for railties:install:migrations by SixiS · Pull Request #48579 · rails/rails
railties:install:migrationsにDATABASEオプションを追加。
rails railties:install:migrationsの実行時に、マイグレーションのコピー先データベースを指定できる。$ rails railties:install:migrations DATABASE=animalsMatthew Hirst
同CHANGELOGより
参考: 週刊Railsウォッチ20230725: railties:install:migrationsにDATABASEオプションを追加
🔗 Introduce config.autoload_lib by fxn · Pull Request #48572 · rails/rails
新メソッド
config.autoload_lib(ignore:)は、libディレクトリをシンプルな方法でオートロードする機能を提供する。# config/application.rb config.autoload_lib(ignore: %w(assets tasks))詳しくは定数の自動読み込みと再読み込みガイドを参照。
Xavier Noria
同CHANGELOGより
参考: 週刊Railsウォッチ20230725: config.autoload_libを追加
🔗 Don't show secret_key_base for Rails.application.config#inspect by p8 · Pull Request #48500 · rails/rails
Rails.application.config#inspectでsecret_key_baseを表示しないよう修正。変更前:
Rails.application.config.inspect "#<Rails::Application::Configuration:0x00000001132b02a0 @root=... @secret_key_base=\"b3c631c314c0bbca50c1b2843150fe33\" ... >"変更後:
Rails.application.config.inspect "#<Rails::Application::Configuration:0x00000001132b02a0>"Petrik de Heus
同CHANGELOGより
参考: 週刊Railsウォッチ20230719: Rails.application.config#inspectでsecret_key_baseを出力しないよう修正
🔗 Deprecate calling Rails.application.secrets by p8 · Pull Request #48472 · rails/rails
Rails.application.secretsの呼び出しを非推奨化。Railsの
secretsは非推奨化されており、今後はcredentialsを使うこと。
Rails.application.secretsを呼び出したら非推奨警告を表示すべき。Petrik de Heus
同CHANGELOGより
ローカル環境では
secret_key_baseをRails.configに保存するようになった。Railsの
secretsは非推奨化されており、今後はcredentialsを使うこと。ローカル環境の
secret_key_baseは、Rails.application.secrets.secret_key_base(弱い非推奨: soft-deprecated)ではなく、Rails.config.secret_key_baseに保存されるようになった。Petrik de Heus
同CHANGELOGより
参考: 週刊Railsウォッチ20230704: Rails.application.secrets`呼び出しの非推奨化
🔗 Enable force_ssl=true in production by default by searls · Pull Request #47852 · rails/rails
production環境ではデフォルトで
force_ssl=trueを有効にするようになった。アプリへのすべてのアクセスが強制的にSSL(TSL)経由になり、Strict-Transport-Securityとセキュアcookieが使われるようになる。Justin Searls, Aaron Patterson, Guillermo Iguaran, Vinícius Bispo
同CHANGELOGより
参考: 週刊Railsウォッチ20230704: production環境でforce_ssl=trueをデフォルトで有効にする
🔗 Add engine draw_paths to app by gmcgibbon · Pull Request #48388 · rails/rails
Railsエンジンの
draw_pathsをアプリケーションのルーティングセットに追加するようになった。これにより、エンジンのパスで定義されたルーティングファイルがアプリケーションのルーティングに反映されるようになる。Gannon McGibbon
同CHANGELOGより
参考: 週刊Railsウォッチ20230628: エンジンのdraw_pathsをアプリのルーティングに追加するようになった
🔗 Support VISUAL env var, and prefer it over EDITOR by smmr0 · Pull Request #48374 · rails/rails
エディタを開くコマンドを指定する
VISUAL環境変数をサポート。この設定はEDITOR環境変数よりも優先される。Summer ☀️
同CHANGELOGより
参考: 週刊Railsウォッチ20230621: ビジュアルエディタ設定用のVISUAL環境変数を追加
🔗 Automatically add test/fixtures in engines to fixture_paths by shioyama · Pull Request #48287 · rails/rails
on_loadフックでエンジンのtest/fixturesパスをfixture_pathsに追加するようになった(パスがRailsアプリケーションのrootディレクトリの下に存在する場合)。Chris Salzberg
同CHANGELOGより
参考: 週刊Railsウォッチ20230613: fixture_pathsにエンジンのtest/fixturesを自動追加するようになった
🔗 Run after_bundle blocks with app:template command by jonathanhefner · Pull Request #48269 · rails/rails
bin/rails app:templateを実行すると、テンプレートが適用された後でbundle installとafter_bundleブロックを自動的に実行するようになった。Jonathan Hefner and Gerry Caulfield
同CHANGELOGより
参考: 週刊Railsウォッチ20230613: after_bundleブロックがapp:templateコマンドでも実行されるようになった
🔗 Enable passing column size to migration generator by joshbroughton · Pull Request #48210 · rails/rails
マイグレーションのジェネレータでカラムのサイズを属性で指定できるようになった。
従来も、マイグレーションで以下のようにサイズ指定は可能だった。
rails generate migration CreateAuthor name:text{65535}改修後は、マイグレーションのジェネレータで以下のような形で
size属性を指定可能になった。rails generate migration CreateAuthor name:text{medium}上のコマンドで生成されたマイグレーションには、以下のように
size: medium属性が追加される。class CreateAuthor < ActiveRecord::Migration[7.1] def change create_table :authors do |t| t.text :name, size: :medium end end endJosh Broughton, Hartley McGuire
同CHANGELOGより
🔗 Raise if setting a config key that is a method name by fxn · Pull Request #48030 · rails/rails
コンフィグのキーと同じ名前のメソッド名に対して値を代入しようとするとエラーを発生するようになった。
config.load_defaults = 7.0 # NoMethodError: Cannot assign to `load_defaults`, it is a configuration methodXavier Noria
同CHANGELOGより
参考: 週刊Railsウォッチ20230525: メソッド名になっているコンフィグキーに代入したらエラーを発生するようにした
🔗 Remove deprecated secrets:setup and deprecate secrets:edit/show by p8 · Pull Request #47801 · rails/rails
関連: Deprecate calling Rails.application.secrets by p8 · Pull Request #48472 · rails/rails
secrets:editコマンドとsecrets:showコマンドを非推奨化し、secrets:setupコマンドを削除。
bin/rails secrets:setupコマンドはRails 5.2のときから非推奨化されており、代わりにcredentialsを使うようになっていた。このコマンドは削除された。
secrets:editコマンドとsecrets:showコマンドは非推奨化された。今後はcredentialsを使うこと。詳しくは
bin/rails credentials:helpを実行してヘルプを参照のこと。Petrik de Heus
同CHANGELOGより
🔗 Load Rake tasks only once for command suggestions by jonathanhefner · Pull Request #47718 · rails/rails
bin/rails --helpがフレームワークとプラグインのコマンドのみを表示するようになった。
lib/tasks/*.rakeファイルで定義されたRakeタスクはこのヘルプに表示されなくなった。Rakeタスクのリストを表示するにはrake -Tを実行する。Jonathan Hefner
同CHANGELOGより
参考: 週刊Railsウォッチ20230425: "Did you mean?"のrakeタスク読み込みの重複を修正
🔗 Use Thor for built-in restart task by p8 · Pull Request #47619 · rails/rails
アプリのディレクトリの外からでも
bin/rails restartを実行できるようになった。従来は、以下を実行すると"No Rakefile found"エラーで失敗した。
$ blog/bin/rails restartPetrik de Heus
同CHANGELOGより
参考: 週刊Railsウォッチ20230405: Railsアプリをディレクトリの外から再起動可能になった
🔗 Support prerelease rubies in Gemfile template if possible by yahonda · Pull Request #47584 · rails/rails
Gemfileテンプレートでプレリリース版のRubyをサポート(RubyGems 3.3.13以降が必要)。
Yasuo Honda, David Rodríguez
同CHANGELOGより
🔗 Improve support for custom namespaces by fxn · Pull Request #47583 · rails/rails
オートロードのセットアップでユーザーが手動で設定したrootディレクトリを尊重するようになった。
これはカスタム名前空間に関連している。
たとえば、app/servicesディレクトリの下にあるクラスやモジュールをServices名前空間に定義したい場合は、以下のように書くだけでよい(app/services/servicesディレクトリの追加は不要)。# config/initializers/autoloading.rb # The namespace has to exist. # # In this example we define the module on the spot. Could also be created # elsewhere and its definition loaded here with an ordinary `require`. In # any case, `push_dir` expects a class or module object. module Services; end Rails.autoloaders.main.push_dir("#{Rails.root}/app/services", namespace: Services)詳しくは定数の自動読み込みと再読み込みガイドを参照。
Xavier Noria
同CHANGELOGより
参考: 週刊Railsウォッチ20230328: Zeitwerkでのカスタム名前空間のサポート方法をドキュメントに追加
🔗 Make irb a railties dependency by st0012 · Pull Request #47442 · rails/rails
irb gemがRailtiesの必須依存関係としてインストールされるようになった。
つまり、Railsをインストールするとirb gemも別途インストールされる。
以後、RailsコンソールではRuby組み込みのirbではなく、インストールしたirb gemが使われるようになる。これにより、Railsで信頼性の高い最新のirbを常に利用できるようになる。
Stan Lo
同CHANGELOGより
🔗 Use infinitive form for all task descriptions verbs by p8 · Pull Request #47215 · rails/rails
Railsコマンドの説明文の動詞を、
Creates...のような三単現からCreate...のような原形に変更。Petrik de Heus
同CHANGELOGより
参考: 週刊Railsウォッチ20230221: railsタスク説明文の動詞の表記を統一
🔗 Use config.credentials.* in credentials commands by jonathanhefner · Pull Request #47107 · rails/rails
bin/rails credentials:editなどのcredentialsコマンドが、config.credentials.content_pathやconfig.credentials.key_pathの値を尊重するようになった(config/application.rbまたはconfig/environments/#{Rails.env}.rbで設定されている場合)。変更前:
bin/rails credentials:editではRAILS_ENVが無視され、常にconfig/credentials.yml.encを編集する。
bin/rails credentials:edit --environment fooを実行するとconfig/credentials/foo.yml.encの作成や実行が可能だった。
config.credentials.content_pathまたはconfig.credentials.key_pathが設定されていても、bin/rails credentials:editでcredentialsを編集できなかった。credentialsを編集するには、bin/rails encrypted:edit path/to/credentials --key path/to/keyが必要だった。変更後:
bin/rails credentials:editを実行すると、アプリが現在のRAILS_ENVで読み込むcredentialsファイルを編集するようになった。
bin/rails credentials:editは、config.credentials.content_pathやconfig.credentials.key_pathの値を尊重する(config/application.rbまたはconfig/environments/#{Rails.env}.rbで設定されている場合)。
bin/rails credentials:edit --environment fooは、そのfoo環境向けのconfig.credentials.content_pathが未設定の場合にconfig/credentials/foo.yml.encの作成・編集を行う。最終的に、そのfoo環境で読み込まれるcredentialsファイルが編集される。Jonathan Hefner
同CHANGELOGより
参考: §10.1 独自のcredential -- Rails セキュリティガイド - Railsガイド
🔗 Add descriptions for non-Rake commands when running rails -h by p8 · Pull Request #46997 · rails/rails
rails -hで表示される非rake系コマンドに説明文を追加。Petrik de Heus
同CHANGELOGより
▶実行例(クリックして展開)
$ bin/rails -h
Usage:
bin/rails COMMAND [options]
You must specify a command. The most common commands are:
generate Generate new code (short-cut alias: "g")
console Start the Rails console (short-cut alias: "c")
server Start the Rails server (short-cut alias: "s")
test Run tests except system tests (short-cut alias: "t")
test:system Run system tests
dbconsole Start a console for the database specified in config/database.yml
(short-cut alias: "db")
plugin new Create a new Rails railtie or engine
All commands can be run with -h (or --help) for more information.
In addition to those commands, there are:
about List versions of all Rails frameworks and the environment
app:template Apply the template supplied by LOCATION=(/path/to/template)...
app:update Update configs and some other initially generated files (or...
assets:clean Removes old files in config.assets.output_path
assets:clobber Remove config.assets.output_path
assets:precompile Compile all the assets from config.assets.paths
assets:reveal Print all the assets available in config.assets.paths
assets:reveal:full Print the full path of assets available in config.assets.paths
cache_digests:dependencies Lookup first-level dependencies for TEMPLATE (like messages...
cache_digests:nested_dependencies Lookup nested dependencies for TEMPLATE (like messages/show...
credentials:diff Enroll/disenroll in decrypted diffs of credentials using git
credentials:edit Open the decrypted credentials in `$VISUAL` or `$EDITOR` fo...
credentials:show Show the decrypted credentials
db:create Create the database from DATABASE_URL or config/database.ym...
db:drop Drop the database from DATABASE_URL or config/database.yml ...
db:encryption:init Generate a set of keys for configuring Active Record encryp...
db:environment:set Set the environment value for the database
db:fixtures:load Load fixtures into the current environment's database
db:migrate Migrate the database (options: VERSION=x, VERBOSE=false, SC...
db:migrate:down Run the "down" for a given migration VERSION
db:migrate:redo Roll back the database one migration and re-migrate up (opt...
db:migrate:status Display status of migrations
db:migrate:up Run the "up" for a given migration VERSION
db:prepare Run setup if database does not exist, or run migrations if ...
db:reset Drop and recreate all databases from their schema for the c...
db:rollback Roll the schema back to the previous version (specify steps...
db:schema:cache:clear Clear a db/schema_cache.yml file
db:schema:cache:dump Create a db/schema_cache.yml file
db:schema:dump Create a database schema file (either db/schema.rb or db/st...
db:schema:load Load a database schema file (either db/schema.rb or db/stru...
db:seed Load the seed data from db/seeds.rb
db:seed:replant Truncate tables of each database for current environment an...
db:setup Create all databases, load all schemas, and initialize with...
db:system:change Change `config/database.yml` and your database gem to the t...
db:version Retrieve the current schema version number
destroy Remove code generated by `bin/rails generate`
dev:cache Toggle development mode caching on/off
encrypted:edit Open the decrypted file in `$VISUAL` or `$EDITOR` for editing
encrypted:show Show the decrypted contents of the file
importmap:install Setup Importmap for the app
initializers Print out all defined initializers in the order they are in...
log:clear Truncate all/specified *.log files in log/ to zero bytes (s...
middleware Print out your Rack middleware stack
notes Show comments in your code annotated with FIXME, OPTIMIZE, ...
restart Restart app by touching tmp/restart.txt
routes List all the defined routes
runner Run Ruby code in the context of your application
secret Generate a cryptographically secure secret key (this is typ...
secrets:edit **deprecated** Open the secrets in `$VISUAL` or `$EDITOR` f...
secrets:show **deprecated** Show the decrypted secrets
sitemap:clean Delete all Sitemap files in public/ directory
sitemap:create Generate sitemaps but don't ping search engines
sitemap:install Install a default config/sitemap.rb file
sitemap:refresh Generate sitemaps and ping search engines
sitemap:refresh:no_ping Generate sitemaps but don't ping search engines
standard Lint with the Standard Ruby style guide
standard:fix Lint and automatically make safe fixes with the Standard Ru...
standard:fix_unsafely Lint and automatically make fixes (even unsafe ones
stats Report code statistics (KLOCs, etc) from the application or...
stimulus:install Install Stimulus into the app
stimulus:install:importmap Install Stimulus on an app running importmap-rails
stimulus:install:node Install Stimulus on an app running node
tailwindcss:build Build your Tailwind CSS
tailwindcss:clobber Remove CSS builds
tailwindcss:install Install Tailwind CSS into the app
tailwindcss:watch Watch and build your Tailwind CSS on file changes
test:all Run all tests, including system tests
test:channels Run tests in test/channels
test:controllers Run tests in test/controllers
test:db Reset the database and run `bin/rails test`
test:functionals Run tests in test/controllers, test/mailers, and test/funct...
test:generators Run tests in test/lib/generators
test:helpers Run tests in test/helpers
test:integration Run tests in test/integration
test:jobs Run tests in test/jobs
test:mailboxes Run tests in test/mailboxes
test:mailers Run tests in test/mailers
test:models Run tests in test/models
test:units Run tests in test/models, test/helpers, and test/unit
time:zones[country_or_offset] List all time zones, list by two-letter country code (`bin/...
tmp:clear Clear cache, socket and screenshot files from tmp/ (narrow ...
tmp:create Create tmp directories for cache, sockets, and pids
turbo:install Install Turbo into the app
turbo:install:importmap Install Turbo into the app with asset pipeline
turbo:install:node Install Turbo into the app with webpacker
turbo:install:redis Switch on Redis and use it in development
version Show the Rails version
yarn:install Install all JavaScript dependencies as specified via Yarn
zeitwerk:check Check project structure for Zeitwerk compatibility
🔗 Show common commands when calling rails -h outside a Rails dir by p8 · Pull Request #46164 · rails/rails
rails -hが現在の状況に適したコマンドを表示するようになった。従来は、Railsアプリケーション以外のディレクトリで
rails -h(または単にrailsコマンド)を実行すると、rails newコマンドの実行オプションを表示していた。これでは、Railsでよく使われるコマンド一覧を見たいユーザーが戸惑う可能性がある。そうではなく、
rails -hを実行したら、共通のRailsコマンドについてはRailsアプリケーションディレクトリの中でも外でも常に表示すべき。Railsアプリケーションディレクトリの中で見たいコマンドは、Railsアプリケーションディレクトリの外で見たいコマンドと異なるので、ヘルプのUSAGEファイルを分割して、最も状況に適したコマンドを表示するようにした。
Petrik de Heus
同CHANGELOGより
参考: 週刊Railsウォッチ20230207: rails -hをRailsディレクトリの外で呼んだ場合にも共通コマンドを表示するようになった
🔗 Add a default health controller by dhh · Pull Request #46936 · rails/rails
新規アプリケーションで
Rails::HealthController#showが追加され、/upにマッピングされるようになった。ロードバランサーやアップタイムモニタは、アプリの稼働状況を知るための基本的なエンドポイントを必要としている。
このHealthControllerは、多くの状況で最初のエンドポイントとして役に立つ。DHH
同CHANGELOGより
参考: 週刊Railsウォッチ20230207: RailsにデフォルトでHealthControllerが追加されるようになる
🔗 Only use HostAuthorization if configured by skipkayhil · Pull Request #46858 · rails/rails
config.hostsが空でない場合にのみHostAuthorizationミドルウェアを読み込むようになった。Hartley McGuire
同CHANGELOGより
参考: 週刊Railsウォッチ20230131: 設定されていないHostAuthorizationミドルウェアを使わないようになった
🔗 Raise error on missing only unless by TooManyBees · Pull Request #43487 · rails/rails
before_actionのonly:またはexceptフィルタオプションで参照しているアクションが存在しない場合にエラーを発生するようになった。これはデフォルトで有効になっているが、以下のコンフィグで変更可能。# config/environments/production.rb config.action_controller.raise_on_missing_callback_actions = falseJess Bees
同CHANGELOGより
なお、厳密には7.1で生成したconfig/environments/のdevelopment.rbとtest.rbではこのコンフィグがtrueに設定されるようになります。デフォルトはfalseです。
参考: config.action_controller.raise_on_missing_callback_actions -- Rails アプリケーションを設定する - Railsガイド
参考: 週刊Railsウォッチ20230131: コールバックのonlyやexceptオプションで指定したシンボルがない場合にエラーにするようになった
🔗 Use puma worker count equal to processor count in production by dhh · Pull Request #46838 · rails/rails
production環境で、Pumaのワーカー数を物理プロセッサ数に設定するようになった。
この値は、ENV["WEB_CONCURRENCY"]で変更することも、生成されたconfig/puma.rbファイルを直接変更することも可能。DHH
同CHANGELOGより
参考: 週刊Railsウォッチ20230131: productionでPumaのワーカー数をプロセッサ数と同じになるようにする
🔗 Add default Dockerfiles by dhh · Pull Request #46762 · rails/rails
新規アプリに以下のDocker関連ファイルが追加されるようになった。
- Dockerfile
- .dockerignore
- bin/docker-entrypoint
--skip-dockerオプションでこれらのファイル生成をスキップ可能。
生成されるDocker関連ファイルに手を加えてproduction環境へのデプロイに利用することを意図している。開発用のDockerファイルではない点に注意(開発用についてはDocked Railsを参照)。例:
$ docker build -t app . $ docker volume create app-storage $ docker run --rm -it -v app-storage:/rails/storage -p 3000:3000 --env RAILS_MASTER_KEY=<see config/master.key> appこのDockerイメージからRailsコンソールやランナーも実行可能。
$ docker run --rm -it -v app-storage:/rails/storage --env RAILS_MASTER_KEY=<see config/master.key> app consoleApple Silicon(M1)環境からAMDまたはIntel環境にデプロイするマルチプラットフォーム向けのイメージを作成し、user/appをDocker Hubにプッシュする場合のコマンド:
$ docker login -u <user> $ docker buildx create --use $ docker buildx build --push --platform=linux/amd64,linux/arm64 -t <user/image> .DHH, Sam Ruby
同CHANGELOGより
参考: 週刊Railsウォッチ20230125: RailsにDockerfileとdocked gemが追加された
なお、その後activerecord/test/storage/以下も.gitignoreに追加されました。
🔗 Allow assets:precompile to be run in a production build step without passing in RAILS_MASTER_KEY by dhh · Pull Request #46760 · rails/rails
ENV["SECRET_KEY_BASE_DUMMY"]を追加。
本物のRAILS_MASTER_KEYをビルドプロセスに渡さずにassets:precompileなどのタスクを実行可能にするため、生成されたsecret_key_baseをproduction環境で利用できるようにする。Dockerfileレイヤでの利用例:
RUN SECRET_KEY_BASE_DUMMY=1 bundle exec rails assets:precompileDHH
同CHANGELOGより
参考: 週刊Railsウォッチ20230125: productionでRAILS_MASTER_KEYを渡さなくてもassets:precompileを実行可能にした
🔗 Add missing descriptions for additional commands in Rails help by p8 · Pull Request #46163 · rails/rails
Railsのヘルプで表示されていなかったコマンド説明文をすべて表示するようになった。
従来は、
rails helpのコマンド説明文の多くが表示されていなかった。
改修によって、rails -Tと同じコマンド説明文も表示されるようになった。Petrik de Heus
同CHANGELOGより
🔗 Use storage/ instead of db/ for sqlite3 db files by dhh · Pull Request #46699 · rails/rails
rails newでstorage/ディレクトリを常に生成するようになった。
このstorage/ディレクトリは、恒久的なファイルや、コンテナをマッピングする単一のマウントポイントを確実に配置できるようにするためのもの。そこで、SQLite3データベースファイルも今後はdb/ディレクトリではなく、このstorage/ディレクトリに置くことにした。db/ディレクトリは設定ファイルの置き場所であり、データの置き場所ではない。
DHH
同CHANGELOGより
参考: 週刊Railsウォッチ20221220: SQLite3のdbファイルはdb/ではなくstorage/に置くことにする
🔗 Disable Rails console IRB's autocompletion in production by default. by st0012 · Pull Request #46656 · rails/rails
production環境では
IRBのオートコンプリートをデフォルトで無効にするようになった。このデフォルト設定は
IRB_USE_AUTOCOMPLETE=trueでオーバーライドできる。Stan Lo
同CHANGELOGより
この修正はRails 7.0.5でリリース済みです。
参考: 週刊Railsウォッチ20230125: production環境のRailsコンソールでIRBのオートコンプリートがデフォルトで無効になった
🔗 Add AS::ParameterFilter.precompile_filters by jonathanhefner · Pull Request #46452 · rails/rails
config.precompile_filter_parametersを追加。これは
ActiveSupport::ParameterFilter.precompile_filtersを利用するconfig.filter_parametersのプリコンパイルを有効にする。フィルタの個数や種類にもよるが、フィルタをプリコンパイルすることでパフォーマンスの向上が期待できる。
config.load_defaults 7.1以降は、config.precompile_filter_parametersがデフォルトでtrueに設定される。Jonathan Hefner
同CHANGELOGより
参考: config.precompile_filter_parameters -- Rails アプリケーションを設定する - Railsガイド
🔗 Add after_routes_loaded hook for Engines to trigger code after application routes have been loaded by shioyama · Pull Request #46539 · rails/rails
after_routes_loadedフックをRailsエンジンのRails::Railtie::Configurationに追加。
これはアプリケーションのルーティングが読み込まれた後で呼び出されるフックを追加する。MyEngine.config.after_routes_loaded do # ルーティング読み込み後に実行しなければならないコード endChris Salzberg
同CHANGELOGより
参考: config.after_routes_loaded -- Rails アプリケーションを設定する - Railsガイド
🔗 Scaffold destroy action returns status code 303 by t27duck · Pull Request #45383 · rails/rails
scaffoldで新規生成されるコントローラの
destroyアクションにstatus: :see_otherを追加するよう修正。Tony Drake
同CHANGELOGより
この修正はRails 7.0.5でリリース済みです。
🔗 Add Rails.application.deprecators by jonathanhefner · Pull Request #46049 · rails/rails
Rails.application.deprecatorsを追加。
今後アプリケーションのdeprecatorsはここで集中管理されるようになる。個別の
deprecatorsをコレクションに追加したりコレクションから取り出したりできる。Rails.application.deprecators[:my_gem] = ActiveSupport::Deprecation.new("2.0", "MyGem") Rails.application.deprecators[:other_gem] = ActiveSupport::Deprecation.new("3.0", "OtherGem")このコレクションのコンフィグメソッドは、コレクション内の全
deprecatorsに影響する。Rails.application.deprecators.debug = true Rails.application.deprecators[:my_gem].debug # => true Rails.application.deprecators[:other_gem].debug # => trueさらに、以下のようにコレクション内の全
deprecatorsをsilenceブロック内でのみ抑制できる。Rails.application.deprecators.silence do Rails.application.deprecators[:my_gem].warn # => 警告を抑制 Rails.application.deprecators[:other_gem].warn # => 警告を抑制 endJonathan Hefner
同CHANGELOGより
参考: 週刊Railsウォッチ20221025: Rails.application.deprecatorsが追加
🔗 Move dbconsole logic to Active Record connection adapter. by gmcgibbon · Pull Request #46093 · rails/rails
dbconsoleのロジックをActive Recordのコネクションアダプタに移動。
コネクションのロジックをコマンドオブジェクトに置くのではなく、データベースアダプタがコンソールセッションへの接続を担当すべき。
このパッチは
#find_cmd_and_execをアダプタに移動し、インスタンス化せずにアダプタークラスを検索できる新しいAPIを公開する。Gannon McGibbon, Paarth Madan
同CHANGELOGより
🔗 Add MessageVerifiers and MessageEncryptors classes by jonathanhefner · Pull Request #44179 · rails/rails
Rails.application.message_verifiersを追加。
これはアプリケーションでmessage verifierを設定・作成するときの中心となる。これを利用することで、たとえば以下のように古い
secret_key_base値をローテーションできるようになる。config.before_initialize do |app| app.message_verifiers.rotate(secret_key_base: "old secret_key_base") end以下のようにmessage verifierをライブラリ向けに事前に設定することも可能。
ActiveStorage.verifier = Rails.application.message_verifiers["ActiveStorage"]Jonathan Hefner
同CHANGELOGより
🔗 Add ssl-mode option to dbconsole command and MySQLDatabaseTasks by p8 · Pull Request #46008 · rails/rails
dbconsoleコマンドでMySQLの
--ssl-modeオプションをサポート。データベースサーバーを識別するには、
--ssl-modeオプションにVERIFY_CAまたはVERIFY_IDENTITYを設定する必要がある。従来、このオプションはdbconsoleコマンドで無視されていた。Petrik de Heus
同CHANGELOGより
参考: 週刊Railsウォッチ20221011: dbconsoleコマンドとMySQLDatabaseTasksに--ssl-modeオプションを追加
🔗 Delegate application record generator description to orm hooked generator. by gmcgibbon · Pull Request #45975 · rails/rails
application_recordジェネレータのヘルプ説明文の表示を、ORMにフックされたジェネレータに委譲するようになった。Gannon McGibbon
同CHANGELOGより
🔗 Show BCC field in mailer preview by the-spectator · Pull Request #45935 · rails/rails
BCC受信者が存在する場合はAction Mailerのプレビューに表示するようになった。
Akshay Birajdar
同CHANGELOGより
🔗 Extend routes --grep to also filter routes by matching against path by orhantoy · Pull Request #45874 · rails/rails
routes --grepがパスにもマッチするように拡張。例:
$ bin/rails routes --grep /cats/1 Prefix Verb URI Pattern Controller#Action cat GET /cats/:id(.:format) cats#show PATCH /cats/:id(.:format) cats#update PUT /cats/:id(.:format) cats#update DELETE /cats/:id(.:format) cats#destroyOrhan Toy
同CHANGELOGより
参考: 週刊Railsウォッチ20220920: routes --grepでパスにマッチするルートをフィルタできるようになる
🔗 Better rails runner output for missing files by tekin · Pull Request #45875 · rails/rails
rails runnerでファイルがパスに存在しない場合のメッセージを改善。Tekin Suleyman
同CHANGELOGより
🔗 Replace MutexHook by MonitorHook to allow reentrancy by casperisfine · Pull Request #45857 · rails/rails
config.allow_concurrency = falseを設定するとMutexではなくMonitorが使われるようになった。これによって、
config.allow_concurrencyが無効な場合であってもconfig.active_support.executor_around_test_caseを有効にできるようになった。Jean Boussier
同CHANGELOGより
この変更はRails 7.0.4でリリース済みです。
🔗 Add routes --unused option to detect extraneous routes. by gmcgibbon · Pull Request #45701 · rails/rails
routes --unusedオプションで未使用のルーティングを検出できるようになった。例:
$ bin/rails routes --unused Found 2 unused routes: Prefix Verb URI Pattern Controller#Action one GET /one(.:format) action#one two GET /two(.:format) action#twoGannon McGibbon
同CHANGELOGより
参考: 週刊Railsウォッチ20220822: routes --unusedで冗長なルーティングを検出
🔗 Controller generator improvements by gmcgibbon · Pull Request #45627 · rails/rails
コントローラのジェネレータに、生成するジョブの親クラスを指定する
--parentオプションを追加。例:
bin/rails g controller admin/users --parent=admin_controllerを実行すると以下が生成される。class Admin::UsersController < AdminController # ... endGannon McGibbon
同CHANGELOGより
🔗 Support custom credentials templates by jonathanhefner · Pull Request #45544 · rails/rails
アプリのカスタム認証テンプレートをサポート。
rails credentials:editを実行すると、credentialsファイルが存在しない場合はlib/templates/rails/credentials/credentials.yml.ttでcredentialsファイルの生成を試みてからデフォルトのテンプレートにフォールバックする。これにより、たとえばオープンソースのRailsアプリ(暗号化credentialsファイルがリポジトリに置かれていない)でも、ユーザーがアプリをインストールしたときに
rails credentials:editを実行すれば、事前入力済みのカスタムcredentialsファイルを得られるようになる。Jonathan Hefner
同CHANGELOGより
参考: 週刊Railsウォッチ20220719: credentialの改良2つ
🔗 Omit secret_key_base for dev and test credentials by jonathanhefner · Pull Request #45574 · rails/rails
利便性のため、新規に生成した環境ごとのcredentialsファイル(
config/credentials/production.yml.encなど)に、config/credentials.yml.encと同様にsecret_key_baseが含まれるようになった。
ただしdevelopment環境とtest環境は対象外。Jonathan Hefner
同CHANGELOGより
参考: 週刊Railsウォッチ20220725: production向けのcredentialファイル生成にのみsecret_key_baseを含めるよう修正
🔗 Improve generator implied option handling by jonathanhefner · Pull Request #45520 · rails/rails
アプリジェネレータの
--minimalオプションで--no-*オプションを指定できるようになった。これにより、--minimalオプションに的確に機能を追加できる。$ rails new my_cool_app --minimal Based on the specified options, the following options will also be activated: --skip-active-job [due to --minimal] --skip-action-mailer [due to --skip-active-job, --minimal] --skip-active-storage [due to --skip-active-job, --minimal] --skip-action-mailbox [due to --skip-active-storage, --minimal] --skip-action-text [due to --skip-active-storage, --minimal] --skip-javascript [due to --minimal] --skip-hotwire [due to --skip-javascript, --minimal] --skip-action-cable [due to --minimal] --skip-bootsnap [due to --minimal] --skip-dev-gems [due to --minimal] --skip-system-test [due to --minimal] ... $ rails new my_cool_app --minimal --no-skip-active-storage Based on the specified options, the following options will also be activated: --skip-action-mailer [due to --minimal] --skip-action-mailbox [due to --minimal] --skip-action-text [due to --minimal] --skip-javascript [due to --minimal] --skip-hotwire [due to --skip-javascript, --minimal] --skip-action-cable [due to --minimal] --skip-bootsnap [due to --minimal] --skip-dev-gems [due to --minimal] --skip-system-test [due to --minimal] ...Brad Trick and Jonathan Hefner
同CHANGELOGより
参考: 週刊Railsウォッチ20220711: rails newの暗黙のオプションの扱いを改善
🔗 Set skip_dev_gems to be a class_option by brtrick · Pull Request #45402 · rails/rails
アプリのジェネレータに
--skip-dev-gemsオプションを追加。
web-consoleなどのdevelopment環境向けgemをGemfileに追加しないようにする。Brad Trick
同CHANGELOGより
参考: 週刊Railsウォッチ20220704: development環境用gemのインストールをスキップするオプションを追加
🔗 Skip Active Storage and Action Mailer if Active Job is skipped by etiennebarrie · Pull Request #45354 · rails/rails
アプリのジェネレータでActive JobをスキップするとActive StorageとAction Mailerもスキップするようになった。
Étienne Barrié
同CHANGELOGより
この修正はRails 7.0.4でリリース済みです。
🔗 Correctly check if frameworks are disabled when running app:update by etiennebarrie · Pull Request #45351 · rails/rails
スキップしてあったフレームワークの機能が
app:updateを実行したときに再インストールされないよう修正。Étienne Barrié and Paulo Barros
同CHANGELOGより
この機能はRails 7.0.4でリリース済みです。
参考: 週刊Railsウォッチ20220719: app:update実行時に機能がconfig/application.rbで無効になっているかをチェックするようになった
🔗 Delegate model generator description to orm hooked generator by gmcgibbon · Pull Request #45315 · rails/rails
モデルのジェネレータのヘルプ説明文の表示を、ORMにフックされたジェネレータに委譲するようになった。
Gannon McGibbon
同CHANGELOGより
🔗 Wrap rails runner in executor by casperisfine · Pull Request #44999 · rails/rails
rails runnerスクリプトをexecutor内部で実行するようになった。これにより、
rails runnerでエラーレポートやクエリキャッシュなどを使えるようになる。Jean Boussier
同CHANGELOGより
🔗 Avoid booting in development then test for test tasks by etiennebarrie · Pull Request #44106 · rails/rails
テストタスクでアプリをtest環境で起動する前にdevelopment環境で起動しないようになった。
test:systemやtest:modelsなどのRailsテストサブタスクを実行すると、rake経由でアプリが2回起動されていた。
修正後は、すべてのtest:*サブタスクがThorタスクとして定義され、直接test環境を読み込むようになった。Étienne Barrié
同CHANGELOGより
参考: 週刊Railsウォッチ20220606: テスト系タスクでアプリが2回起動されるのを修正
🔗 Deprecate behaviour constant by gmcgibbon · Pull Request #45180 · rails/rails
Rails::Generators::Testing::Behaviour(英国スペル)を非推奨化。今後はRails::Generators::Testing::Behavior(米国スペル)を使うこと。Gannon McGibbon
同CHANGELOGより
参考: 週刊Railsウォッチ20220606: 番外: behaviour->behavior
🔗 Rotate Default Logs on Each 100MB by berniechiu · Pull Request #44888 · rails/rails
config.log_file_sizeコンフィグでローカル環境およびtest環境のロガー上限サイズを設定できるようになった。デフォルトは
100MB。Bernie Chiu
同CHANGELOGより
参考: config.log_file_size -- Rails アプリケーションを設定する - Railsガイド
🔗 Enroll new apps in decrypted diffs of credentials by jonathanhefner · Pull Request #39686 · rails/rails
新規アプリのcredentials(config/credentials.yml.enc)のdiffを、デフォルトで復号した形でGitに登録するようになった。この振る舞いは、アプリジェネレータに
--skip-decrypted-diffsフラグを渡すことでオフにできる。Jonathan Hefner
同CHANGELOGより
参考: bin/rails credentials · Linyclar
🔗 Support declarative-style test name filters by jonathanhefner · Pull Request #44290 · rails/rails
bin/rails testコマンドでテスト名を宣言的に指定できるようになった。これによって、以下のようなテストを宣言的なスタイルで実行できるようになる。
class MyTest < ActiveSupport::TestCase test "does something" do # ... end end以下のように宣言されたテスト名を指定できる。
$ bin/rails test test/my_test.rb -n "does something"以下のようにテスト名を指定するときにメソッド名に展開しなくてもよくなる。
$ bin/rails test test/my_test.rb -n test_does_somethingJonathan Hefner
同CHANGELOGより
🔗 add --js alias to --javascript and --skip-js alias to --skip-javscript by dorianmariefr · Pull Request #43754 · rails/rails
rails newに--jsオプションと--skip-javascriptオプションを追加。
--js:rails new --javascript ...のエイリアス。
-jと同じ(例:rails new --js esbuild ...)--skip-js:rails new --skip-javascript ...のエイリアス
-Jと同じ(例:rails new --skip-js ...)Dorian Marié
同CHANGELOGより
参考: §1.1 rails new -- コマンドラインツール - Railsガイド
🔗 Fix rails test command to handle leading dot slash by shouichi · Pull Request #45085 · rails/rails
rails testに.付きの相対パスを渡せるようになった。
rails test ./test/model/post_test.rbで(全テストファイルではなく)単一ファイルのテストを実行するように修正。Shouichi Kamiya and oljfte
同CHANGELOGより
🔗 Deprecate config.enable_dependency_loading · rails/rails@cbfe735
config.enable_dependency_loadingを非推奨化。このフラグは
classicオートローダーの制約に対処するために使われていたものであり、現在は無効。この非推奨に対応するには、このコンフィグへの参照を削除するだけでよい。Xavier Noria
同CHANGELOGより
参考: §3.2.16 config.enable_dependency_loading -- Rails アプリケーションを設定する - Railsガイド
🔗 Define config.reload to be !config.cache_classes by fxn · Pull Request #44870 · rails/rails
config.enable_reloadingというコンフィグ名を新たに定義。名前から直感的にわかりやすくするため、!config.cache_classesと動作が等しくなるように定義する。今後は、
config.enable_reloadingとconfig.reloading_enabled?が推奨されるが、互換性のためconfig.cache_classesもサポートされる。Xavier Noria
同CHANGELOGより
参考: §3.2.16 config.enable_reloading -- Rails アプリケーションを設定する - Railsガイド
参考: 週刊Railsウォッチ20220425: config.enable_reloadingを追加
🔗 Add yarn install into bin/setup when not using importmap by duduribeiro · Pull Request #44717 · rails/rails
bin/setupコマンドにJavaScript依存関係を追加。esbuild、webpack、rolloutを使う場合は
bin/setupにyarn installを追加する。Carlos Ribeiro
同CHANGELOGより
参考: 週刊Railsウォッチ20220404: importmapを使わない場合にbin/setupでyarnをインストールする
🔗 Use controller_class_path in Rails::Generators::NamedBase#route_url by pixeltrix · Pull Request #44670 · rails/rails
Rails::Generators::NamedBaseの#route_urlでcontroller_class_pathを使うよう修正。これによって、名前空間化されたコントローラを生成するときに
--model-nameでトップレベルのモデルを指定すると、route_urlが正しいパスを返すようになる。従来は以下のコマンドを実行すると、
$ bin/rails generate scaffold_controller Admin/Post --model-name Postコントローラのアクションに付けられるコメントが以下のようになっていた。
# GET /posts def index @posts = Post.all end修正後は以下のように正しいコメントが生成される。
# GET /admin/posts def index @posts = Post.all end修正: #44662
Andrew White
同CHANGELOGより
🔗 Disable config.add_autoload_paths_to_load_path by default in Rails 7.1 by casperisfine · Pull Request #44133 · rails/rails
オートロードされたパスが
$LOAD_PATHに追加されなくなった。これは、手動の
require呼び出しによる読み込みが不可能になったことを意味する。クラスやモジュールは参照可能。
bootsnapを使っていないアプリケーションでは、$LOAD_PATHのサイズが削減されてrequire呼び出しの速度が向上する。bootsnapを使っているアプリケーションでもbootsnapキャッシュのサイズが削減される。Jean Boussier
同CHANGELOGより
参考: §5 $LOAD_PATH{#load_path} -- 定数の自動読み込みと再読み込み (Zeitwerk) - Railsガイド
参考: 週刊Railsウォッチ20220117: Rails 7.1からconfig.add_autoload_paths_to_load_pathがデフォルトで無効になる
🔗 Remove X-Download-Options default header by sabljak · Pull Request #43968 · rails/rails
デフォルトの
X-Download-Optionsヘッダーを削除。このヘッダーは、2022年に廃止されたInternet Explorerでしか使われておらず、Rails 7はInternet Explorerをフルサポートしていないので、このヘッダをデフォルトにすべきではない。
Harun Sabljaković
同CHANGELOGより
参考: Customizing the download experience (Windows) | Microsoft Learn
参考: 週刊Railsウォッチ20220117: デフォルトのヘッダーからX-Download-Optionsを削除
🔗 Change dockerfile from using Node 19 to match dev environment by rubys · Pull Request #46794 · rails/rails
Node.jsを利用するRailsアプリに.node-versionファイルを追加するようになった。
このファイルはNodeのバージョンマネージャで利用可能。
shadowspawn/node-version-usage: Document current usage of .node-version file生成されたDockerfileでも同じバージョンのNodeが使われるようになる。
Sam Ruby
同CHANGELOGより
参考: 週刊Railsウォッチ20230207: Node.jsを使うRailsアプリに.node-versionファイルを追加してDockerfileで参照するようになった
以前の変更については7-0-stableのCHANGELOGを参照。
関連記事
Rails 7.1に入る主要な機能まとめ(2)error_highlight対応、routes --grepほか(翻訳)
概要
MITライセンスに基づいて翻訳・公開いたします。