Ruby on Rails 5.0 リリースノート

Rails 5.0の注目ポイント

  • Action Cable
  • Rails API
  • Active Record属性API
  • テストランナー
  • Rakeコマンドをrailsコマンドに統一
  • Sprockets 3
  • Turbolinks 5
  • Ruby 2.2.2以上が必須

本リリースノートでは、主要な変更についてのみ説明します。多数のバグ修正および変更点については、GitHubのRailsリポジトリにあるコミットリストのchangelogを参照してください。

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で簡単に作成できるようになりました。 X 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と入力するだけでテストランナーを使えます。

テストランナーは、RSpecminitest-reportersmaxitestなどから着想を得ています。 次のような多数の改良が施されています。

  • テストの行番号を指定して単体テストを実行。
  • テストの行番号を指定して複数テストを実行。
  • 失敗の場合のメッセージが改良され、失敗したテストをすぐに再実行できるようになった。
  • -fオプションを付けると失敗時に即座にテストを停止できるようになり、全テストの完了を待たなくて済む
  • -dオプションを付けるとテストが完了するまでメッセージ出力を待たせることができる。
  • -bオプションを付けると完全な例外バックトレースを出力できる。
  • minitestと統合されてさまざまなオプションが利用できるようになった: -sでシードデータを指定、-nで特定のテスト名を指定して実行、-vで詳細出力をオン、など。
  • テスト出力に色が追加された。

3 Railties

変更の詳細についてはChangelogを参照してください。

