Successfully reported this slideshow.
Your SlideShare is downloading. ×

A HUGE CHANGE RAILS 5 IS APPROACHING FAST

Ad

WARNING!!
A HUGE CHANGE
RAILS 5
IS APPROACHING FAST
(ダライアスとかやったこと無いですけど)

Ad

のエントリから、 masterに入った= Rails5に入
るだろう機能を見ていきます。
公式Blog

Ad

(だいぶ細かく)

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Loading in …3
×

Check these out next

1 of 65 Ad
1 of 65 Ad

A HUGE CHANGE RAILS 5 IS APPROACHING FAST

Download to read offline

公式Blogのエントリから、 masterに入った = Rails5に入るだろう機能を見ていきます。各機能のタイトルのリンクから当該Pull Requestなどの情報源に飛べるので、正確な情報はそちらで。Hamamatsu.rb #55 での発表した発表に使った資料です。全部詳しく話す時間は無かったので(当然)、いずれもう1回じっくりやるかもしれません。

公式Blogのエントリから、 masterに入った = Rails5に入るだろう機能を見ていきます。各機能のタイトルのリンクから当該Pull Requestなどの情報源に飛べるので、正確な情報はそちらで。Hamamatsu.rb #55 での発表した発表に使った資料です。全部詳しく話す時間は無かったので(当然)、いずれもう1回じっくりやるかもしれません。

More Related Content

Slideshows for you (18)

A HUGE CHANGE RAILS 5 IS APPROACHING FAST

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

×