SlideShare a Scribd company logo
WARNING!!
A HUGE CHANGE
RAILS 5
IS APPROACHING FAST
(ダライアスとかやったこと無いですけど)
のエントリから、 masterに入った= Rails5に入
るだろう機能を見ていきます。
公式Blog
(だいぶ細かく)
目玉
Rails API
rails-api/rails-api
このgemが標準で入る。
viewレイヤーをJSに任せてRailsはAPIだけのシステムの
場合に、サーバー側を軽量にできるっぽい。
WebSocketを扱う
ActionCableが登場いっぱい記事書かれるだろうしそっちを見て!
Turbolinks 3.0
rails/turbolinks
ajaxで<body>の中身を入れ替えてページリロードの負
荷を減らすやつ
<body>だけでなく部分的な置き換えとかが出来るよう
に
“とりあえずdisable”派に対抗できるか?
</目玉>
細かいのRAILS_ENV=production
RAILS_ENV=development
RAILS_ENV=test
RAILS_ENV=production
実行時の機能
ActiveRecord::Relation
#or
ついに来た。
Post.where('id = 1').or(Post.where('id = 2'))
# => SELECT * FROM posts WHERE (id = 1) OR (id = 2)
default_scopeにはたぶん注意すべき。
templateが無いときは
204 No Contentに前はTemplateMissingだかがraise
URLに.xmlとかつけられただけでエラーログが出る悩
みが解決
あと5からは
Allow default_render to take a block to customize behavior
when there's no template by davetron5000 · Pull Request
#20276 · rails/rails
default_render { render 404 }
テンプレートが無い時の処理をブロックで書ける。
(default_render自体は元からあったらしい)
belongs_toには値がデ
フォルトで必須にbelongs_to :user, optional: true
としない限り、値を設定しないとvalidation errorに。
config.active_record.belongs_to_required_by_default
でデフォルトを設定。
ちなみに元々required: trueというオプションがある
が、扱いが逆転してdeprecatedに。
ActiveRecordのenum
がlabelでwhere可能にclass Shop < ActiveRecord::Base
enum status: { open: 1, closed: 2 }
end
Shop.where(status: :open)
# => SELECT * FROM shops WHERE status = 1
(今まではwhere(status: 1) としか出来なかった)
model.errors.details
User.new(age: 15).errors.details
# => { age: [{ error: :too_young, years_limit: 18 }] }
messageに展開される前のエラータイプとoptionsを取得
できる。
JSON APIとかではこれを返したほうが良い気がする。
callback chainを途中
で止めるにはthrow
:abort
今までブロックからfalseを返すことで止まっていたが、
before_create { self.completed = false }
とかすると予期せず止まっちゃって困ってた。
throwは大域脱出のためのメソッド。エラー投げではな
いので注意。
partial名にRubyの識別
子以外も使えるように_404.html.erbとか
_with-hyphen.html.erbとか
_ .html.erbとか
がOKに。
ActiveSupport::Ordere
dOptionsが必須値をサ
ポートRails.configuration.some_config!
と"!"付きで参照すると、値がblankの時にKeyErrorを投げ
るという機能が追加された。
ActiveSupoprt::OrderedOptions
Hashの派生クラス
config/application.rbのconfigの中身
module MyApp
class Application < Rails::Application
config.my_config = ActiveSupport::OrderedOptions.new
config.my_config.value = 1
end
end
Rails.configuration.my_config.value # => 1
Enumerable#pluck
Add Enumerable#pluck. by kddeisz · Pull Request #20350 ·
rails/rails
Allow Enumerable#pluck to take a splat. by kddeisz · Pull
Request #20362 · rails/rails
[{ name: "David" }, { name: "Rafael" }, { name: "Aaron" }]
.pluck(:name)
# => ["David", "Rafael", "Aaron"]
[{ id: 1, name: "David" }, { id: 2, name: "Rafael" }]
.pluck(:id, :name)
# => [[1, "David"], [2, "Rafael"]]
ActiveRecord::Base.su
ppressメソッド追加ブロックの中ではそのクラスが保存されなくなる。
callbackとかで関連が作られる場合に、それをキャン
セルしたいときに使うような想定らしい。
class Comment < ActiveRecord::Base
belongs_to :commentable, polymorphic: true
after_create -> { Notification.create! comment: self, recipients: commendab
end
Notification.suppress do
Comment.create # Notificationは作られない
end
Enumerable#without
["David", "Rafael", "Aaron", "Todd"].without("Aaron", "Todd")
# => ["David", "Rafael"]
request.variant.smartp
hone?
アプリケーションでvariantを自分でチェックする際、値
に?を付けたメソッドで判定できるようになった。
Rails5で導入されたActiveSupport::ArrayInquirerというク
ラスの機能。
[:mobile, :tablet].inquiry.tablet? #=> true
Integerに#positive?と
#negative?が実はruby-2.3に入るが、それまでの繋ぎ
ruby-2.3とどっちが先に出るのやら
メソッドになっていると
points.reject(&:negative?)
とか書けるのでちょっと嬉しい。
Basic, Digest認証など
でカスタムメッセージ
を返せるログイン画面とか要らない場合に便利かも。
さらなる日付ヘルパー
on_weekend?
next_weekday
prev_weekday
next_day
prev_day
"weekend"は土日のこと。
next_dayとprev_dayはtomorrow, yesterdayと同じだが
aliasではない。DHH曰く、「なんか混乱したから」え
ー。
トークン認証に便利な
ARクラスマクロ
has_secure_token
.has_secure_passwordのトークン版。
保存時に#tokenカラムにランダム値が入る。
#regenerate_tokenで再生成する。
Base58というflickrのURL生成に使われているアルゴリ
ズムを使うらしい。
rake restart
touch tmp/restart.txt
するrakeタスク。
ActiveModel::Validatio
ns#validate!
バリデーションに引っかかったら
ActiveModel::ValidationError例外を投げるメソッド。
ActiveRecordにあったのがModelまで引き上げられた。
Controllerが
default_form_builder
を宣言できるようにclass AdminController < ApplicationController
default_form_builder AdminFormBuilder
end
Custom Form Builder、使ってますか?
ActiveRecord::RecordN
otFoundが持つ属性が
増えたraise RecordNotFound.new("Couldn't find #{name} with '#{primary_key}'=
name, primary_key, id) # ←この行が増えた
クラス名(文字列)
primary key名
id値
が取得できるように
paramsの親クラスが
HashWithIndifferentAc
cessではなくなった機能は別に変わらない。
is_a?/kind_of?してたら影響ある程度。
filter_paramtersに親キ
ーを指定可能にconfig.filter_parameters += ["credit_card.code"]
マイグレーションの
change_column_defau
ltをreversibleに出来る
ようにchange_column_default(:posts, :state, from: nil, to: "draft")
ActiveRecord::Relation
がEnumerableに現状のRelationは、持ってないメソッドはto_aして移譲
している。
なので、to_aを経由しない分軽くなるとか、is_a?(Array)
がfalseを返すとかの違いになる。
Migrationの
remove_foreign_keyが
rollback可能にオプションの与え方によってはrollback可能に。
ActionMailerのキュー
名が設定可能に今までは"mailers"固定だったが、
config.action_mailer.deliver_later_queue_name = 'my_mail_queue'
で設定可能に
ActiveRecordの属性の
デフォルト値にProcが
使えるようにclass User < ActiveRecord::Base
attribute :foobared_at, :time, default: -> { Time.now }
end
そもそも.attributeって知らなかった
っていうか、これActiveModelにください
Relation#uniqは
#distinctにリネームSQLのDISTINCTのことだと明確になった
Array#uniqとどっちが呼ばれてるか曖昧だった
alias_method_chainが
DeprecatedにModule#prependしましょう。
alias_method_chainの中身もModule#prependに変わって
るのが面白い。
ActionController::Base
#http_cache_forever
Controllerでの100年期限のキャッシュ。 Cache-Controlと
かEtagとかLastModifiedとかのヘッダも。
ActiveRecord::Base#to
uchで時刻を指定でき
るようにproduct.touch(time: Time.new(2015, 2, 16, 0, 0, 0))
fresh_when, stale?がコ
レクションを受け入れ
るようにリクエストのEtagとLastModifiedを元に、更新が必要な
さそうなら"304 Not Modified"を返すのがfresh_when。
fresh_when(etag: @articles,
last_modified: @articles.maximum(:created_at))
↓と書けるように
fresh_when(@articles)
find_each,
find_in_batchesに
:end_at
eachする範囲の終わりをIDで指定。find_eachでは自動で
order(:id)される
drop_tableに:if_exists
オプション追加DROP TABLE IF EXISTS posts
RAILS_ENV=
development
開発環境まわり
SQLのコンソール出力
がカラフルに
A HUGE CHANGE RAILS 5 IS APPROACHING FAST
ActiveJobの基底クラ
スとして
ApplicationJobが生成
されるようにApplicationControllerに相当するものがJobにも。
ActiveRecord::Base#ac
cessed_fields
そのActiveRecordインスタンスで、一度でも使用され
たフィールドの一覧を返す。
SELECT * せずに絞り込みたいときの強力なツールにな
る。
開発中のキャッシュ
ON/OFF
request from DHH
rake dev:cache # とか
rails server --[no-]dev-caching # とか
touch tmp/caching-dev.txt # (上記がやってること)
により、開発環境でキャッシュ機能をON/OFFできるよ
うに
scaffold.cssの生成を
skipできるrails generate scaffold book --no-scaffold-stylesheet
多分config/application.rbのconfigでも設定出来るんじゃ
ないかな?
独自のスタイル当てて、scaffoldで管理画面を作ったり
とか?
メールプレビュー機能
が画像をインライン表
示できるようにcid:スキームのURLに対応。cidスキームとか初めて知っ
た。
巨大過ぎるクエリ結果
に警告を出す機能config.active_record.warn_on_records_fetched_greater_than = 25
数値を設定すると、それより多くの結果セットを
SELECTしたときにログに警告を出す
不注意な巨大SELECT文に悩まされるプロジェクトに
(ログに警告出すだけじゃ効果あるかなぁ……)
renderを外から呼び出
すのが簡単になったFooController.render :action, locals: { ... }, assigns: { ... }
render以外にも、Controllerのインスタンスを自分でnew
するのが楽に。
method_source gem
生成されるGemfileにmethod_source gemが追加
banister/method_source
RAILS_ENV=test
rails/testの話。rspec-railsもこれをベースにしているので
問題は同じ。
controllerの#assignsと
#assert_templateが無
くなるに分離。rails-controller-testing
経緯は 。DHH曰
く、「それは内部実装のテストになるので良くない」
https://github.com/rails/rails/issues/18950
じゃあどうするのか?
よくわからない。
rspec-railsでもどうするのかは議論中の模様。
(コントローラの設計を根本から変える必要がある気が
する)
Controllerテストのア
クション呼び出し改善get :show, nil, nil, { a: 'b' }
↓
get :show, params: { y: x }, session: { a: 'b' }
Integration Testに合わせた形の模様。
#xhrがDeprecated
xhr :get, :show
↓
get :show, xhr: true
以上。
まとめてみて(今のところ)4.1とかよりはよほどおとなしい
プルリクエスト、テストコードなどの仕組みにより、
ChangeLogの在り方も昔より機能的になってきてい
る。 変更は分かりやすい単位で即座に公開され、その
過程の議論もオープンになり、テストが説明を助け
る。
ドキュメンテーションという作業の改善。仕事でも
大事な事。
は追いかける価値あり。あるいはThis week in Rails
Riding Rails(Rails公式Blog)
有難うございました

More Related Content

PPTX
<第1回>Laravelハンズオンセミナー
PDF
behatエクステンションの作り方
PDF
Laravel5を使って開発してみた
PDF
REST with Spring Boot #jqfk
PDF
laravel x モバイルアプリ
PDF
Laravelとテストについて
PPTX
Alfresco勉強会#36 alfresco 5でカスタムREST APIを作ってみよう
PDF
50分で掴み取る ASP.NET Web API パターン&テクニック
<第1回>Laravelハンズオンセミナー
behatエクステンションの作り方
Laravel5を使って開発してみた
REST with Spring Boot #jqfk
laravel x モバイルアプリ
Laravelとテストについて
Alfresco勉強会#36 alfresco 5でカスタムREST APIを作ってみよう
50分で掴み取る ASP.NET Web API パターン&テクニック

What's hot (19)

PDF
Laravelの認証について
PPT
今、最もイケてるPHPフレームワークLaravel4
PPTX
Phpフレームワーク 「laravel」でブログを作ろう
KEY
Rails基礎講座 part.2
PDF
Spring Framework ふりかえりと4.3新機能
PDF
ASP.NET WebAPI 体験記 #clrh99
PPT
マッシュアップ勉強会
PDF
PHP in Java -Quercus- によるレガシーマイグレーション実例 #jjug_ccc #ccc_r12
PPTX
Alfresco勉強会#33 alfresco 5.1でコンテンツ自動削除を実装してみた
PPTX
PHP on Cloud
PDF
Hokuriku.NET ASP.NET MVC 入門 2 回目 1.編集機能を実装
PDF
Real world android akka
PDF
Open Liberty: オープンソースになったWebSphere Liberty
PDF
Service workerとwebプッシュ通知
PDF
ReduxとSwiftの組み合わせ:改訂版
PDF
Real World Android Akka - 日本語版
PPTX
AWS ではじめる Programmable Cloud
PPTX
メタプログラミングRuby勉強会#7(fluentプラグイン)
PDF
Garageを触ってみた
Laravelの認証について
今、最もイケてるPHPフレームワークLaravel4
Phpフレームワーク 「laravel」でブログを作ろう
Rails基礎講座 part.2
Spring Framework ふりかえりと4.3新機能
ASP.NET WebAPI 体験記 #clrh99
マッシュアップ勉強会
PHP in Java -Quercus- によるレガシーマイグレーション実例 #jjug_ccc #ccc_r12
Alfresco勉強会#33 alfresco 5.1でコンテンツ自動削除を実装してみた
PHP on Cloud
Hokuriku.NET ASP.NET MVC 入門 2 回目 1.編集機能を実装
Real world android akka
Open Liberty: オープンソースになったWebSphere Liberty
Service workerとwebプッシュ通知
ReduxとSwiftの組み合わせ:改訂版
Real World Android Akka - 日本語版
AWS ではじめる Programmable Cloud
メタプログラミングRuby勉強会#7(fluentプラグイン)
Garageを触ってみた
Ad

Viewers also liked (12)

PDF
2014.11.01 Dockerことはじめ
PDF
そろそろ知っておきたい!!コンテナ技術と Dockerのキホン
PDF
プレゼン用の図を自動生成する話
ODP
Jenkinsとidobataで幸せな生活
PDF
Linux Namespaces
PDF
Docker Swarm入門
PDF
今だからこそ知りたい Docker Compose/Swarm 入門
PDF
Docker Compose入門~今日から始めるComposeの初歩からswarm mode対応まで
PDF
プログラミング教育の基礎知識
PDF
Docker 基本のおさらい
PDF
Docker最新動向2017秋+セキュリティの落とし穴
PDF
Dockerの期待と現実~Docker都市伝説はなぜ生まれるのか~
2014.11.01 Dockerことはじめ
そろそろ知っておきたい!!コンテナ技術と Dockerのキホン
プレゼン用の図を自動生成する話
Jenkinsとidobataで幸せな生活
Linux Namespaces
Docker Swarm入門
今だからこそ知りたい Docker Compose/Swarm 入門
Docker Compose入門~今日から始めるComposeの初歩からswarm mode対応まで
プログラミング教育の基礎知識
Docker 基本のおさらい
Docker最新動向2017秋+セキュリティの落とし穴
Dockerの期待と現実~Docker都市伝説はなぜ生まれるのか~
Ad

Similar to A HUGE CHANGE RAILS 5 IS APPROACHING FAST (20)

PDF
最適化計算エンジンを備えた Ruby on Rails アプリケーションのアーキテクチャーと進化
PDF
Rails初心者レッスン lesson1 3rd edition
PDF
Ruby on Rails 入門
PDF
LaravelでAPI定義を管理する
PDF
Scala2.8への移行
PDF
Scala2.8への移行
PDF
ScalaでAndroidアプリ開発
PPTX
Appsody でnodejsのアプリを立ち上げよう!
PDF
react_rails
PDF
Rails解説セミナー: Railsのアップグレード編
PDF
React Native GUIDE
PDF
Rails初心者レッスン lesson3 3edition
PPTX
UnicastWS vol.2
PDF
Rails初心者レッスン lesson4 2edition
PDF
クラスメソッド第4回登壇資料 RxRealm
PPTX
Elixir入門「第3回:Phoenix 1.3で高速webアプリ & REST APIアプリをサクッと書いてみる」
PPTX
Couch Db勉強会0623 by yssk22
PDF
AWSで開発するサーバレスAPIバックエンド
PDF
Java ee6 with scala
PDF
【LT】 怖くない恐怖のScala.js
最適化計算エンジンを備えた Ruby on Rails アプリケーションのアーキテクチャーと進化
Rails初心者レッスン lesson1 3rd edition
Ruby on Rails 入門
LaravelでAPI定義を管理する
Scala2.8への移行
Scala2.8への移行
ScalaでAndroidアプリ開発
Appsody でnodejsのアプリを立ち上げよう!
react_rails
Rails解説セミナー: Railsのアップグレード編
React Native GUIDE
Rails初心者レッスン lesson3 3edition
UnicastWS vol.2
Rails初心者レッスン lesson4 2edition
クラスメソッド第4回登壇資料 RxRealm
Elixir入門「第3回:Phoenix 1.3で高速webアプリ & REST APIアプリをサクッと書いてみる」
Couch Db勉強会0623 by yssk22
AWSで開発するサーバレスAPIバックエンド
Java ee6 with scala
【LT】 怖くない恐怖のScala.js

A HUGE CHANGE RAILS 5 IS APPROACHING FAST