Rails 5.0の注目ポイント
rails
コマンドに統一本リリースノートでは、主要な変更についてのみ説明します。多数のバグ修正および変更点については、GitHubのRailsリポジトリにあるコミットリストのchangelogを参照してください。
既存のアプリケーションをアップグレードするのであれば、その前に質のよいテストカバレッジを用意するのはよい考えです。アプリケーションがRails 4.2までアップグレードされていない場合は先にそれを完了し、アプリケーションが正常に動作することを十分確認してからRails 5.0にアップデートしてください。アップグレードの注意点などについてはRuby on Railsアップグレードガイドを参照してください。
Action CableはRails 5に新しく導入されたフレームワークであり、RailsアプリケーションでWebSocketsとその他の部分をシームレスに統合します。
Action Cableが導入されたことで、Railsアプリケーションの効率の良さとスケーラビリティを損なわずに、通常のRailsアプリケーションと同じスタイル・方法でリアルタイム機能をRubyで書くことができます。クライアント側のJavaScriptフレームワークとサーバー側のRubyフレームワークを同時に提供する、フルスタックのフレームワークです。Active RecordなどのORMで書かれたすべてのドメインモデルにアクセスできます。
詳しくはAction Cableの概要をご覧ください。
APIのみを提供するシンプルなアプリケーションをRailsで簡単に作成できるようになりました。 X APIやGitHub APIのような一般公開APIサーバーはもちろん、カスタムアプリケーション用APIサーバーの作成・公開にも便利です。
API Railsアプリケーションの生成には次のコマンドを使います。
$ rails new my_api --api
上のコマンドでは次の3つの重要な動作を実行します。
ApplicationController
を、通常のActionController::Base
の代わりにActionController::API
から継承します。ミドルウェアと同様、Action Controllerモジュールのうち、ブラウザ向けアプリケーションでしか使われないモジュールをすべて除外します。生成されたAPIアプリケーションはAPI提供の基礎となり、必要に応じて機能を追加できるようになります。
詳しくはRailsによるAPI専用アプリケーションをご覧ください。
モデルでtypeの属性を定義します。必要であれば、既存の属性をオーバーライドすることもできます。
これを使って、モデルに割り当てられたSQLとの値の変換方法を制御できます。
また、ActiveRecord::Base.where
に渡された値の動作を変更することもできます。これによって、実装の詳細やモンキーパッチに頼ることなく、Active Recordの多くをサポートするドメインオブジェクトを使えるようになります。
以下を行うこともできます。
# db/schema.rb create_table :store_listings, force: true do |t| t.decimal :price_in_cents t.string :my_string, default: "original default" end # app/models/store_listing.rb class StoreListing < ActiveRecord::Base end store_listing = StoreListing.new(price_in_cents: '10.1') # 変更前 store_listing.price_in_cents # => BigDecimal.new(10.1) StoreListing.new.my_string # => "original default" class StoreListing < ActiveRecord::Base attribute :price_in_cents, :integer # カスタムのtype attribute :my_string, :string, default: "new default" # デフォルト値 attribute :my_default_proc, :datetime, default: -> { Time.now } # デフォルト値 attribute :field_without_db_column, :integer, array: true end # 変更後 store_listing.price_in_cents # => 10 StoreListing.new.my_string # => "new default" StoreListing.new.my_default_proc # => 2015-05-30 11:04:48 -0600 model = StoreListing.new(field_without_db_column: ["1", "2", "3"]) model.attributes # => {field_without_db_column: [1, 2, 3]}
カスタムTypeの作成:
独自のtypeを定義できます。独自のtype定義は、値のtypeで定義されたメソッドに応答する場合に限り行えます。deserialize
メソッドやcast
メソッドは、作成したtypeオブジェクトで呼び出され、データベースやコントローラからのraw入力を引数に取ります。これは、お金のデータで通貨をカスタム換算する場合などに便利です。
クエリ:
ActiveRecord::Base.where
が呼び出されると、モデルのクラスで定義されたtypeを使って値をSQLに変換し、そのtypeオブジェクトでserialize
を呼び出します。
これにより、SQLクエリの発行時に行う値の変換方法を、オブジェクトで指定できるようになります。
ダーティトラッキング:
このtypeの属性は、「ダーティトラッキング」の実行方法を変更できるようになります。
詳しくはドキュメントをご覧ください。
新しいテストランナーが導入され、Railsからのテスト実行機能が強化されました。
bin/rails test
と入力するだけでテストランナーを使えます。
テストランナーは、RSpec
、minitest-reporters
、maxitest
などから着想を得ています。
次のような多数の改良が施されています。
-f
オプションを付けると失敗時に即座にテストを停止できるようになり、全テストの完了を待たなくて済む-d
オプションを付けるとテストが完了するまでメッセージ出力を待たせることができる。-b
オプションを付けると完全な例外バックトレースを出力できる。minitest
と統合されてさまざまなオプションが利用できるようになった: -s
でシードデータを指定、-n
で特定のテスト名を指定して実行、-v
で詳細出力をオン、など。変更の詳細についてはChangelogを参照してください。
デバッガのサポートを削除。debugger
はRuby 2.2でサポートされないため、今後はbyebugを利用すること。
(コミット)
非推奨のtest:all
タスクとtest:all:db
タスクを削除。
(コミット)
非推奨のRails::Rack::LogTailer
を削除。
(コミット)
非推奨のRAILS_CACHE
定数を削除。
(コミット)
非推奨のserve_static_assets
設定を削除。
(コミット)
ドキュメント作成タスクdoc:app
、doc:rails
、doc:guides
を削除。
(コミット)
Rack::ContentLength
ミドルウェアをデフォルトから削除。(コミット)
config.static_cache_control
を廃止。今後はconfig.public_file_server.headers
を使うこと。
(プルリク)
config.serve_static_files
を廃止。今後はconfig.public_file_server.enabled
を
(プルリク)
rails
タスク名前空間のタスクを削除。今後はapp
名前空間が使われる。
(例: rails:update
タスクやrails:template
タスクはapp:update
やapp:template
に変更された)
(プルリク)
Railsテストランナーbin/rails test
を追加。
(プルリク)
新規アプリケーションやプラグインのREADMEがマークダウン形式のREADME.md
になった。
(コミット,
プルリク)
Railsアプリケーションをtouch tmp/restart.txt
で再起動するbin/rails restart
タスクを追加。
(プルリク)
すべての定義済みイニシャライザをRailsでの起動順に出力するbin/rails initializers
タスクを追加。
(プルリク)
developmentモードでのキャッシュのオンとオフを指定するbin/rails dev:cache
を追加。
(プルリク)
development環境を自動でアップデートするbin/update
スクリプトを追加。
(プルリク)
生成されるアプリケーションはLinuxやMac OS X上で「ファイルシステムのイベント監視」(evented file system monitor)が有効になる。--skip-listen
オプションを追加するとこの機能を無効にできる。
(コミット、commit)
生成したアプリケーションは、RAILS_LOG_TO_STDOUT
環境変数を使ってproduction環境でSTDOUTへのログ出力を指定できる。
(プルリク)
新しいアプリケーションでは、IncludeSudomainsヘッダのHSTS(HTTP Strict Transport Security)がデフォルトで有効になる。 (プルリク)
アプリケーションジェネレータから、新しくconfig/spring.rb
ファイルが出力される。これを用いてSpringの監視対象となる共通ファイルを追加できる。
(コミット)
新規アプリケーション生成時にAction Mailerをスキップする--skip-action-mailer
を追加。
(プルリク)
tmp/sessions
ディレクトリと、これに関連するclear rakeタスクを削除。
(プルリク)
scaffoldジェネレータで生成する_form.html.erb
を、ローカル変数を使うように変更。
(プルリク)
production環境でクラスの自動読み込みを無効化。 (コミット)
変更の詳細についてはChangelogを参照してください。
ActionDispatch::Request::Utils.deep_munge
を削除。
(コミット)
ActionController::HideActions
を削除。
(プルリク)
プレースホルダメソッドであるrespond_to
とrespond_with
を削除し、responders gemに移動。
(コミット)
非推奨のアサーションファイルを削除。 (コミット)
URLヘルパーで使われていた非推奨の文字列キーを削除。 (コミット)
非推奨のonly_path
オプションを*_path
ヘルパーから削除。
(コミット)
非推奨のNamedRouteCollection#helpers
を削除。
(コミット)
#
を含まない:to
オプション(非推奨)のルーティング定義サポートを削除。
(コミット)
非推奨のActionDispatch::Response#to_ary
を削除。
(コミット)
非推奨のActionDispatch::Request#deep_munge
を削除。
(コミット)
非推奨のActionDispatch::Http::Parameters#symbolized_path_parameters
を削除。
(コミット)
コントローラのテストから非推奨のuse_route
を削除。
(コミット)
assigns
とassert_template
を削除。これらのメソッドはrails-controller-testing gemに移動された。
(プルリク)
*_filter
コールバックをすべて非推奨に指定。今後は*_action
コールバックを使うこと。
(プルリク)
結合テストメソッド*_via_redirect
を非推奨に指定。今後同じ動作が必要な場合は、はリクエストの呼出し後にfollow_redirect!
を手動で実行すること。
(プルリク)
AbstractController#skip_action_callback
を非推奨に指定。今後は個別のskip_callbackメソッドを使うこと。
(プルリク)
render
メソッドの:nothing
オプションを非推奨に指定。
(プルリク)
head
メソッドの最初のパラメータをHash
として渡すことと、デフォルトのステータスコードの利用を非推奨に指定。
(プルリク)
ミドルウェアのクラス名を文字列やシンボルで表すことを非推奨に指定。今後はクラス名をそのまま使うこと。 (コミット)
MIMEタイプを定数として利用することを非推奨に指定(Mime::HTML
など)。今後は「Mime[:html]
」のように添字演算子内でシンボルを使うこと。
(プルリク)
redirect_to :back
を非推奨に指定。今後はRedirectBackError
を避けるために、redirect_back
を使って必須のfallback_location
引数を受け取ること。
(プルリク)
ActionDispatch::IntegrationTest
とActionController::TestCase
で位置引数(positional argument)を非推奨に指定。今後はキーワード引数を使うこと。(プルリク)
パスパラメータ:controller
と:action
を非推奨に指定。
(プルリク)
コントローラのインスタンスでのenvメソッドを非推奨に指定。 (コミット)
ActionDispatch::ParamsParser
を非推奨に指定し、ミドルウェアスタックから削除。今後パラメーターパーサーの構成が必要な場合はActionDispatch::Request.parameter_parsers=
を使うこと。
(コミット, commit)
コントローラのアクションの外部で任意のテンプレートでレンダリングするActionController::Renderer
を追加。
(プルリク)
ActionController::TestCase
とActionDispatch::Integration
のHTTPリクエストメソッドにキーワード引数構文を統合。
(プルリク)
期限切れのないレスポンスをキャッシュするhttp_cache_forever
をAction Controllerに追加。
(プルリク)
リクエストのvariantのわかりやすい指定方法を追加。 (プルリク)
対応するテンプレートがない場合にはエラーの代わりにhead :no_content
でレンダリングする
(プルリク)
コントローラのデフォルトのフォームビルダーをオーバーライドする機能を追加。 (プルリク)
API専用アプリケーション向けのサポートを追加。API専用アプリケーションではActionController::Base
の代わりにActionController::API
が追加される。
(プルリク)
ActionController::Parameters
は今後HashWithIndifferentAccess
を継承しない。
(プルリク)
より安全にSSLを試したりオフにしたりできるよう、config.force_ssl
とconfig.ssl_options
を簡単に導入できるようにした。
(プルリク)
ActionDispatch::Static
に任意のヘッダーを返す機能を追加。
(プルリク)
protect_from_forgery
のprependのデフォルトをfalse
に変更。
(コミット)
ActionController::TestCase
はRails 5.1で専用gemに移行する予定。今後はActionDispatch::IntegrationTest
を使うこと。
(コミット)
Railsで生成するETagを「強い」ものから「弱い」ものに変更。 (プルリク)
コントローラのアクションでrender
が明示的に呼び出されず、対応するテンプレートもない場合、エラーの代わりにhead :no_content
を暗黙に出力する。
(プルリク1、2)
フォームごとのCSRFトークン用オプションを追加。 (プルリク)
リクエストのエンコーディングとレスポンスの解析(parse)を結合テストに追加。 (プルリク)
コントローラのアクションでレスポンスが明示的に定められていない場合の、デフォルトのレンダリングポリシーを更新。 (プルリク)
コントローラレベルでビューコンテキストにアクセスするActionController#helpers
を追加。
(プルリク)
破棄されたフラッシュメッセージをセッションに保存せずに除去。 (プルリク)
fresh_when
やstale?
にレコードのコレクションを渡す機能を追加。
(プルリク)
ActionController::Live
をActiveSupport::Concern
に変更。ActiveSupport::Concern
でextendしていない他のモジュールにはincludeされない。また、ActionController::Live
はproduction環境では有効にならない。ActionController::Live
が使われていると、生成されたスレッドから投げられた:warden
をミドルウェアでキャッチできない問題があった。これに対応するため、Warden
/Devise
の認証エラーを扱える特殊なコードをincludeする別のモジュールを使っている開発者を見かける。
(詳細)
変更の詳細についてはChangelogを参照してください。
非推奨のAbstractController::Base::parent_prefixes
を削除。
(コミット)
ActionView::Helpers::RecordTagHelper
を削除。この機能はrecord_tag_helper gemに移行済み。
(プルリク)
I18nでのサポート廃止に伴い、translate
の:rescue_format
オプションを削除。
(プルリク)
デフォルトのテンプレートハンドラをERB
からRaw
に変更。
(コミット)
コレクションのレンダリングで、複数の部分テンプレート(パーシャル)のキャッシュと取得を一度に行えるようになった。 (プルリク, commit)
明示的な依存関係指定にワイルドカードによるマッチングを追加。 (プルリク)
disable_with
をsubmitタグのデフォルトの動作に設定。これにより送信時にボタンを無効にし、二重送信を防止する。
(プルリク)
部分テンプレート(パーシャル)名はRubyの有効な識別子ではなくなった。 (コミット)
datetime_tag
ヘルパーでdatetime-local
を指定したinputタグが生成されるようになった。
(プルリク)
変更の詳細についてはChangelogを参照してください。
テンプレートを検索するときにデフォルトのロケールとI18nにフォールバックするようになった。 (コミット)
ジェネレーターで生成されたメーラーに_mailer
サフィックスを追加。コントローラやジョブと同様の命名規則に従う。
(プルリク)
assert_enqueued_emails
とassert_no_enqueued_emails
を追加。
(プルリク)
メーラーキュー名を設定するconfig.action_mailer.deliver_later_queue_name
設定を追加。
(プルリク)
Action Mailerビューでフラグメントキャッシュをサポート。
テンプレートでキャッシュが有効かどうかを検出するconfig.action_mailer.perform_caching
設定オプションを追加。
(プルリク)
変更の詳細については、Changelogを参照してください。
ネストした配列をクエリ値として渡す機能(非推奨)を削除。(プルリク)
非推奨のActiveRecord::Tasks::DatabaseTasks#load_schema
を削除。このメソッドはActiveRecord::Tasks::DatabaseTasks#load_schema_for
で置き換え済み。
(コミット)
非推奨のserialized_attributes
を削除。
(コミット)
has_many :through
の自動カウンタのキャッシュ(非推奨)を削除。
(コミット)
非推奨のsanitize_sql_hash_for_conditions
を削除。
(コミット)
非推奨のReflection#source_macro
を削除。
(コミット)
非推奨のsymbolized_base_class
とsymbolized_sti_name
を削除。
(コミット)
非推奨のActiveRecord::Base.disable_implicit_join_references=
を削除。
(コミット)
文字列アクセサによるコネクション利用へのアクセス(非推奨)を削除。 (コミット)
インスタンスに依存するプリロード(非推奨)のサポートを削除。 (コミット)
PostgreSQLでしか使われない値の範囲の下限値(非推奨)を削除。 (コミット)
キャッシュされたArelとのリレーションを変更したときの動作(非推奨)を削除。
今後はImmutableRelation
エラーが出力される。
(コミット)
ActiveRecord::Serialization::XmlSerializer
をコアから削除。この機能はactivemodel-serializers-xml gemに移行済み。(プルリク)
古いmysql
データベースアダプタのサポートをコアから削除。今後は原則としてmysql2
を使うこと。今後古いアダプタのメンテナンス担当者が決まった場合、アダプタは別のgemに切り出される予定。(プルリク1、2)
protected_attributes
gemのサポートを終了。
(コミット)
PostgreSQL 9.1以前のサポートを削除。 (プルリク)
activerecord-deprecated_finders
gemのサポートを終了。
(コミット)
クエリでクラスを値として渡すことを非推奨に指定。ユーザーは文字列を渡すこと。(プルリク)
Active Recordのコールバックチェーンを止めるためにfalse
を返すことを非推奨に指定。代わりにthrow(:abort)
の利用を推奨。(プルリク)
ActiveRecord::Base.errors_in_transactional_callbacks=
を非推奨に指定。
(コミット)
Relation#uniq
を非推奨に指定。今後はRelation#distinct
を使うこと。
(コミット)
PostgreSQLの:point
typeを非推奨に指定。今後はArray
ではなくPoint
オブジェクトを返す新しいtypeを使うこと。
(プルリク)
trueになる引数を関連付け用メソッドに渡して関連付けを強制的に再読み込みする手法を非推奨に指定。 (プルリク)
関連付けrestrict_dependent_destroy
エラーのキーを非推奨に指定。今後は新しいキー名を使うこと。
(プルリク)
#tables
の動作を統一。
(プルリク)
SchemaCache#tables
、SchemaCache#table_exists?
、SchemaCache#clear_table_cache!
を非推奨に指定。今後は新しい同等のデータソースを使うこと。
(プルリク)
SQLite3アダプタとMySQLアダプタのconnection.tables
を非推奨に指定。
(プルリク)
#tables
に引数を渡すことを非推奨に指定。一部のアダプタ(mysql2、sqlite3)の#tables
メソッドはテーブルとビューを両方返すが、他のアダプタはテーブルのみを返す。動作を統一するため、今後は#tables
はテーブルのみを返すようになる予定。
(プルリク)
table_exists?
を非推奨に指定。#table_exists?
メソッドでテーブルとビューが両方チェックされていることがあるため。#tables
の動作を統一するため、今後#table_exists?
はテーブルのみをチェックするようになる予定。
(プルリク)
find_nth
にoffset
を引数として渡すことを非推奨に指定。今後リレーションではoffset
メソッドを使うこと。
(プルリク)
DatabaseStatements
の{insert|update|delete}_sql
を非推奨に指定。
今後は{insert|update|delete}
パブリックメソッドを使うこと。
(プルリク)
use_transactional_fixtures
を非推奨に指定。今後はより明瞭なuse_transactional_tests
を使うこと。
(プルリク)
ActiveRecord::Connection#quote
にカラムを渡すことを非推奨に指定。
(コミット)
start
パラメータを補完するend
オプション(バッチ処理の停止位置を指定)をfind_in_batches
に追加。
(プルリク)
テーブルの作成中にforeign_key
オプションをreferences
に追加。
(コミット)
新しい属性API。(コミット)
ActiveRecord::Relation
に#cache_key
を追加。
(プルリク)
timestamps
のデフォルトのnull
値をfalse
に変更。
(コミット)
ActiveRecord::SecureToken
を追加。SecureRandom
を使うモデル内の属性で一意のトークン生成をカプセル化するメソッド。
(プルリク)
drop_table
に:if_exists
オプションを追加。
(プルリク)
ActiveRecord::Base#accessed_fields
を追加。データベース内の必要なデータだけをselectしたい場合に、参照したモデルでどのフィールドが読み出されたかをこのメソッドで簡単に調べられる。
(コミット)
ActiveRecord::Relation
に#or
メソッドを追加。WHERE句やHAVING句を結合するOR演算子。
(コミット)
#touch
に:time
オプションを追加。
(プルリク)
ActiveRecord::Base.suppress
を追加。指定のブロックを実行中にレシーバーが保存されないようにする。
(プルリク)
関連付けが存在しない場合、belongs_to
でバリデーションエラーが発生するようになった。この機能は関連付けごとにoptional: true
でオフにできる。また、belongs_to
のrequired
オプションも非推奨に指定。今後はoptional
を使うこと。
(プルリク)
db:structure:dump
の動作を設定するconfig.active_record.dump_schemas
を追加。
(プルリク)
config.active_record.warn_on_records_fetched_greater_than
オプションを追加。
(プルリク)
MySQLでネイティブJSONデータタイプをサポート。 (プルリク)
PostgreSQLでのインデックス削除の並列実行をサポート。 (プルリク)
接続アダプタに#views
メソッドと#view_exists?
メソッドを追加。
(プルリク)
ActiveRecord::Base.ignored_columns
を追加。カラムの一部をActive Recordに対して隠蔽する。
(プルリク)
connection.data_sources
とconnection.data_source_exists?
を追加。
Active Recordモデル(通常はテーブルやビュー)を支えるリレーションを特定するのに利用できる。
(プルリク)
フィクスチャファイルを使って、モデルのクラスをYAMLファイルそのものの中に設定できるようになった。 (プルリク)
データベースマイグレーションの生成時にuuid
をデフォルトの主キーに設定できる機能を追加。(プルリク)
ActiveRecord::Relation#left_joins
とActiveRecord::Relation#left_outer_joins
を追加。
(プルリク)
after_{create,update,delete}_commit
コールバックを追加。
(プルリク)
クラスのマイグレーションに出現するAPIのバージョンを管理し、既存のマイグレーションを損なわずにパラメータを変更したり、非推奨サイクルの間に書き換えるためにバージョンを強制適用したりできるようにした。 (プルリク)
ActionController::Base
に代わってApplicationController
を継承するように、ApplicationRecord
がアプリケーションのすべてのモデルのスーパークラスとして新設される。この変更により、アプリケーション全体のモデルの動作を1か所で変更できるようになった。
(プルリク)
ActiveRecordに#second_to_last
メソッドと#third_to_last
メソッドを追加。
(プルリク)
データベースオブジェクト(テーブル、カラム、インデックス)にコメントを追加して、PostgreSQLやMySQLのデータベースメタデータに保存する機能を追加。 (プルリク)
プリペアドステートメントをmysql2
アダプタに追加(mysql2 0.4.4以降向け)。
従来は古いmysql
アダプタでしかサポートされていなかった。
config/database.ymlにprepared_statements: true
と記述することでプリペアドステートメントが有効になる。
(プルリク)
ActiveRecord::Relation#update
を追加。リレーションオブジェクトに対して、そのリレーションにあるすべてのオブジェクトのコールバックでバリデーション(検証)を実行できる。
(プルリク)
save
メソッドに:touch
オプションを追加。タイムスタンプを変更せずにレコードを保存する場合に使える。
(プルリク)
PostgreSQL向けに式インデックスと演算子クラスのサポートを追加。 (コミット)
ネストした属性のエラーにインデックスを追加する:index_errors
オプションを追加。
(プルリク)
依存関係の削除(destroy)を双方向に行える機能を追加。 (プルリク)
トランザクションテストでのafter_commit
コールバックのサポートを追加。
(プルリク)
foreign_key_exists?
メソッドを追加。テーブルに外部キーが存在するかどうかを確認できる。
(プルリク)
touch
メソッドに:time
オプションを追加。レコードに現在時刻以外の時刻を指定する場合に使える。
(プルリク)
変更の詳細についてはChangelogを参照してください。
非推奨のActiveModel::Dirty#reset_#{attribute}
とActiveModel::Dirty#reset_changes
を削除
(プルリク)
XMLシリアライズを削除。この機能はactivemodel-serializers-xml gemに移行済み。 (プルリク)
ActionController::ModelNaming
モジュールを削除。
(プルリク)
Active Modelのコールバックチェーンを止めるためにfalse
を返すことを非推奨に指定。代わりにthrow(:abort)
の利用を推奨。(プルリク)
ActiveModel::Errors#get
、ActiveModel::Errors#set
、ActiveModel::Errors#[]=
メソッドの動作が一貫していないため、非推奨に指定。
(プルリク)
validates_length_of
の:tokenizer
オプションを非推奨に指定。今後はRubyの純粋な機能を使うこと。
(プルリク)
ActiveModel::Errors#add_on_empty
とActiveModel::Errors#add_on_blank
を非推奨に指定。置き換え先の機能はなし。
(プルリク)
どのバリデータで失敗したかを調べるActiveModel::Errors#details
を追加。
(プルリク)
ActiveRecord::AttributeAssignment
をActiveModel::AttributeAssignment
にも展開。これにより、include可能なモジュールとしてすべてのオブジェクトで使えるようになる。
(プルリク)
ActiveModel::Dirty#[attr_name]_previously_changed?
とActiveModel::Dirty#[attr_name]_previous_change
を追加。モデルの保存後に一時記録された変更に簡単にアクセスできる。
(プルリク)
valid?
とinvalid?
でさまざまなコンテキストを一度に検証する機能。
(プルリク)
validates_acceptance_of
のデフォルト値として1
の他にtrue
も指定できるようになった。
(プルリク)
変更の詳細についてはChangelogを参照してください。
ActiveJob::Base.deserialize
をジョブクラスに委譲(delegate)。これにより、ジョブがシリアライズされたときやジョブ実行時に再度読み込まれたときに、任意のメタデータをジョブに渡せるようになる。
(プルリク)
キューアダプタをジョブ単位で構成する機能を追加。ジョブ同士が影響しないように構成できる。 (プルリク)
ジェネレータのジョブがデフォルトでapp/jobs/application_job.rb
を継承するようになった。
(プルリク)
DelayedJob
、Sidekiq
、qu
、que
、queue_classic
で、ジョブIDをprovider_job_id
としてActiveJob::Base
に返す機能を追加。
(プルリク、プルリク、コミット)
ジョブをconcurrent-ruby
スレッドプールにキューイングする簡単なAsyncJob
プロセッサと、関連するAsyncAdapter
を実装。
(プルリク)
デフォルトのアダプタをinlineからasyncに変更。デフォルトをasyncにすることで、テストを同期的な振る舞いに依存せずに行える。 (コミット)
変更の詳細についてはChangelogを参照してください。
非推奨のActiveSupport::JSON::Encoding::CircularReferenceError
を削除。
(コミット)
非推奨のActiveSupport::JSON::Encoding.encode_big_decimal_as_string=
メソッドとActiveSupport::JSON::Encoding.encode_big_decimal_as_string
メソッドを削除。
(コミット)
非推奨のActiveSupport::SafeBuffer#prepend
を削除。
(コミット)
Kernel
、silence_stderr
、silence_stream
、capture
、quietly
から非推奨メソッドを多数削除。
(コミット)
非推奨のactive_support/core_ext/big_decimal/yaml_conversions
ファイルを削除。
(コミット)
非推奨のActiveSupport::Cache::Store.instrument
メソッドとActiveSupport::Cache::Store.instrument=
メソッドを削除。
(コミット)
非推奨のClass#superclass_delegating_accessor
を削除。
今後はClass#class_attribute
を使うこと。
(プルリク)
非推奨のThreadSafe::Cache
を削除。今後はConcurrent::Map
を使うこと。
(プルリク)
Ruby 2.2で既に実装されているObject#itself
を削除。
(プルリク)
MissingSourceFile
を非推奨に指定。今後はLoadError
を使うこと。
(コミット)
alias_method_chain
を非推奨に指定。今後はRuby 2.0で導入されたModule#prepend
を使うこと。
(プルリク)
ActiveSupport::Concurrency::Latch
を非推奨に指定。今後はconcurrent-rubyのConcurrent::CountDownLatch
を使うこと。
(プルリク)
number_to_human_size
の:prefix
オプションを非推奨に指定。置き換え先はなし。
(プルリク)
Module#qualified_const_
を非推奨に指定。今後はビルトインのModule#const_
メソッドを使うこと。
(プルリク)
コールバック定義に文字列を渡すことを非推奨に指定。 (プルリク)
ActiveSupport::Cache::Store#namespaced_key
、ActiveSupport::Cache::MemCachedStore#escape_key
、ActiveSupport::Cache::FileStore#key_file_path
を非推奨に指定。
今後はnormalize_key
を使うこと。(プルリク、commit)
ActiveSupport::Cache::LocaleCache#set_cache_value
を非推奨に指定。今後はwrite_cache_value
を使うこと。
(プルリク)
assert_nothing_raised
に引数を渡すことを非推奨に指定。
(プルリク)
Module.local_constants
を非推奨に指定。今後はModule.constants(false)
を使うこと。
(プルリク)
ActiveSupport::MessageVerifier
に#verified
メソッドと#valid_message?
メソッドを追加。
(プルリク)
コールバックチェーンの停止方法を変更。今後は明示的にthrow(:abort)
で停止することを推奨。
(プルリク)
新しい設定オプションconfig.active_support.halt_callback_chains_on_return_false
を追加。ActiveRecord、ActiveModel、ActiveModel::Validationsのコールバックチェーンを、'before'コールバックでfalse
を返したときに停止するかどうかを指定する。
(プルリク)
デフォルトのテスト実行順を:sorted
から:random
に変更。
(コミット)
#on_weekend?
メソッド、#on_weekday?
メソッド、#next_weekday
メソッド、#prev_weekday
メソッドをDate
、Time
、DateTime
に追加。
(プルリク)
Date
、Time
、DateTime
の#next_week
と#prev_week
にsame_time
を追加。
(プルリク)
Date
、Time
、DateTime
の#yesterday
と#tomorrow
に、#prev_day
と#next_day
に対応するメソッドを追加。
(プルリク)
ランダムなbase58文字列を生成するSecureRandom.base58
を追加。
(コミット)
file_fixture
をActiveSupport::TestCase
に追加。
テストケースからサンプルファイルにアクセスするシンプルな機能を提供する。
(プルリク)
Enumerable
とArray
に#without
を追加。指定の要素を除外して、列挙のコピーを返す。
(プルリク)
ActiveSupport::ArrayInquirer
とArray#inquiry
を追加。
(プルリク)
指定のタイムゾーンで時刻を解析するActiveSupport::TimeZone#strptime
を追加。
(コミット)
Integer#zero?
に加えてInteger#positive?
とInteger#negative?
クエリメソッドを追加。
(コミット)
ActiveSupport::OrderedOptions
に破壊的なgetメソッドを追加。値が.blank?
の場合はKeyError
が発生。
(プルリク)
指定の年の日数を返すTime.days_in_year
を追加。引数がない場合は現在の年の日数を返す。
(コミット)
ファイルのイベント監視機能を追加。アプリケーションのソースコード、ルーティング、ロケールなどの変更を非同期的に検出する。 (プルリク)
スレッドごとのクラス変数やモジュール変数を宣言するメソッド群thread_m
/cattr_accessor
/reader
/writer
を追加。
(プルリク)
Array#second_to_last
メソッドとArray#third_to_last
メソッドを追加。
(プルリク)
Date
、Time
、DateTime
に#on_weekday?
メソッドを追加。
(プルリク)
ActiveSupport::Executor
APIとActiveSupport::Reloader
APIを公開。アプリケーションコードの実行やアプリケーションの再読み込みプロセスを、コンポーネントやライブラリから管理したり参加したりできる。
(プルリク)
ActiveSupport::Duration
でISO8601形式のフォーマットや解析をサポート。
(プルリク)
ActiveSupport::JSON.decode
でISO8601形式のローカル時刻をサポート(parse_json_times
を有効にした場合)。
(プルリク)
ActiveSupport::JSON.decode
が日付の文字列ではなくDate
オブジェクトを返すようになった。
(プルリク)
TaggedLogging
をロガーに追加。ロガーのインスタンスを複数作成して、タグがロガー同士で共有されないようにする。
(プルリク)
Railsを頑丈かつ安定したフレームワークにするために多大な時間を費やしてくださった多くの開発者については、Railsコントリビューターの完全なリストを参照してください。これらの方々全員に深く敬意を表明いたします。
Railsガイドは GitHub の yasslab/railsguides.jp で管理・公開されております。本ガイドを読んで気になる文章や間違ったコードを見かけたら、気軽に Pull Request を出して頂けると嬉しいです。Pull Request の送り方については GitHub の README をご参照ください。
原著における間違いを見つけたら『Rails のドキュメントに貢献する』を参考にしながらぜひ Rails コミュニティに貢献してみてください 🛠💨✨
本ガイドの品質向上に向けて、皆さまのご協力が得られれば嬉しいです。
Railsガイド運営チーム (@RailsGuidesJP)
Railsガイドは下記の協賛企業から継続的な支援を受けています。支援・協賛にご興味あれば協賛プランからお問い合わせいただけると嬉しいです。