3.1 削除されたもの

  • デバッガのサポートを削除。debuggerはRuby 2.2でサポートされないため、今後はbyebugを利用すること。 (コミット

  • 非推奨のtest:allタスクとtest:all:dbタスクを削除。 (コミット

  • 非推奨のRails::Rack::LogTailerを削除。 (コミット

  • 非推奨のRAILS_CACHE定数を削除。 (コミット

  • 非推奨のserve_static_assets設定を削除。 (コミット

  • ドキュメント作成タスクdoc:appdoc:railsdoc:guidesを削除。 (コミット

  • Rack::ContentLengthミドルウェアをデフォルトから削除。(コミット

3.2 非推奨

  • 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:updateapp:templateに変更された) (プルリク

3.3 主な変更点

  • 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スクリプトを追加。 (プルリク

  • rakeタスクをbin/railsで置き換え。 (プルリク, プルリク

  • 生成されるアプリケーションは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環境でクラスの自動読み込みを無効化。 (コミット

4 Action Pack

変更の詳細についてはChangelogを参照してください。

4.1 削除されたもの

  • ActionDispatch::Request::Utils.deep_mungeを削除。 (コミット

  • ActionController::HideActionsを削除。 (プルリク

  • プレースホルダメソッドであるrespond_torespond_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を削除。 (コミット

  • assignsassert_templateを削除。これらのメソッドはrails-controller-testing gemに移動された。 (プルリク

4.2 非推奨

  • *_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::IntegrationTestActionController::TestCaseで位置引数(positional argument)を非推奨に指定。今後はキーワード引数を使うこと。(プルリク

  • パスパラメータ:controller:actionを非推奨に指定。 (プルリク

  • コントローラのインスタンスでのenvメソッドを非推奨に指定。 (コミット

  • ActionDispatch::ParamsParserを非推奨に指定し、ミドルウェアスタックから削除。今後パラメーターパーサーの構成が必要な場合はActionDispatch::Request.parameter_parsers=を使うこと。 (コミット, commit

4.3 主な変更点

  • コントローラのアクションの外部で任意のテンプレートでレンダリングするActionController::Rendererを追加。 (プルリク

  • ActionController::TestCaseActionDispatch::IntegrationのHTTPリクエストメソッドにキーワード引数構文を統合。 (プルリク

  • 期限切れのないレスポンスをキャッシュするhttp_cache_foreverをAction Controllerに追加。 (プルリク

  • リクエストのvariantのわかりやすい指定方法を追加。 (プルリク

  • 対応するテンプレートがない場合にはエラーの代わりにhead :no_contentでレンダリングする (プルリク

  • コントローラのデフォルトのフォームビルダーをオーバーライドする機能を追加。 (プルリク

  • API専用アプリケーション向けのサポートを追加。API専用アプリケーションではActionController::Baseの代わりにActionController::APIが追加される。 (プルリク

  • ActionController::Parametersは今後HashWithIndifferentAccessを継承しない。 (プルリク

  • より安全にSSLを試したりオフにしたりできるよう、config.force_sslconfig.ssl_optionsを簡単に導入できるようにした。 (プルリク

  • ActionDispatch::Staticに任意のヘッダーを返す機能を追加。 (プルリク

  • protect_from_forgeryのprependのデフォルトをfalseに変更。 (コミット

  • ActionController::TestCaseはRails 5.1で専用gemに移行する予定。今後はActionDispatch::IntegrationTestを使うこと。 (コミット

  • Railsで生成するETagを「強い」ものから「弱い」ものに変更。 (プルリク

  • コントローラのアクションでrenderが明示的に呼び出されず、対応するテンプレートもない場合、エラーの代わりにhead :no_contentを暗黙に出力する。 (プルリク12

  • フォームごとのCSRFトークン用オプションを追加。 (プルリク

  • リクエストのエンコーディングとレスポンスの解析(parse)を結合テストに追加。 (プルリク

  • コントローラのアクションでレスポンスが明示的に定められていない場合の、デフォルトのレンダリングポリシーを更新。 (プルリク

  • コントローラレベルでビューコンテキストにアクセスするActionController#helpersを追加。 (プルリク

  • 破棄されたフラッシュメッセージをセッションに保存せずに除去。 (プルリク

  • fresh_whenstale?にレコードのコレクションを渡す機能を追加。 (プルリク

  • ActionController::LiveActiveSupport::Concernに変更。ActiveSupport::Concernでextendしていない他のモジュールにはincludeされない。また、ActionController::Liveはproduction環境では有効にならない。ActionController::Liveが使われていると、生成されたスレッドから投げられた:wardenをミドルウェアでキャッチできない問題があった。これに対応するため、Warden/Deviseの認証エラーを扱える特殊なコードをincludeする別のモジュールを使っている開発者を見かける。 (詳細

5 Action View

変更の詳細についてはChangelogを参照してください。

5.1 削除されたもの

  • 非推奨のAbstractController::Base::parent_prefixesを削除。 (コミット

  • ActionView::Helpers::RecordTagHelperを削除。この機能はrecord_tag_helper gemに移行済み。 (プルリク

  • I18nでのサポート廃止に伴い、translate:rescue_formatオプションを削除。 (プルリク

5.2 主な変更点

  • デフォルトのテンプレートハンドラをERBからRawに変更。 (コミット

  • コレクションのレンダリングで、複数の部分テンプレート(パーシャル)のキャッシュと取得を一度に行えるようになった。 (プルリク, commit

  • 明示的な依存関係指定にワイルドカードによるマッチングを追加。 (プルリク

  • disable_withをsubmitタグのデフォルトの動作に設定。これにより送信時にボタンを無効にし、二重送信を防止する。 (プルリク

  • 部分テンプレート(パーシャル)名はRubyの有効な識別子ではなくなった。 (コミット

  • datetime_tagヘルパーでdatetime-localを指定したinputタグが生成されるようになった。 (プルリク

6 Action Mailer

変更の詳細についてはChangelogを参照してください。

6.1 削除されたもの

  • 非推奨の*_pathヘルパーをemailビューから削除。 (コミット

  • 非推奨のdeliverメソッドとdeliver!メソッドを削除。 (コミット

6.2 主な変更点

  • テンプレートを検索するときにデフォルトのロケールとI18nにフォールバックするようになった。 (コミット

  • ジェネレーターで生成されたメーラーに_mailerサフィックスを追加。コントローラやジョブと同様の命名規則に従う。 (プルリク

  • assert_enqueued_emailsassert_no_enqueued_emailsを追加。 (プルリク

  • メーラーキュー名を設定するconfig.action_mailer.deliver_later_queue_name設定を追加。 (プルリク

  • Action Mailerビューでフラグメントキャッシュをサポート。 テンプレートでキャッシュが有効かどうかを検出するconfig.action_mailer.perform_caching設定オプションを追加。 (プルリク

7 Active Record

変更の詳細については、Changelogを参照してください。

7.1 削除されたもの

  • ネストした配列をクエリ値として渡す機能(非推奨)を削除。(プルリク

  • 非推奨の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_classsymbolized_sti_nameを削除。 (コミット

  • 非推奨のActiveRecord::Base.disable_implicit_join_references=を削除。 (コミット

  • 文字列アクセサによるコネクション利用へのアクセス(非推奨)を削除。 (コミット

  • インスタンスに依存するプリロード(非推奨)のサポートを削除。 (コミット

  • PostgreSQLでしか使われない値の範囲の下限値(非推奨)を削除。 (コミット

  • キャッシュされたArelとのリレーションを変更したときの動作(非推奨)を削除。 今後はImmutableRelationエラーが出力される。 (コミット

  • ActiveRecord::Serialization::XmlSerializerをコアから削除。この機能はactivemodel-serializers-xml gemに移行済み。(プルリク

  • 古いmysqlデータベースアダプタのサポートをコアから削除。今後は原則としてmysql2を使うこと。今後古いアダプタのメンテナンス担当者が決まった場合、アダプタは別のgemに切り出される予定。(プルリク12

  • protected_attributes gemのサポートを終了。 (コミット

  • PostgreSQL 9.1以前のサポートを削除。 (プルリク

  • activerecord-deprecated_finders gemのサポートを終了。 (コミット

7.2 非推奨

  • クエリでクラスを値として渡すことを非推奨に指定。ユーザーは文字列を渡すこと。(プルリク

  • 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#tablesSchemaCache#table_exists?SchemaCache#clear_table_cache!を非推奨に指定。今後は新しい同等のデータソースを使うこと。 (プルリク

  • SQLite3アダプタとMySQLアダプタのconnection.tablesを非推奨に指定。 (プルリク

  • #tablesに引数を渡すことを非推奨に指定。一部のアダプタ(mysql2、sqlite3)の#tablesメソッドはテーブルとビューを両方返すが、他のアダプタはテーブルのみを返す。動作を統一するため、今後は#tablesはテーブルのみを返すようになる予定。 (プルリク

  • table_exists?を非推奨に指定。#table_exists?メソッドでテーブルとビューが両方チェックされていることがあるため。#tablesの動作を統一するため、今後#table_exists?はテーブルのみをチェックするようになる予定。 (プルリク

  • find_nthoffsetを引数として渡すことを非推奨に指定。今後リレーションではoffsetメソッドを使うこと。 (プルリク

  • DatabaseStatements{insert|update|delete}_sqlを非推奨に指定。 今後は{insert|update|delete}パブリックメソッドを使うこと。 (プルリク

  • use_transactional_fixturesを非推奨に指定。今後はより明瞭なuse_transactional_testsを使うこと。 (プルリク

  • ActiveRecord::Connection#quoteにカラムを渡すことを非推奨に指定。 (コミット

  • startパラメータを補完するendオプション(バッチ処理の停止位置を指定)をfind_in_batchesに追加。 (プルリク

7.3 主な変更点

  • テーブルの作成中にforeign_keyオプションをreferencesに追加。 (コミット

  • 新しい属性API。(コミット

  • enumの定義に:_prefix/:_suffixオプションを追加。 (プルリク12

  • 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_torequiredオプションも非推奨に指定。今後は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_sourcesconnection.data_source_exists?を追加。 Active Recordモデル(通常はテーブルやビュー)を支えるリレーションを特定するのに利用できる。 (プルリク

  • フィクスチャファイルを使って、モデルのクラスをYAMLファイルそのものの中に設定できるようになった。 (プルリク

  • データベースマイグレーションの生成時にuuidをデフォルトの主キーに設定できる機能を追加。(プルリク

  • ActiveRecord::Relation#left_joinsActiveRecord::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オプションを追加。レコードに現在時刻以外の時刻を指定する場合に使える。 (プルリク

8 Active Model

変更の詳細についてはChangelogを参照してください。

8.1 削除されたもの

8.2 非推奨

  • Active Modelのコールバックチェーンを止めるためにfalseを返すことを非推奨に指定。代わりにthrow(:abort)の利用を推奨。(プルリク

  • ActiveModel::Errors#getActiveModel::Errors#setActiveModel::Errors#[]=メソッドの動作が一貫していないため、非推奨に指定。 (プルリク

  • validates_length_of:tokenizerオプションを非推奨に指定。今後はRubyの純粋な機能を使うこと。 (プルリク

  • ActiveModel::Errors#add_on_emptyActiveModel::Errors#add_on_blankを非推奨に指定。置き換え先の機能はなし。 (プルリク

8.3 主な変更点

  • どのバリデータで失敗したかを調べるActiveModel::Errors#detailsを追加。 (プルリク

  • ActiveRecord::AttributeAssignmentActiveModel::AttributeAssignmentにも展開。これにより、include可能なモジュールとしてすべてのオブジェクトで使えるようになる。 (プルリク

  • ActiveModel::Dirty#[attr_name]_previously_changed?ActiveModel::Dirty#[attr_name]_previous_changeを追加。モデルの保存後に一時記録された変更に簡単にアクセスできる。 (プルリク

  • valid?invalid?でさまざまなコンテキストを一度に検証する機能。 (プルリク

  • validates_acceptance_ofのデフォルト値として1の他にtrueも指定できるようになった。 (プルリク

9 Active Job

変更の詳細についてはChangelogを参照してください。

9.1 主な変更点

  • ActiveJob::Base.deserializeをジョブクラスに委譲(delegate)。これにより、ジョブがシリアライズされたときやジョブ実行時に再度読み込まれたときに、任意のメタデータをジョブに渡せるようになる。 (プルリク

  • キューアダプタをジョブ単位で構成する機能を追加。ジョブ同士が影響しないように構成できる。 (プルリク

  • ジェネレータのジョブがデフォルトでapp/jobs/application_job.rbを継承するようになった。 (プルリク

  • DelayedJobSidekiqququequeue_classicで、ジョブIDをprovider_job_idとしてActiveJob::Baseに返す機能を追加。 (プルリクプルリクコミット

  • ジョブをconcurrent-rubyスレッドプールにキューイングする簡単なAsyncJobプロセッサと、関連するAsyncAdapterを実装。 (プルリク

  • デフォルトのアダプタをinlineからasyncに変更。デフォルトをasyncにすることで、テストを同期的な振る舞いに依存せずに行える。 (コミット

10 Active Support

変更の詳細についてはChangelogを参照してください。

10.1 削除されたもの

  • 非推奨のActiveSupport::JSON::Encoding::CircularReferenceErrorを削除。 (コミット

  • 非推奨のActiveSupport::JSON::Encoding.encode_big_decimal_as_string=メソッドとActiveSupport::JSON::Encoding.encode_big_decimal_as_stringメソッドを削除。 (コミット

  • 非推奨のActiveSupport::SafeBuffer#prependを削除。 (コミット

  • Kernelsilence_stderrsilence_streamcapturequietlyから非推奨メソッドを多数削除。 (コミット

  • 非推奨の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を削除。 (プルリク

10.2 非推奨

  • 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_keyActiveSupport::Cache::MemCachedStore#escape_keyActiveSupport::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)を使うこと。 (プルリク

10.3 主な変更点

  • 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メソッドをDateTimeDateTimeに追加。 (プルリク

  • DateTimeDateTime#next_week#prev_weeksame_timeを追加。 (プルリク

  • DateTimeDateTime#yesterday#tomorrowに、#prev_day#next_dayに対応するメソッドを追加。 (プルリク

  • ランダムなbase58文字列を生成するSecureRandom.base58を追加。 (コミット

  • file_fixtureActiveSupport::TestCaseに追加。 テストケースからサンプルファイルにアクセスするシンプルな機能を提供する。 (プルリク

  • EnumerableArray#withoutを追加。指定の要素を除外して、列挙のコピーを返す。 (プルリク

  • ActiveSupport::ArrayInquirerArray#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メソッドを追加。 (プルリク

  • DateTimeDateTime#on_weekday?メソッドを追加。 (プルリク

  • ActiveSupport::Executor APIとActiveSupport::Reloader APIを公開。アプリケーションコードの実行やアプリケーションの再読み込みプロセスを、コンポーネントやライブラリから管理したり参加したりできる。 (プルリク

  • ActiveSupport::DurationでISO8601形式のフォーマットや解析をサポート。 (プルリク

  • ActiveSupport::JSON.decodeでISO8601形式のローカル時刻をサポート(parse_json_timesを有効にした場合)。 (プルリク

  • ActiveSupport::JSON.decodeが日付の文字列ではなくDateオブジェクトを返すようになった。 (プルリク

  • TaggedLoggingをロガーに追加。ロガーのインスタンスを複数作成して、タグがロガー同士で共有されないようにする。 (プルリク

11 クレジット表記

Railsを頑丈かつ安定したフレームワークにするために多大な時間を費やしてくださった多くの開発者については、Railsコントリビューターの完全なリストを参照してください。これらの方々全員に深く敬意を表明いたします。

フィードバックについて

Railsガイドは GitHub の yasslab/railsguides.jp で管理・公開されております。本ガイドを読んで気になる文章や間違ったコードを見かけたら、気軽に Pull Request を出して頂けると嬉しいです。Pull Request の送り方については GitHub の README をご参照ください。

原著における間違いを見つけたら『Rails のドキュメントに貢献する』を参考にしながらぜひ Rails コミュニティに貢献してみてください 🛠💨✨

本ガイドの品質向上に向けて、皆さまのご協力が得られれば嬉しいです。

Railsガイド運営チーム (@RailsGuidesJP)

支援・協賛

Railsガイドは下記の協賛企業から継続的な支援を受けています。支援・協賛にご興味あれば協賛プランからお問い合わせいただけると嬉しいです。

  1. Star
  2. このエントリーをはてなブックマークに追加