1 Rails 5.2へのアップグレード
既存のアプリケーションをアップグレードするのであれば、その前に質のよいテストカバレッジを用意するのはよい考えです。アプリケーションがRails 5.1までアップグレードされていない場合は先にそれを完了し、アプリケーションが正常に動作することを十分確認してからRails 5.2にアップデートしてください。アップグレードの注意点などについてはRuby on Railsアップグレードガイドを参照してください。
2 主要な機能
2.1 Active Storage
Active Storageが、Amazon S3/Google Cloud Storage/Microsoft Azure Storageなどのクラウドストレージにファイルをアップロードし、それらのファイルをActive Recordオブジェクトにアタッチできるようになりました。開発中やテスト中に用いるローカルのディスクベースのサービスも利用でき、バックアップや移行に用いるサブサービスへのミラーリングもサポートされました。 Active Storageの詳細についてはActive Storageの概要を参照してください。
2.2 Redis Cache Store
Rails 5.2にRedisキャッシュストアが組み込まれました。 詳しくは、ガイドのRails のキャッシュ機構を参照してください。
2.3 HTTP/2 Early Hints
Rails 5.2でHTTP/2 Early Hintsがサポートされました。Early Hintsを有効にしてサーバーを起動するには、bin/rails server
に--early-hints
オプションを渡します。
2.4 credential管理
config/credentials.yml.enc
ファイルが追加され、productionアプリケーションの秘密情報(secret)をここに保存できるようになりました。これによって、外部サービスのあらゆる認証credentialを、config/master.key
ファイルまたはRAILS_MASTER_KEY
環境変数にあるキーで暗号化した形で直接リポジトリに保存できます。Rails.application.secrets
やRails 5.1で導入された暗号化済み秘密情報は、最終的にこれによって置き換えられます。
さらに、Rails 5.2ではcredentialを支えるAPIが用意され、その他の暗号化済み設定/キー/ファイルも簡単に扱えます。
詳しくは、Rails セキュリティガイドを参照してください。
2.5 Content Security Policy(CSP)
Rails 5.2では、アプリケーションの Content Security Policy(CSP)を設定する新しいDSLが使えるようになりました。グローバルなポリシーを1つ設定しておき、続いてリソースベースでポリシーをオーバーライドすることも、lambdaを使ってリクエストごとにヘッダーに値を注入することもできます(マルチテナントのアプリでアカウントのサブドメインを注入するなど)。 詳しくは、Rails セキュリティガイドを参照してください。
3 Railties
変更点について詳しくはChangelogを参照してください。
3.1 非推奨
ジェネレーターとテンプレートでの
capify!
を非推奨に指定。 (Pull Request)rails dbconsole
やrails console
に環境変数名を通常の引数として渡すことを非推奨に指定。-e
オプションを明示的に利用すべき。 (Commit)Rails::Application
のサブクラスを用いてRailsサーバーを起動することを非推奨に指定。 (Pull Request)Railsプラグインテンプレートでの
after_bundle
コールバックを非推奨に指定。
3.2 主な変更点
config/database.yml
に、すべての環境で読み込まれる共有セクションを追加。 (Pull Request)プラグインジェネレーターに
railtie.rb
を追加。 (Pull Request)tmp:clear
タスクでスクリーンショットファイルを削除する機能。 (Pull Request)bin/rails app:update
実行時に未利用のコンポーネントをスキップ。 最初のアプリケーション生成でAction CableやActive Recordがスキップされると、これらに関連する更新もスキップされる。 (Pull Request)3-levelデータベース設定利用時にカスタムコネクション名を
rails dbconsole
に渡せるようになった。 例:bin/rails dbconsole -c replica
. (Commit)console
コマンドやdbconsole
コマンドの実行時に渡す環境名のショートカットが正しく展開されるようになった。 (Commit)bootsnap
をデフォルトのGemfile
に追加。 (Pull Request)rails runner
でプラットフォームを問わずSTDINからのスクリプトを実行するための-
をサポート (Pull Request)Railsアプリケーション新規作成時に
Gemfile
にruby x.x.x
を追加し、.ruby-version
に現在のRubyバージョンを追加するようになった。 (Pull Request)プラグインジェネレーターに
--skip-action-cable
オプションを追加。 (Pull Request)Gemfile
にgit_source
オプションを追加(プラグインジェネレータ用)。 (Pull Request)Railsプラグインで
bin/rails
を実行するときに未利用コンポーネントをスキップ。 (Commit)ジェネレーターのアクションのインデントを最適化。 (Pull Request)
ルーティングのインデントを最適化。 (Pull Request)
プラグインジェネレーターに
--skip-yarn
オプションを追加。 (Pull Request)ジェネレータの
gem
メソッドで引数のバージョンを複数取れるようサポート。 (Pull Request)development/test環境でアプリケーション名を元に
secret_key_base
を生成。 (Pull Request)デフォルトの
Gemfile
にmini_magick
をコメントアウトの形で追加。 (Pull Request)Active Storage
がrails new
またはrails plugin new
でデフォルトで有効。--skip-active-storage
でActive Storage
をスキップする。また、--skip-active-record
を用いた場合にもActive Storage
をスキップする。 (Pull Request)
4 Action Cable
変更点について詳しくはChangelogを参照してください。
4.1 削除されたもの
- 非推奨のevented Redisアダプターを削除 (Commit)
4.2 主な変更点
cable.ymlに
host
、port
、db
、password
オプションのサポートを追加。 (Pull Request)PostgreSQLアダプタ利用時のlong stream IDのハッシュを修正。 (Pull Request)
5 Action Pack
変更点について詳しくはChangelogを参照してください。
5.1 削除されたもの
- 非推奨の
ActionController::ParamsParser::ParseError
を削除。 (Commit)
5.2 非推奨
-
ActionDispatch::TestResponse
のエイリアスである#success?
、#missing?
、#error?
を非推奨に指定。 (Pull Request)
5.3 主な変更点
フラグメントキャッシュでのリサイクル可能キャッシュキーをサポート。 (Pull Request)
フラグメントのキャッシュキー形式を変更(キーchurnのデバッグを容易にするため) (Pull Request)
AEAD暗号化cookieとセッションにGCMを追加。 (Pull Request)
デフォルトでフォージェリーから保護。 (Pull Request)
署名/暗号化済みcookieの期限終了をサーバー側で強制。 (Pull Request)
cookieの
:expires
オプションでActiveSupport::Duration
オブジェクトをサポート。 (Pull Request):puma
サーバー設定にCapybaraを登録済みにした。 (Pull Request)cookieミドルウェアをシンプルにするためにキーローテーションサポートを追加。 (Pull Request)
HTTP/2向けのEarly Hintsを有効にする機能を追加。 (Pull Request)
システムテストでのheadless Chromeサポートを追加。 (Pull Request)
redirect_back
メソッドに:allow_other_host
オプションを追加。 (Pull Request)assert_recognizes
がマウントしたエンジンをトラバースするようにした。 (Pull Request)Content-Security-Policyヘッダー設定用のDSLを追加。 (Pull Request, Commit, Commit)
モダンなブラウザでサポートされている著名な音声/動画/フォントのMIMEタイプを登録。 (Pull Request)
システムテストのデフォルト出力フォーマットを
inline
からsimple
に変更。 (Commit)システムテストにheadless Firefoxサポートを追加 (Pull Request)
セキュアな
X-Download-Options
およびX-Permitted-Cross-Domain-Policies
をデフォルトのヘッダーセットに追加。 (Commit)システムテストで、ユーザーが別のサーバーを手動でしていない場合にのみPumaをデフォルトのサーバーとして設定するように変更。 (Pull Request)
Referrer-Policy
ヘッダーをデフォルトのヘッダーセットに追加。 (Commit)Hash#each
の振る舞いをActionController::Parameters#each
に合わせた。 (Pull Request)Rails UJS向けにnonceの自動生成をサポート。 (Commit)
デフォルトのHSTS
max-age
値を31536000秒(1年)に更新。 (Commit)cookies
のto_h
メソッドのエイリアスto_hash
メソッドを追加session
のto_hash
メソッドのエイリアスto_h
メソッドを追加 (Commit)
6 Action View
変更点について詳しくはChangelogを参照してください。
6.1 削除されたもの
- 非推奨のErubis ERB handler. (Commit)
6.2 非推奨
-
image_tag
のデフォルトのaltテキストを追加するimage_alt
ヘルパーが非推奨になりました。 (Pull Request)
6.3 主な変更点
JSON Feedsに対応するため、
auto_discovery_link_tag
に:json
タイプを追加しました。
(Pull Request)image_tag
ヘルパーにsrcset
オプションを追加しました。 (Pull Request)optgroup
とoption
でラップしたfield_error_proc
のバグを修正しました。 (Pull Request)form_with
がデフォルトでidを生成するようになりました。 (Commit)preload_link_tag
ヘルパーを追加しました。 (Pull Request)グループ化されたセレクト用のgroupメソッドが呼び出し可能オブジェクトとして使えるようになりました。 (Pull Request)
7 Action Mailer
変更点について詳しくはChangelogを参照してください。
7.1 主要な変更
Action Mailerクラスで自身の配信ジョブを設定できるようにした。 (Pull Request)
assert_enqueued_email_with
テストヘルパーを追加。 (Pull Request)
8 Active Record
変更点について詳しくはChangelogを参照してください。
8.1 削除されたもの
非推奨の
#migration_keys
を削除。 (Pull Request)Active Recordオブジェクトをタイプキャストした場合の非推奨
quoted_id
を削除。 (Commit)非推奨の
default
引数をindex_name_exists?
から削除。 (Commit)関連付けにおける
:class_name
へのクラス名渡し(非推奨)を削除。 (Commit)非推奨
initialize_schema_migrations_table
メソッドとinitialize_internal_metadata_table
メソッドを削除。 (Commit)非推奨の
supports_migrations?
メソッドを削除。 (Commit)非推奨の
supports_primary_key?
メソッドを削除。 (Commit)非推奨の
ActiveRecord::Migrator.schema_migrations_table_name
メソッドを削除。 (Commit)非推奨の
name
引数を#indexes
から削除。 (Commit)非推奨の引数を
#verify!
から削除 (Commit)非推奨の
.error_on_ignored_order_or_limit
設定を削除。 (Commit)非推奨の
#scope_chain
を削除。 (Commit)非推奨の
#sanitize_conditions
メソッドを削除。 (Commit)
8.2 非推奨
supports_statement_cache?
を非推奨に指定。 (Pull Request)ActiveRecord::Calculations
のcount
やsum
に引数とブロックを同時に渡すことを非推奨に指定。 (Pull Request)Relation
をarel
に委譲することを非推奨に指定。 (Pull Request)TransactionState
のset_state
を非推奨に指定。 (Commit)expand_hash_conditions_for_aggregates
を非推奨に指定(代替はなし)。 (Commit)
8.3 主な変更点
動的なフィクスチャアクセサメソッドを引数なしで呼び出した場合に、その種類のフィクスチャをすべて返すようになった。従来は常に空の配列を返していた。 (Pull Request)
Active Recordの属性リーダーをオーバーライドした場合に属性の変更が一貫しなかったのを修正。 (Pull Request)
MySQLの降順インデックスをサポート。 (Pull Request)
bin/rails db:forward
の1回目のマイグレーションを修正。 (Commit)現在のマイグレーションが存在しない場合にマイグレーション中に
UnknownMigrationVersionError
エラーをraiseするようになった。 (Commit)データベース構造をダンプするrakeタスクで
SchemaDumper.ignore_tables
を考慮するようになった。 (Pull Request)ActiveSupport::Cache
で新しいバージョン付きエントリを介したキャッシュキーの再利用をサポートするActiveRecord::Base#cache_version
を追加。これによって、ActiveRecord::Base#cache_key
がタイムスタンプを含まない安定したキーを返すようになった。 (Pull Request)キャストした値が
nil
の場合にバインドparamの作成を防止。 (Pull Request)フィクスチャの挿入に一括INSERTを用いてパフォーマンスを改善。 (Pull Request)
ネストしたJOINを表す2つのリレーションをmergeした場合に、mergeされたリレーションのJOINをLEFT OUTER JOINに変換しなくなった。 (Pull Request)
トランザクションのステートを子トランザクションに適用するよう修正。 従来は、ネストしたトランザクションが1つあって外側のトランザクションがロールバックすると、内側のトランザクションのレコードがpersistedとマーキングされたままになることがあった。親トランザクションがロールバックした場合には親トランザクションのステートを子トランザクションに適用することで、この動作を修正した。これによって、内側のトランザクションのレコードが正しくマーキングされ、persistedにならなくなった。 (Commit)
JOINを含むスコープを持つeager-load/preload関連付けを修正。 (Pull Request)
sql.active_record
通知サブスクライバによってraiseされるエラーをActiveRecord::StatementInvalid
例外に変換されないようにした。 (Pull Request)レコードを(
find_each
、find_in_batches
、in_batches
で)一括で扱う場合にクエリキャッシュをスキップするようにした。 (Commit)sqlite3のbooleanシリアライズで
1
や0
を利用するように変更。SQLiteはネイティブで1
と0
をそれぞれtrue
とfalse
として認識するが、従来のシリアライズのt
やf
はネイティブでは認識しない。 (Pull Request)マルチパラメータ代入を用いて構成された値が、フィールドが1つのフォーム入力をレンダリングする場合にpost-type-cast値を使うようになった。 (Commit)
モデル生成時に
ApplicationRecord
を生成しないようになった。生成が必要な場合はrails g application_record
で作成できる。 (Pull Request)Relation#or
が、references
の値のみ異なる2つのリレーションを受け取れるようになった。references
はwhere
によって暗黙に呼び出されることがあるため。 (Commit)Relation#or
を使った場合に、共通の条件を抽出してOR条件の前に配置するようになった。 (Pull Request)binary
フィクスチャヘルパーメソッドを追加。 (Pull Request)STI(Single Table Inheritance)で関連付けの逆転を自動で推測するようにした。 (Pull Request)
ロック待ちタイムアウト設定を超えた場合にraiseされるエラークラス
LockWaitTimeout
を新しく追加。 (Pull Request)sql.active_record
instrumentationのペイロード名をわかりやすく変更。 (Pull Request)データベースからのインデックス削除でアルゴリズムを指定できるようになった。 (Pull Request)
Relation#where
にSet
を渡した場合の挙動を、配列を渡した場合と同じにした。 (Commit)PostgreSQLの
tsrange
で秒以下の精度が保持されるようになった。 (Pull Request)ダーティなレコードで
lock!
を呼ぶとraiseするようになった。 (Commit)sqliteアダプタ利用時にインデックスのカラム順が
db/schema.rb
に記載されないバグを修正。 (Pull Request)bin/rails db:migrate
でVERSION
を指定した場合の動作を修正。VERSIONが空のbin/rails db:migrate
の振る舞いは、VERSION
を指定していない場合の動作と同じになった。VERSION
の形式をチェックし、マイグレーションファイルのバージョン番号または名前であればそれを利用する。VERSION
の形式が無効な場合はエラーをraiseする。対象となるマイグレーションが存在しない場合もエラーをraiseする。 (Pull Request)ステートメントタイムアウト設定を超えた場合にraiseされるエラークラス
StatementTimeout
を新しく追加。 (Pull Request)update_all
で、値をType#serialize
に渡す前にType#cast
に渡すようにした。これにより、update_all(foo: 'true')
でbooleanが正しく永続化するようになった。 (Commit)リレーションクエリメソッドで生SQLフラグメントを使う場合は、そのことを明示的にマーキングしなければならないようになった。 (Commit, Commit)
「up」マイグレーション(新しいカラムの追加など)にのみ関係あるコード用の
#up_only
をデータベースマイグレーションに追加。 (Pull Request)ユーザーのリクエストが原因でステートメントをキャンセルした場合にraiseされるエラークラス
QueryCanceled
を新しく追加。 (Pull Request)Relation
のインスタンスメソッドと衝突するスコープ定義を許さないようになった。 (Pull Request)add_index
にPostgreSQL演算子クラスのサポートを追加。 (Pull Request)データベースクエリ呼び出し元のログを出力できるようにした。 (Pull Request, Pull Request, Pull Request)
カラム情報をリセットした場合に子孫クラスで属性メソッドをundefineするようになった。 (Pull Request)
delete_all
でlimit
やoffset
を指定した場合にsubselectを使うようにした。 (Commit)first(n)
をlimit()
と併用した場合の矛盾を修正。first(n)
ファインダーがlimit()
を考慮するようになったことでrelation.to_a.first(n)
(とlast(n)
の場合も)の挙動が一貫するようになった。 (Pull Request)永続化していない親インスタンス上のネストした
has_many :through
関連付けを修正。 (Commit)レコードを通しで削除する場合に関連付けの条件を考慮するようにした。 (Commit)
save
やsave!
の呼び出し後はdestroyされたオブジェクトの改変を禁止。 (Commit)left_outer_joins
でリレーションをmergeした場合の問題を修正。 (Pull Request)PostgreSQLの外部テーブルをサポート。 (Pull Request)
Active Recordオブジェクトが複製された場合はトランザクションのステートをクリアするようになった。 (Pull Request)
composed_of
カラムを用いたwhere
メソッドに配列オブジェクトを引数として渡した場合に展開されない問題を修正。 (Pull Request)誤用を防ぐため
polymorphic?
の場合にreflection.klass
でraiseするようになった。 (Commit)ORDER BY
カラムに他のテーブルの主キーが含まれている場合であってもActiveRecord::FinderMethods#limited_ids_for
で正しい主キー値が使われるよう、MySQLとPostgreSQLの#columns_for_distinct
を修正。 (Commit)dependent: :destroy
で、has_one
/belongs_to
リレーションシップの子クラスが削除されていないのに親クラスが削除される問題を修正。 (Commit)アイドル状態のデータベース接続は従来孤立した接続だったのが、コネクションプールreaperによって定期的に刈り取られるようになった。 Commit
9 Active Model
変更点について詳しくはChangelogを参照してください。
9.1 主な変更点
ActiveModel::Errors
の#keys
メソッドと#values
メソッドを修正。#keys
はメッセージが空でないキーだけを返すように変更。#values
は空でない値だけを返すように変更。 (Pull Request)#merge!
メソッドを追加(ActiveModel::Errors
向け)。 (Pull Request)length
バリデータオプションにProcやシンボルを渡せるようになった。 (Pull Request)_confirmation
の値がfalse
の場合にConfirmationValidator
バリデーションを実行するようになった。 (Pull Request)procデフォルトを含むattrebutes APIを用いるモデルをマーシャリングできるようになった。 (Commit)
シリアライズで
:includes
オプションを複数指定しても失われないようにした。 (Commit)
10 Active Support
変更点について詳しくはChangelogを参照してください。
10.1 削除されたもの
コールバックにおける非推奨の
:if
/:unless
文字列フィルタを削除。 (Commit)非推奨の
halt_callback_chains_on_return_false
オプションを削除。 (Commit)
10.2 非推奨
Module#reachable?
メソッドを非推奨に指定。 (Pull Request)secrets.secret_token
を非推奨に指定。 (Commit)
10.3 主な変更
fetch_values
をHashWithIndifferentAccess
に追加。 (Pull Request)Time#change
に:offset
のサポートを追加。 (Commit)ActiveSupport::TimeWithZone#change
に:offset
と:zone
のサポートを追加。 (Commit)非推奨通知にgem名と非推奨の期間(horizon)を渡すようにした。 (Pull Request)
バージョン付きキャッシュエントリをサポート。これによりキャッシュストアでキャッシュキーを再利用できるようになり、キャッシュの変動が著しい場合にストレージを大きく節約できるようになった。Active Recordで
#cache_key
と#cache_version
を分離し、Action Packのフラグメントキャッシュを利用することで動作する。 (Pull Request)スレッド分離された属性シングルトンを提供する
ActiveSupport::CurrentAttributes
を追加。主なユースケースは、リクエストごとの属性をシステム全体で簡単に利用できるよう保持することである。 (Pull Request)#singularize
と#pluralize
が指定のロケールで非可算名詞を考慮するようになった。 (Commit)class_attribute
にデフォルトオプションを追加。 (Pull Request)曜日を指定すると(現時点から見て)「前回その曜日だった日時」と「次回その曜日になる日時」を返す
Date#prev_occurring
とDate#next_occurring
を追加。 (Pull Request)モジュールやクラスの属性アクセサにデフォルトオプションを追加。 (Pull Request)
Cacheに
write_multi
を追加。 (Pull Request)ActiveSupport::MessageEncryptor
でAES 256 GCMをデフォルトで利用。 (Pull Request)テスト時の
Time.now
の時間をfreezeするfreeze_time
ヘルパーを追加。 (Pull Request)Hash#reverse_merge!
の順序をHashWithIndifferentAccess
と一貫するようにした。 (Pull Request)ActiveSupport::MessageVerifier
とActiveSupport::MessageEncryptor
でpurpose:
や期限指定をサポート。ActiveSupport::MessageEncryptor
. (Pull Request)String#camelize
に誤ったオプションが渡されたときにフィードバックを返すようになった。 (Pull Request)Module#delegate_missing_to
で対象がnil
の場合にDelegationError
をraiseするようになった。 (Pull Request)ActiveSupport::EncryptedFile
とActiveSupport::EncryptedConfiguration
を追加。 (Pull Request)productionアプリケーションの秘密情報を保存する
config/credentials.yml.enc
を追加。 (Pull Request)MessageEncryptor
とMessageVerifier
でキーのローテーションをサポート。 (Pull Request)HashWithIndifferentAccess#transform_keys
がHashWithIndifferentAccess
のインスタンスを返すようになった。 (Pull Request)Hash#slice
がRuby 2.5以降の組み込み定義にフォールバックするようになった(定義済みの場合)。 (Commit)IO#to_json
が配列への変換を試みずにto_s
表現を返すようになった。読み取り不能オブジェクトでIO#to_json
を呼ぶとIOError
がraiseされるバグがこれで修正される。 (Pull Request)Date#prev_day
やDate#next_day
に合わせてTime#prev_day
とTime#next_day
にも同じメソッドシグネチャを追加。Time#prev_day
とTime#next_day
に引数を渡せるようになった。 (Commit)Date#prev_month
やDate#next_month
に合わせてTime#prev_month
とTime#next_month
にも同じメソッドシグネチャを追加。Time#prev_month
とTime#next_month
に引数を渡せるようになった。 (Commit)Date#prev_year
やDate#next_year
に合わせてTime#prev_year
とTime#next_year
にも同じメソッドシグネチャを追加。Time#prev_year
とTime#next_year
に引数を渡せるようになった。 (Commit)humanize
で略語をサポート。 (Commit)TimeWithZone(TWZ)のレンジで
Range#include?
をサポート。 (Pull Request)1KBを超えるキャッシュをデフォルトで圧縮できるようになった。 (Pull Request)
Redisキャッシュストア。 (Pull Request, Pull Request)
TZInfo::AmbiguousTime
エラーを扱えるようになった。 (Pull Request)MemCacheStore: 期限切れカウンタをサポート。 (Commit)
ActiveSupport::TimeZone.all
がActiveSupport::TimeZone::MAPPING
に含まれるタイムゾーンだけを返すようにした。 (Pull Request)ActiveSupport::SecurityUtils.secure_compare
のデフォルトの振る舞いを変更し、変数の長さの文字列についても長さ情報が漏洩しないようにした。ActiveSupport::SecurityUtils.secure_compare
がfixed_length_secure_compare
にリネームされ、渡された文字列の長さが一致しない場合にArgumentError
をraiseするようになった。 (Pull Request)SHA-1はETagヘッダーなどの重要度の低いダイジェストの生成に使うようになった。 (Pull Request, Pull Request)
assert_changes
によるアサーションが、引数のfrom:
とto:
の組み合わせにかかわらず常に式の変更をアサーションするようになった。 (Pull Request)ActiveSupport::Cache::Store
のread_multi
になかったinstrumentationを追加。 (Pull Request)assert_difference
の最初の引数でハッシュをサポート。これにより、同一のアサーションでさまざまな数値の違いを指定できるようになった。 (Pull Request)キャッシュ: MemCacheやRedis の
read_multi
とfetch_multi
を高速化。バックエンドに問い合わせる前にローカルのインメモリキャッシュから読み取るようになった。 (Commit)
11 Active Job
変更点について詳しくはChangelogを参照してください。
11.1 主な変更点
-
ActiveJob::Base.discard_on
にブロックを渡すことで、ジョブの破棄をカスタマイズできるようになった。 (Pull Request)
12 Ruby on Railsガイド
変更点について詳しくはChangelogを参照してください。
12.1 主な変更点
Railsのスレッディングとコード実行ガイドを追加。 (Pull Request)
Active Storageの概要ガイドを追加。 (Pull Request)
13 クレジット表記
Railsを頑丈かつ安定したフレームワークにするために多大な時間を費やしてくださった多くの開発者については、Railsコントリビューターの完全なリストを参照してください。これらの方々全員に深く敬意を表明いたします。
支援・協賛
Railsガイドは下記のサポーターから継続的な支援を受けています。