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