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.logger
is 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 hash
Petrik 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=bun
Jason 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
テンプレートからwebdrivers
gemへの依存を削除。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-20
Shouichi 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=animals
Matthew 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 end
Josh 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 method
Xavier 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 restart
Petrik 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 = false
Jess 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 console
Apple 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:precompile
DHH
同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 # ルーティング読み込み後に実行しなければならないコード end
Chris 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 # => 警告を抑制 end
Jonathan 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#destroy
Orhan 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#two
Gannon 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 # ... end
Gannon 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環境のロガー上限サイズを設定できるようになった。デフォルトは
100
MB。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_something
Jonathan 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ライセンスに基づいて翻訳・公開いたします。