Rails 4.2の注目ポイント
本リリースノートでは、主要な変更についてのみ説明します。ここに紹介されていない機能、バグ修正、変更の詳細についてはGitHubにあるRailsメインリポジトリの コミットリスト を参照してください。
既存のアプリケーションをアップグレードするのであれば、その前に質のよいテストカバレッジを用意するのはよい考えです。Railのバージョンが4.1に達していない場合は、まずアプリケーションをRails 4.1にアップグレードし、アプリケーションが期待どおりに動作することを確認してからRails 4.2にアップグレードしてください。アップグレードの際に注意すべき点のリストについては、Ruby on Rails アップグレードガイドを参照してください。
Active Jobとは、Rails 4.2から採用された新しいフレームワークです。Active Jobは、Resque、Delayed Job、Sidekiqなど、さまざまなクエリシステムの最上位に位置するものです。
Active Job APIを使用して記述されたジョブは、Active Jobがサポートするどのクエリシステムでもアダプタを介して実行できます。Active Jobは、ジョブを直ちに実行できるインラインランナー (inline runner) として最初から構成済みです。
ジョブの引数にActive Recordオブジェクトを与えたくなることはよくあります。Active Jobでは、オブジェクト参照をURI (uniform resource identifiers) として渡します。オブジェクト自身をマーシャリングしません。このURIは、Railsに新しく導入されたGlobal IDライブラリによって生成され、ジョブはこれを元にオブジェクトを参照します。Active Recordオブジェクトをジョブの引数として渡すと、内部的には単にGlobal IDが渡されます。
たとえば、trashableというActive Recordオブジェクトがあるとすると、以下のようにシリアライズをまったく行わずにジョブに引き渡すことができます。
class TrashableCleanupJob < ActiveJob::Base def perform(trashable, depth) trashable.cleanup(depth) end end
詳細については、Active Jobの基礎を参照してください。
今回のリリースで、Action MailerはActive Jobの最上位に配置され、deliver_laterメソッドを使用してジョブキューからメールを送信できるようになりました。これにより、キューを非同期 (asynchronous) に設定すればコントローラやモデルの動作がキューによってブロックされなくなりました (ただしデフォルトのインラインキューではコントローラやモデルの動作はブロックされます)。
deliver_nowメソッドを使用すれば、メールを直ちに送信できます。
Adequate Recordとは、Active Recordの性能を向上させるさまざまな改良の総称であり、いわゆるfindやfind_by呼び出し、および一部の関連付けクエリの動作速度を最大2倍に向上させます。
この改善は、よく用いられるSQLクエリを準備済みのSQL文 (prepared statement) としてキャッシュし、同様の呼び出しが発生した場合にそれを使い回すことによって行っています。これにより、以後の呼び出しでのクエリ生成作業の大半がスキップされるようになります。詳細については、Aaron Pattersonのブログ記事を参照してください。
Active Recordは、サポートされている動作に対してこのAdequate Recordを自動的に適用するので、コードや設定の変更など開発者が何かを行う必要はありません。Adequate Recordでサポートされている動作の例を以下に示します。
Post.find(1) # 最初の呼び出しで準備済みSQL文が生成およびキャッシュされる Post.find(2) # キャッシュされた準備済みSQL文は以後の呼び出しで再利用される Post.find_by_title('first post') Post.find_by_title('second post') post.comments post.comments(true)
上の例で、メソッド呼び出しで渡された値そのものは準備済みSQL文のキャッシュに含まれていない点にご注目ください。全体をキャッシュしているのではなく、キャッシュされたSQL文が値のプレースホルダーとなっており、値だけ差し替えられている点が重要です。
以下のような場合にはキャッシュは使用されません。
findで (単一のidではなく) idのリストを検索する。例:# キャッシュされない Post.find(1, 2, 3) Post.find([1,2])
find_byでSQLフラグメントを使用しているPost.find_by('published_at < ?', 2.weeks.ago)
Rails 4.2で新規生成したアプリケーションにはデフォルトでWeb Console gemが含まれるようになりました。Web Console gemはすべてのエラーページに対話操作可能なRubyコンソールを追加し、consoleビューとコントローラヘルパーメソッドを提供します。
エラーページで対話的コンソールが利用できるようになったことで、例外が発生したコンテキストで自由にコードを実行できるようになりました。consoleヘルパーは、画面出力が完了した最終的な状態のコンテキストで対話的コンソールを起動します。このヘルパーは、どのビューやコントローラからでも自由に呼び出すことができます。
マイグレーション用DSLで外部キーの追加・削除がサポートされました。今後は外部キーもschema.rbにダンプされます。現時点では、外部キーがサポートされるのはmysql、mysql2、およびpostgresqlアダプタのみです。
# `authors.id`を参照する`articles.author_id`への外部キーを追加する add_foreign_key :articles, :authors # `users.lng_id`を参照する`articles.author_id`への外部キーを追加する add_foreign_key :articles, :users, column: :author_id, primary_key: "lng_id" # `accounts.branch_id`の外部キーを削除する remove_foreign_key :accounts, :branches # `accounts.owner_id`の外部キーを削除する remove_foreign_key :accounts, column: :owner_id
完全な説明については、APIドキュメントの add_foreign_key および remove_foreign_key を参照してください。
前のバージョンで非推奨に指定されていた機能が削除されました。今回のリリースで新たに非推奨指定された機能については個別のコンポーネントの情報を参照してください。
以下の変更については、アップグレード時に対応が必要となることがあります。
renderに文字列の引数を与えた場合の挙動の変更以前は、コントローラのアクションでrender "foo/bar"を呼び出すことはrender file: "foo/bar"を呼び出すことと同等でした。この動作はRails 4.2から変更され、render template: "foo/bar"と同等になりました。ファイルを指定したい場合は明示的に(render file: "foo/bar")と書いてください。
respond_withとクラスレベルのrespond_toの扱いについてrespond_withと、これに対応するクラスレベルのrespond_toはresponders gemに移動されました。この機能を使用したい場合は、Gemfileにgem 'responders', '~> 2.0'を追記してください。
# app/controllers/users_controller.rb class UsersController < ApplicationController respond_to :html, :json def show @user = User.find(params[:id]) respond_with @user end end
インスタンスレベルでのrespond_toは影響を受けません。
# app/controllers/users_controller.rb class UsersController < ApplicationController def show @user = User.find(params[:id]) respond_to do |format| format.html format.json { render json: @user } end end end
rails serverのデフォルトホストRackの変更 により、rails serverコマンドを実行した際のデフォルトのホストが0.0.0.0からlocalhostに変更されました。この変更は標準的なローカルでの開発ワークフローにほとんど影響を与えないはずです。http://127.0.0.1:3000 および http://localhost:3000 の動作はどちらも以前と同じであるからです。
ただし、今回の変更により、別のPCからRailsサーバーへのアクセスは以前と同じようにはできなくなります。たとえば、development環境が仮想マシン上にあり、ホストマシンからこのdevelopment環境にアクセスする場合などがこれに該当します。
このような場合、サーバーを起動する際にrails server -b 0.0.0.0とすることで、以前と同じ動作を再現できます。
以前の動作に戻す場合は、必ずファイアウォールを適切に設定し、自社ネットワーク内の信頼できるPCだけが開発用サーバーにアクセスできるようにしてください。
HTMLサニタイザはLoofahと Nokogiriをベースにした、より新しく堅固な実装に置き換えられました。新しいサニタイザはより安全で、かつ強力で柔軟性に富んでいます。
新しいアルゴリズムが採用されたことにより、特定の汚染された入力をサニタイズした結果が従来と異なる場合があります。
従来のサニタイザと完全に同じ結果を得たい場合は、rails-deprecated_sanitizer gemを
Gemfileに追加することで従来と同じ結果を得られます。このgemはオプトイン (opt-in: 自らの責任で選ぶこと) であるため、非推奨の警告を表示しません。
rails-deprecated_sanitizerのサポートはRails 4.2でしか行われないことにご注意ください。Rails 5.0ではメンテナンスされません。
新しいサニタイザの変更点の詳細については、このブログ記事を参照してください。
assert_selectassert_selectはNokogiriベースで実装されました。
これにより、以前は有効であったセレクタの一部がサポートされなくなりました。アプリケーションでこれらを使用している場合は、アプリケーションを変更する必要があります。
属性セレクタの値に英文字以外の文字が含まれる場合は、値を引用符で囲む必要が生じることがあります
# 以前の動作 a[href=/] a[href$=/] # 現在の動作 a[href="/"] a[href$="/"]
要素のネストが正しくないHTMLを含むHTMLソースから生成されたDOMでは結果が異なることがあります。
例:
# content: <div><i><p></i></div> # 以前の動作 assert_select('div > i') # => true assert_select('div > p') # => false assert_select('i > p') # => true # 現在の動作 assert_select('div > i') # => true assert_select('div > p') # => true assert_select('i > p') # => false
選択したデータに実体参照文字が含まれている場合、比較のために選択された値は以前は実体参照文字のまま (AT&Tなど)でしたが、現在は
実体参照を評価してから比較するようになりました(AT&Tなど)。
# <p>AT&T</p>の内容の扱い # 以前の動作 assert_select('p', 'AT&T') # => true assert_select('p', 'AT&T') # => false # 現在の動作 assert_select('p', 'AT&T') # => true assert_select('p', 'AT&T') # => false
変更の詳細についてはChangelogを参照してください。
アプリケーションのジェネレータから--skip-action-viewオプションが削除されました。
(Pull Request)
rails applicationコマンドは削除されました。他のコマンドへの置き換えは行われていません。
(Pull Request)
production環境でconfig.log_levelを未設定のままにすることが非推奨になりました。
(Pull Request)
rake test:allが非推奨になりました。現在はrake testの方が推奨されます(これによりtestフォルダ以下のテストがすべて実行されます)。
(Pull Request)
rake test:all:dbが非推奨になりました。現在はrake test:dbが推奨されます。
(Pull Request)
Rails::Rack::LogTailerは非推奨になりました。代替はありません。
(Commit)
web-consoleがデフォルトのアプリケーションのGemfileに導入されました。
(Pull Request)
モデル関連付けをおこなうジェネレータにrequiredオプションが追加されました。
(Pull Request)
カスタム設定オプションを定義する時に使用するx名前空間が導入されました。
# config/environments/production.rb config.x.payment_processing.schedule = :daily config.x.payment_processing.retries = 3 config.x.super_debugger = true
これらのオプションは、以下のようにconfigurationオブジェクト全体で使用できます。
Rails.configuration.x.payment_processing.schedule # => :daily Rails.configuration.x.payment_processing.retries # => 3 Rails.configuration.x.super_debugger # => true
(Commit)
現在の環境設定を読み込むためのRails::Application.config_forが導入されました。
# config/exception_notification.yml: production: url: http://127.0.0.1:8080 namespace: my_app_production development: url: http://localhost:3001 namespace: my_app_development # config/production.rb Rails.application.configure do config.middleware.use ExceptionNotifier, config_for(:exception_notification) end
アプリケーションのジェネレータに--skip-turbolinksオプションが導入されました。これは生成時にTurbolinksを統合しないためのオプションです。
(Commit)
bin/setupスクリプトが導入されました。これはアプリケーションの初期設定時に設定を自動化するためのコードの置き場所となります。
(Pull Request)
development環境において、config.assets.digestのデフォルト値がtrueに変更されました。
(Pull Request)
rake notesに新しい拡張子を登録するためのAPIが導入されました。
(Pull Request)
Railsテンプレートで使用するafter_bundleコールバックが導入されました。
(Pull Request)
Rails.gem_versionメソッドが導入されました。これはGem::Version.new(Rails.version)を簡単に得るためのものです。
(Pull Request)
変更の詳細についてはChangelogを参照してください。
respond_with とクラスレベルでのrespond_toがRailsから外され、responders gem (version 2.0) に移されました。引き続きこの機能を使う場合は、
Gemfileにgem 'responders', '~> 2.0'を追加してください。
(Pull Request、詳細)
非推奨のAbstractController::Helpers::ClassMethods::MissingHelperErrorが削除されました。今後はAbstractController::Helpers::MissingHelperErrorを使用してください。
(Commit)
*_pathヘルパーでonly_pathオプションを使用することが非推奨になりました。
(Commit)
assert_tag、assert_no_tag、find_tag、find_all_tagが非推奨になりました。今後はassert_selectを使用してください。
(Commit)
ルーティングの:toオプションで、#という文字を含まないシンボルや文字列のサポートが非推奨になりました。
get '/posts', to: MyRackApp => (変更不要) get '/posts', to: 'post#index' => (変更不要) get '/posts', to: 'posts' => get '/posts', controller: :posts get '/posts', to: :index => get '/posts', action: :index
(Commit)
URLヘルパー内において、ハッシュのキーに文字列を使用することが非推奨になりました。例:
# 良くない例 root_path('controller' => 'posts', 'action' => 'index') # 良い例 root_path(controller: 'posts', action: 'index')
*_filterに関するメソッド群をドキュメントから削除しました。これらのメソッドの使用は推奨されていません。今後は*_actionを使用するようにしてください。
after_filter => after_action append_after_filter => append_after_action append_around_filter => append_around_action append_before_filter => append_before_action around_filter => around_action before_filter => before_action prepend_after_filter => prepend_after_action prepend_around_filter => prepend_around_action prepend_before_filter => prepend_before_action skip_after_filter => skip_after_action skip_around_filter => skip_around_action skip_before_filter => skip_before_action skip_filter => skip_action_callback
アプリケーションがこれらのメソッドに依存している場合は、*_actionに置き換える必要があります。これらのメソッドは今後非推奨になり、最終的にはRailsから削除される予定です。
render nothing: true、およびbodyをnilにしたレンダリングを行った場合にレスポンスのbodyを埋めていたスペース文字1つが追加されなくなりました。
(Pull Request)
テンプレートのダイジェストを自動的にETagsに含めるようになりました。 (Pull Request)
URLヘルパーに渡されるセグメントが自動的にエスケープされるようになりました。(Commit)
グローバルに使用してよいパラメータを指定するためのalways_permitted_parametersが導入されました。この設定のデフォルト値は['controller', 'action']です。
(Pull Request)
RFC 4791に基づいたMKCALENDARというHTTPメソッドを追加しました。
(Pull Request)
*_fragment.action_controller通知にペイロード上のコントローラ名とアクション名が含まれるようになりました。
(Pull Request)
ルーティング探索があいまい一致した場合のRouting Errorページの表示が改良されました。 (Pull Request)
CSRFによる失敗のログ出力を無効にするオプションが追加されました。 (Pull Request)
Railsが静的なアセットを送信するように設定されている場合、ブラウザがgzip圧縮ファイルをサポートし、かつgzipファイル (.gz) がサーバーのディスク上にあれば、アセットのgzip圧縮がサポートされるようになりました。
アセットパイプラインは、圧縮可能なすべてのアセットから.gzファイルをデフォルトで生成するようになりました。gzip圧縮されたファイルを送信することで、通信量が最小化され、アセットへのリクエストが高速化されます。Railsがproduction環境でアセットを提供する場合は、必ずCDN を有効にしてください。
(Pull Request)
結合テストの中でprocessヘルパーを呼び出すとき、パスの冒頭にスラッシュ ('/') が必要になりました。以前は省略することができましたが、これは内部実装による副作用であり、意図的な機能ではありません。例:
test "list all posts" do get "/posts" assert_response :success end
変更の詳細についてはChangelogを参照してください。
AbstractController::Base.parent_prefixesは非推奨になりました。ビューの検索対象を変更したい場合はAbstractController::Base.local_prefixesをオーバーライドしてください。
(Pull Request)
ActionView::Digestor#digest(name, format, finder, options = {})は非推奨になりました。
今後、引数は1つのハッシュとして渡す必要があります。
(Pull Request)
render "foo/bar"が拡張され、render file: "foo/bar"ではなくrender template: "foo/bar"を実行するようになりました。
(Pull Request)
フォームヘルパーが変更され、インラインCSSを持つ<div>要素が隠しフィールドの周辺で生成されなくなりました。
(Pull Request)
#{partial_name}_iterationという特殊なローカル変数が導入されました。このローカル変数は、コレクションのレンダリング時にパーシャルを使用します。これにより、#indexや#size、#first?やlast?メソッドを使って現在のイテレート中の状態にアクセスできるようになりました。
(Pull Request)
プレースホルダの国際化 (I18n) がlabelの国際化と同じルールに従うようになりました。
(Pull Request)
変更の詳細についてはChangelogを参照してください。
Action Mailerの*_pathヘルパーが非推奨になりました。今後は必ず*_urlヘルパーを使用してください。
(Pull Request)
deliver やdeliver!が非推奨になりました。今後はdeliver_nowやdeliver_now!を使用してください。
(Pull Request)
link_toやurl_forを使って絶対パスのURLを生成するとき、only_path: falseを渡す必要がなくなりました。
(Commit)
deliver_laterが導入されました。これは、アプリケーション内キューにジョブを流し込み、メールを非同期配信します。
(Pull Request)
show_previews設定オプションが追加されました。これはdevelopment環境の外でメーラーをプレビューできるようにするためのものです。
(Pull Request)
変更の詳細については、Changelogを参照してください。
cache_attributesおよびその同類が削除されました。すべての属性は常にキャッシュされるようになりました。
(Pull Request)
非推奨のActiveRecord::Base.quoted_locking_columnメソッドが削除されました。
(Pull Request)
非推奨のActiveRecord::Migrator.proper_table_nameが削除されました。今後はActiveRecord::Migrationのproper_table_nameインスタンスメソッドを代わりに使用してください。
(Pull Request)
未使用の:timestampタイプが削除されました。今後は常に透過的に:datetimeにエイリアスされるようになります。これにより、XMLシリアライズなどでカラムの種類がActive Recordの外に送信された場合の不整合が修正されます。
(Pull Request)
after_commitとafter_rollback内でのエラーの抑制が非推奨になりました。
(Pull Request)
has_many :through アソシエーションにおけるカウンタキャッシュの自動検知サポートが非推奨になりました (元々壊れていました)。今後は、has_many関連付けやbelongs_to関連付けでレコード全体を手動でカウンタキャッシュする必要があります。
(Pull Request)
.findや.exists?にActive Recordオブジェクトを渡すことは非推奨になりました。最初にオブジェクトのidを呼び出すべきです。
(Commit 1、2)
PostgreSQLで開始値を除外する範囲値に対する (不十分な) サポートが非推奨になりました。現在はPostgreSQLのRangeをRubyのRangeクラスにマップしています。ただし、RubyのRangeクラスでは開始値が外せないため、この方法は完全には実現できません。
現時点における、開始値を増分 (increment) する解決方法は正しくないため、非推奨になりました。増分の方法が不明なサブタイプ (例: #succは増分方法が未定義) については、開始値を除外する範囲指定によってArgumentErrorが発生します。
(Commit)
接続が行われていない状態でのDatabaseTasks.load_schemaの呼び出しが非推奨になりました。今後はDatabaseTasks.load_schema_currentを使用してください。
(Commit)
Replacementを使わずにsanitize_sql_hash_for_conditionsを使用することが非推奨になりました。クエリを発行したり更新する際にはRelationを使用することが、推奨APIとなります。
(Commit)
:nullオプションを渡さずにadd_timestampsやt.timestampsを使用することが非推奨になりました。現在の初期値はnull: trueですが、 Rails 5ではnull: falseに変更される予定です。
(Pull Request)
Reflection#source_macroが非推奨になりました。今後Active Recordでの必要性がなくなったため、代替はありません。
(Pull Request)
serialized_attributesは非推奨になりました。代替はありません。
(Pull Request)
カラムがない場合にcolumn_for_attributeがnilを返す動作が非推奨になりました。Rails 5.0ではnullオブジェクトが返されるようになる予定です。
(Pull Request)
Replacementを使わずに、インスタンスの状態に依存するアソシエーション (例: 引数をとるスコープと共に定義される場合) において、.joinsや.preload、.eager_loadを使うことが非推奨になりました。
(Commit)
create_tableが実行されるとき、SchemaDumperがforce: :cascadeを使うようになりました。これにより、外部キーが適切であればスキーマが再読み込みできるようになります。
単独の関連付けに対する:requiredオプションが追加されました。これは関連付けの存在確認の検証 (validation) を定義します。
(Pull Request)
ActiveRecord::Dirtyの動作が変更され、変更可能な値 (mutable value)に対する適切な変更を検出するようになりました。
何も変更がないときは、Active Recordモデル内のシリアライズされた要素は保存されなくなります。これらの変更は、PostgreSQLのstringカラムやjsonカラムでも同様に機能します。
(Pull Requests 1, 2, 3)
現在の環境のデータベースを空にするdb:purgeというRakeタスクが導入されました。
(Commit)
レコードが正しくないときにActiveRecord::RecordInvalidを返すActiveRecord::Base#validate!が導入されました。
(Pull Request)
valid?のエイリアスとしてvalidateが導入されました。
(Pull Request)
touchが複数の属性を一度に扱えるようになりました。
(Pull Request)
PostgreSQLアダプターでPostgreSQL 9.4+のjsonbデータタイプがサポートされました。
(Pull Request)
PostgreSQLとSQLiteアダプターで、String型の初期値から255文字制限が外れました。 (Pull Request)
PostgreSQLアダプターのカラム型でcitextがサポートされました。
(Pull Request)
PostgreSQLアダプターでユーザ定義のRangeタイプがサポートされました。 (Commit)
sqlite3:///some/pathのようなパスは今後絶対システムパスで解決されるようになりました。相対パスが必要な場合は、代わりにsqlite3:some/pathのような表記を使用してください
(従来sqlite3:///some/pathはsome/pathのような相対パスで解決されていましたが、これはRails 4.1で非推奨となっていました)。
(Pull Request)
モデルを整えた形式で出力するActiveRecord::Base#pretty_printが追加されました。
(Pull Request)
ActiveRecord::Base#reloadの動作がm = Model.find(m.id)と同等になりました。これは、カスタマイズされたSELECTに含まれていた余分な属性が今後は保持されないということを意味しています。
(Pull Request)
ActiveRecord::Base#reflectionsが返すハッシュのキーが、シンボルから文字列になりました。(Pull Request)
マイグレーションのreferencesメソッドでtypeオプションがサポートされました。外部キーの種類 (:uuidなど) を指定できます。
(Pull Request)
変更の詳細についてはChangelogを参照してください。
Validator#setupが削除されました。代替はありません。
(Pull Request) reset_#{attribute}が非推奨になりました。今後はrestore_#{attribute}を使用してください。
(Pull Request)
ActiveModel::Dirty#reset_changesが非推奨になりました。今後はclear_changes_informationを使用してください。
(Pull Request)
valid?のエイリアスとして#validateが導入されました。
(Pull Request)
ActiveModel::Dirtyにrestore_attributesメソッドが導入されました。これは、変更されたが保存されていない (dirty) 属性を以前の値に戻すためのものです。
(Pull Request 1, 2)
has_secure_password がデフォルトで空白のパスワードを許容するようになりました (例: 空白スペースのみのパスワード)。
(Pull Request)
has_secure_passwordで検証が有効になっている場合は、与えられたパスワードが72文字より少ないかどうかが検証されるようになりました。
(Pull Request)
変更の詳細についてはChangelogを参照してください。
非推奨のNumeric#ago、Numeric#until、Numeric#since、Numeric#from_nowが削除されました。
(Commit)
ActiveSupport::Callbacksでの文字列ベースの終端指定子 (terminator) がこれまで非推奨になっていたのが削除されました。
(Pull Request)
Kernel#silence_stderr、Kernel#capture、Kernel#quietlyが非推奨になりました。代替はありません。
(Pull Request)
Class#superclass_delegating_accessorが非推奨になりました。今後はClass#class_attributeを使用してください。
(Pull Request)
ActiveSupport::SafeBuffer#prepend! が非推奨となりました。現在は ActiveSupport::SafeBuffer#prepend が同様の振る舞いをします。
(Pull Request)
順序に依存するテストを明記するためのactive_support.test_orderオプションが導入されました。現在、このオプションの初期値は
:sortedで設定されていますが、Rails 5.0から:randomに変更される予定です。
(Commit)
ブロック中で明示的にレシーバーを示さなくてもObject#tryやObject#try!が使えるようになりました。
(Commit, Pull Request)
travel_toテストヘルパーがusecコンポーネントをゼロに切り詰めるように変更されました。
(Commit)
ブロック中で明示的にレシーバーを示さなくてもObject#with_optionsが使えるようになりました。
(Pull Request)
単語数を指定して文字列を切り詰めるString#truncate_wordsが導入されました。
(Pull Request)
ハッシュの値を変更するときの共通のパターンを簡潔にするため、Hash#transform_valuesとHash#transform_values!が追加されました。ただし、ハッシュのキーは変更されません。
(Pull Request)
アンダースコアなどを含むメソッド名などを英語らしくするhumanizeヘルパーメソッドが、冒頭のアンダースコアを除去するようになりました。
(Commit)
Concern#class_methodsが導入されました。Kernel#concernと同様、これはmodule ClassMethodsを置き換えるためのものであり、module Foo; extend ActiveSupport::Concern; endのような冗長な定形コードを避けるためのものです。
(Commit)
自動読み込みやリロードに関する新しいガイドが追加されました。
Railsを頑丈かつ安定したフレームワークにするために多大な時間を費やしてくださった多くの開発者については、Railsコントリビューターの完全なリストを参照してください。これらの方々全員に深く敬意を表明いたします。
Railsガイドは GitHub の yasslab/railsguides.jp で管理・公開されております。本ガイドを読んで気になる文章や間違ったコードを見かけたら、気軽に Pull Request を出して頂けると嬉しいです。Pull Request の送り方については GitHub の README をご参照ください。
原著における間違いを見つけたら『Rails のドキュメントに貢献する』を参考にしながらぜひ Rails コミュニティに貢献してみてください 🛠💨✨
本ガイドの品質向上に向けて、皆さまのご協力が得られれば嬉しいです。
Railsガイド運営チーム (@RailsGuidesJP)
Railsガイドは下記の協賛企業から継続的な支援を受けています。支援・協賛にご興味あれば協賛プランからお問い合わせいただけると嬉しいです。