読者です 読者をやめる 読者になる 読者になる

Lチカ開発ブログ

https://l-chika.com/の開発ブログ

Rails 5.0 で地味にうれしかった事

プログラミング ruby rails

Lチカ をつくるにあたって、Rails 5.0 を利用したので、ここまでで感じた地味にうれしかった事。

  • rakeコマンドをrailsコマンドに統一
  • force_sslについて
  • Rails 5.0 に入ったDB破壊系taskの防止処理について
  • enumの定義に:prefix/:suffixオプションを追加
  • モデルの継承元が ActiveRecord::Base から ApplicationRecord になった

railsguides.jp

rakeコマンドをrailsコマンドに統一

rakeタスクをbin/railsで置き換え。 今までは、migration系とかはrakeを利用して、Railsのアプリケーションに関わる操作は ./bin/rails s とかを利用してたけど、それが統一。 正直これは長年使ってると慣れちゃうけど、これからRailsを学習する人には嬉しいと思う。

Rails 5.0で追加される主な新機能(Ruby on Rails公式ブログより) - Qiita

force_ssl

より安全にSSLを試したりオフにしたりできるよう、config.force_sslとconfig.ssl_optionsを簡単に導入。

Rails3にあって、 Rails4でなくなって Rails5で復活

という流れなのかな?

ELBのヘルスチェックの際に非常に楽になる

config/environments/production.rb

config.force_ssl = true
config.ssl_options = {
  redirect: {
    exclude: -> request { request.path =~ /healthcheck/ }
  }
}

ただ config/environments 直下の環境設定に config.ssl_options を設定しても反映されず config/initializers/new_framework_defaults.rb にある

Rails.application.config.ssl_options = { hsts: { subdomains: true } }

がデフォルトで記述されているため、この記述を削除するかここに追記しないと反映されない

Rails.application.config.ssl_options = {
  hsts: { subdomains: true },
  redirect: { exclude: ->(request) { request.path =~ /healthcheck/ } }
}

ruby - skip/disable force_ssl for particular controller in rails - Stack Overflow

Rails4のforce_sslでELBからのヘルスチェックを除外する - Qiita

Rails 5.0 に入ったDB破壊系taskの防止処理について

productionモードでのdb操作系のコマンドに制限が入ることに。 間違えてDBを消すとかの恐怖からの解放。

Rails 5に入ったDB破壊系taskの防止処理について | 日々雑記

enumの定義に:prefix/:suffixオプションを追加

Rails 4.1 から導入された enum にprefix、suffix機能が追加。 enumに近い機能を提供するgemの enumerize では既にあったが、 Railsの機能として追加。

class Conversation < ActiveRecord::Base
  enum status: [:active, :archived], _suffix: true
  enum comments_status: [:active, :inactive], _prefix: :comments
end
conversation.active_status!
conversation.archived_status? # => false

conversation.comments_inactive!
conversation.comments_active? # => false

ActiveRecord::Enum

モデルの継承元が ActiveRecord::Base から ApplicationRecord になった

rails g model 等でモデルを生成した場合に、app/models/application_record.rb が作成され、ActiveRecord::Baseではなく、ApplicationRecord から継承されるように変更。

これで何が嬉しいかというと、アプリケーションのモデル全体への変更が楽に。

これまでは ActiveRecord::Base の再オープンや、 Module を作って各モデルにincludeをさせるとかしてたけど、これからは ApplicationRecord を変更すればOK.

今から知っておきたいRails 5の新機能・変更点 - Qiita

Ruby on Rails 5 超入門

Ruby on Rails 5 超入門