Contenu connexe
Similaire à Rails3.2ってどう変わるの? (20)
Plus de Takafumi ONAKA (20)
Rails3.2ってどう変わるの?
- 3. 自己紹介
大仲 能史
@onk
仕事
ソーシャルゲーム事業本部
アプリケーションエンジニア
設計・開発担当
3
thgirypoC © .devreseR sthgiR llA dtL ,.oC MOCERD
- 7. Ruby on Rails 3.2 Release Note
http://edgeguides.rubyonrails.org/3_2_release_notes.html
7
thgirypoC © .devreseR sthgiR llA dtL ,.oC MOCERD
- 8. Ruby on Rails 3.2 Release Note
http://developer.aiming-inc.com/rails/rails-3-2-release-
note-in-ja/ (日本語訳)
8
thgirypoC © .devreseR sthgiR llA dtL ,.oC MOCERD
- 11. Major Features
高速な development モードと
routing
自動クエリExplain
タグつきのログ
11
thgirypoC © .devreseR sthgiR llA dtL ,.oC MOCERD
- 12. Major Features
高速な development モードと
routing
ファイルが変更されたときのみclassを
再読み込みするようになりました
journeyを使うことでroutingの認識が速
くなりました
12
thgirypoC © .devreseR sthgiR llA dtL ,.oC MOCERD
- 13. Major Features
高速な development モードと
routing
超簡単なアプリでも400msほど違った
ので、開発環境だけでも今すぐ上げる
と幸せになれるよ
# rails 3.2.2 + ruby 1.9.3
Requests per second: 56.73 [#/sec] (mean)
# rails 3.1.4 + ruby 1.9.3
Requests per second: 18.19 [#/sec] (mean)
13
thgirypoC © .devreseR sthgiR llA dtL ,.oC MOCERD
- 14. Major Features
自動クエリExplain
ActiveRecord::Relationにexplainメ
ソッドが実装されました
development mode では、0.5 秒以上か
かったクエリは自動でEXPLAINも発行さ
れ、ログに出力されるようになりまし
た
14
thgirypoC © .devreseR sthgiR llA dtL ,.oC MOCERD
- 15. Major Features
タグつきのログ
ActiveSupport::TaggedLoggingが実装
されました
Logger = ActiveSupport::TaggedLogging.new(Logger.new(STDOUT))
Logger.tagged("BCX") { Logger.info "Stuff" }
# Logs "[BCX] Stuff"
Logger.tagged("BCX", "Jason") { Logger.info "Stuff" }
# Logs "[BCX] [Jason] Stuff"
Logger.tagged("BCX") { Logger.tagged("Jason") { Logger.info
"Stuff" } }
# Logs "[BCX] [Jason] Stuff"
15
thgirypoC © .devreseR sthgiR llA dtL ,.oC MOCERD
- 20. Railties
scaffold/model/migrationの
generatorにindexおよびuniqと
いう修飾子を与えられるよう
になりました
rails g migration add_hoge_id_to_piyo
hoge_id:integer:uniq
add_column :piyos, :hoge_id, :integer
add_index :piyos, :hoge_id, :unique => true
20
thgirypoC © .devreseR sthgiR llA dtL ,.oC MOCERD
- 21. Railties
Rails::Rack::Logger middleware
更新。config.log_tagsに書いた
任意の tag を
ActiveSupport::Taggedloggingに
渡すことができるようになりまし
た
subdomainやrequest idを表示すると便利!
21
thgirypoC © .devreseR sthgiR llA dtL ,.oC MOCERD
- 22. Railties
例外発生時にShowException
middlewareから呼ばれる例外
処理アプリケーションを
config.exceptions_appで設定
できるようになりました
22
thgirypoC © .devreseR sthgiR llA dtL ,.oC MOCERD
- 23. Railties
依存関係のあるファイルに変
更があったときのみclassを再
読み込みするようになり、
developmentの動作速度が向上
しました
23
thgirypoC © .devreseR sthgiR llA dtL ,.oC MOCERD
- 26. Action Mailer
mailのバージョンを2.4.0に引
き上げました。
Rails 3.0で廃止予定になって
いた古いAPIを削除しました
26
thgirypoC © .devreseR sthgiR llA dtL ,.oC MOCERD
- 28. Action Controller
send_fileで:typeを指定しない
場合、拡張子からMIMEタイプ
を自動で入れるようになりま
した
デフォルトで以下に対応
png jpg gif bmp tiff mpeg pdf zip
28
thgirypoC © .devreseR sthgiR llA dtL ,.oC MOCERD
- 29. Action Controller
CSRFトークンが欠けている場
合に警告を出すログレベル
を、:debugから:warnに変更し
ました
29
thgirypoC © .devreseR sthgiR llA dtL ,.oC MOCERD
- 30. Action Controller
APIリクエスト(:xml、:json)に
対してレスポンス本文が存在
しない場合、respounderは
204 No Content を返します。
scaffoldで作成したcontroller
も同様に204を返すようになっ
ています。
30
thgirypoC © .devreseR sthgiR llA dtL ,.oC MOCERD
- 31. Action Controller
jQueryから叩くときに嬉しい
# PUT /hoges/1
# PUT /hoges/1.json
def update
@hoge = Hoge.find(params[:id])
respond_to do |format|
if @hoge.update_attributes(params[:hoge])
format.html { redirect_to @hoge, notice: 'Hoge was successfully
updated.' }
format.json { head :no_content }
else
format.html { render action: "edit" }
format.json { render json: @hoge.errors,
status: :unprocessable_entity }
end
end
end
31
thgirypoC © .devreseR sthgiR llA dtL ,.oC MOCERD
- 32. Action Controller
ActionDispatch::ShowExcept
ionsはリファクタされました。
例外表示/非表示の責務を
controllerが負うことになりま
す。
show_detailed_exceptions?をoverride
することでエラー出力を切り替えます
32
thgirypoC © .devreseR sthgiR llA dtL ,.oC MOCERD
- 33. Action Dispatch
ActionDispatch::RequestId
ミドルウェアを追加しました。
一意なX-Request-Idヘッダがresponse
に設定されるようになり、
ActionDispatch::Request#uuidから参
照できます。
TaggedLoggingで使うと便利?
33
thgirypoC © .devreseR sthgiR llA dtL ,.oC MOCERD
- 34. Action View
render :template =>
"foo.html.erb" のように、拡
張子の形で format や handler
を渡す方式は廃止されました。
下記の形で利用してください。
render :template => “foo”, :formats
=> [:html, :js], :handlers => :erb
34
thgirypoC © .devreseR sthgiR llA dtL ,.oC MOCERD
- 35. Action View
formに名前空間を与えること
ができるようになりました
今まで重複していたidを一意
なものにすることができます
<%= form_for(@offer, :namespace => 'namespace') do |f| %>
<%= f.label :version, 'Version' %>:
<%= f.text_field :version %>
<% end %>
35
thgirypoC © .devreseR sthgiR llA dtL ,.oC MOCERD
- 36. Action View
:multipleなselect tagの前に、
hidden input tagを生成するよ
うになりました
何も選択せずに送信した場合、
何も送られないというHTMLの
仕様への対策です
36
thgirypoC © .devreseR sthgiR llA dtL ,.oC MOCERD
- 39. Active Record
first_or_create、
first_or_create!、
first_or_initializeをActive
Recordに追加しました。
find_or_create_byよりもどの属性を
使って探す/作るのかが明確になるので
良いアプローチ
39
thgirypoC © .devreseR sthgiR llA dtL ,.oC MOCERD
- 40. Active Record
1カラムでkey/value ストアを
表現する
ActiveRecord::Base.storeを
実装しました
指定したカラムにserializeし
たHashを入れることができま
す。
40
thgirypoC © .devreseR sthgiR llA dtL ,.oC MOCERD
- 41. Active Record
ユニークなクエリを生成する
ActiveRecord::Relation#uniq
を追加しました
User.select("distinct name")
User.select(:name).uniq
41
thgirypoC © .devreseR sthgiR llA dtL ,.oC MOCERD
- 42. Active Record
値の配列を返す
ActiveRecord::Relation#pluc
kメソッドが実装されました
これはserializeされたattribute
でも動作します
42
thgirypoC © .devreseR sthgiR llA dtL ,.oC MOCERD
- 44. Active Record
ActiveRecord::Relation#exp
lainが実装されました。
自動的にスロークエリを
EXPLAINし、ログに吐くよう
になりました。閾値はデフォ
ルトで0.5秒です。
44
thgirypoC © .devreseR sthgiR llA dtL ,.oC MOCERD
- 45. Active Record
assosiation methodsをoverrideや
compositionする際にsuperを使いやす
いようmodule化しました
class Car < ActiveRecord::Base
belongs_to :owner
belongs_to :old_owner
def owner=(new_owner)
self.old_owner = self.owner
super
end
end
45
thgirypoC © .devreseR sthgiR llA dtL ,.oC MOCERD
- 46. Active Record
Engineからコピーされた
migrationはEngine名のスコー
プを持つようになりました
例えば以下のようなファイル名になり
ます
01_create_posts.blog.rb
46
thgirypoC © .devreseR sthgiR llA dtL ,.oC MOCERD
- 47. Active Record
scopeを指定してmigrationを
実行する機能を追加しました
これにより、Engine単位で
migrationを実行することがで
きるようになりました
rake db:migrate SCOPE=blog
47
thgirypoC © .devreseR sthgiR llA dtL ,.oC MOCERD
- 48. Active Record
transactionを開始する
with_lockメソッドが追加され
ました。
48
thgirypoC © .devreseR sthgiR llA dtL ,.oC MOCERD
- 49. Active Record
class Order < ActiveRecord::Base
def cancel!
transaction do
lock!
# ... cancelling logic
end
end
end
class Order < ActiveRecord::Base
def cancel!
with_lock do
# ... cancelling logic
end
end
end
49
thgirypoC © .devreseR sthgiR llA dtL ,.oC MOCERD
- 51. Active Model
ActiveModel::Errors#added?
により定義されたエラーが発
生したかどうかチェックでき
ます。
51
thgirypoC © .devreseR sthgiR llA dtL ,.oC MOCERD
- 52. Active Model
mass_assignmentで保護された属性
を更新しようとしたときの振る舞い
をmass_assignment_sanitizerで指定
できるようになりました。:logger
と:strictがサポートされています。
:strictの場合、保護された属性を更新し
ようとすると常に
ActiveModel::MassAssignmentSecurity
::Errorをraiseします
52
thgirypoC © .devreseR sthgiR llA dtL ,.oC MOCERD
- 54. Active Resource
リダイレクトレスポンス: 303
See Other や 307 Temporary
Redirect が返ってきた時も、
301 Moved Permanently や
302 Found が返ってきたとき
と同様の挙動になりました。
54
thgirypoC © .devreseR sthgiR llA dtL ,.oC MOCERD
- 56. Active Support
ActiveSupport::TaggedLoggi
ng を追加しました。これは任
意の標準 Logger クラスをラッ
プし、タグ付け機能を付与す
ることができます。
56
thgirypoC © .devreseR sthgiR llA dtL ,.oC MOCERD
- 57. Active Support
Date、Time、DateTimeの
beginning_of_weekメソッドは、
週の開始曜日を指定するオプ
ションを付けられるようにな
りました。
57
thgirypoC © .devreseR sthgiR llA dtL ,.oC MOCERD
- 58. Active Support
ActiveSupport::Notificatio
ns.subscribed を追加しまし
た。与えたブロックが実行さ
れている間のみの受信登録
(subscription) が可能です。
58
thgirypoC © .devreseR sthgiR llA dtL ,.oC MOCERD
- 59. Active Support
Ruby 1.9におけるblank?の対
象がUnicodeホワイトスペース
文字([:space:])に拡張されま
した。同様に、Ruby 1.8にお
いては全角スペース(U+3000)
が空白文字とみなされるよう
になりました。
59
thgirypoC © .devreseR sthgiR llA dtL ,.oC MOCERD
- 60. Active Support
範囲を生成する方法として
Time#all_day, Time#all_week,
Time#all_quarter そして
Time#all_year を追加しまし
Time.now.all_day
た。
# => 2012-03-06 00:00:00 +0900..2012-03-06
23:59:59 +0900
User.where(created_at: Time.now.all_day)
60
thgirypoC © .devreseR sthgiR llA dtL ,.oC MOCERD
- 61. Active Support
ActiveSupport::Cache::Null
Store を、開発やテスト向け
に追加しました。
61
thgirypoC © .devreseR sthgiR llA dtL ,.oC MOCERD
- 64. Railties
d が destroy の alias に
~/.railsrcに rails new のオプ
ションを保存できるように
64
thgirypoC © .devreseR sthgiR llA dtL ,.oC MOCERD
- 65. Railties
rake routesの結果が見やす
くなりました
articles GET /articles(.:format) {:action=>"index", :controller=>"articles"}
POST /articles(.:format) {:action=>"create", :controller=>"articles"}
new_article GET /articles/new(.:format) {:action=>"new", :controller=>"articles"}
edit_article GET /articles/:id/edit(.:format) {:action=>"edit", :controller=>"articles"}
article GET /articles/:id(.:format) {:action=>"show", :controller=>"articles"}
PUT /articles/:id(.:format) {:action=>"update", :controller=>"articles"}
DELETE /articles/:id(.:format) {:action=>"destroy", :controller=>"articles"}
articles GET /articles(.:format) articles#index
POST /articles(.:format) articles#create
new_article GET /articles/new(.:format) articles#new
edit_article GET /articles/:id/edit(.:format) articles#edit
article GET /articles/:id(.:format) articles#show
PUT /articles/:id(.:format) articles#update
DELETE /articles/:id(.:format) articles#destroy
65
thgirypoC © .devreseR sthgiR llA dtL ,.oC MOCERD
- 66. Action View
日付のヘルパーメソッドに新
しいオプション
:use_two_digit_numbers
valueはそのまま、表示だけzero-
paddingされます
66
thgirypoC © .devreseR sthgiR llA dtL ,.oC MOCERD
- 67. ActiveRecord
development mode では、
db:create同様、 db:dropでtest
データベースもdropされるよ
うになりました。
67
thgirypoC © .devreseR sthgiR llA dtL ,.oC MOCERD
- 68. ActiveRecord
アソシエーションのため
の :class_nameオプションは
string の代わりに symbol をと
れるようになりました。
68
thgirypoC © .devreseR sthgiR llA dtL ,.oC MOCERD
- 72. Railties
console class を変更可能に
# it can be added to config/application.rb
console do
require "pry"
config.console = Pry
end
72
thgirypoC © .devreseR sthgiR llA dtL ,.oC MOCERD
- 73. Action Pack/Active Resource
HTTP PATCHメソッドに対応
PUTは本来リソースの全置換え。
PATCHメソッドは差分を適用する。
差分更新がよりRESTな自然な形に
73
thgirypoC © .devreseR sthgiR llA dtL ,.oC MOCERD
- 74. Active Record
ActiveRecord::Base を継承す
るのを止めました
ActiveRecord::Modelをincludeしてね
AR=>DataMapperが楽になる?
class Post
include ActiveRecord::Model
end
74
thgirypoC © .devreseR sthgiR llA dtL ,.oC MOCERD
- 76. まとめ
Major Features
ちょっ速
自動Explain
TaggedLogging
76
thgirypoC © .devreseR sthgiR llA dtL ,.oC MOCERD
- 77. まとめ
Railties
便利になった
indexの定義漏れを防ぐgenerator
syntax
77
thgirypoC © .devreseR sthgiR llA dtL ,.oC MOCERD
- 78. まとめ
ActiveRecord
便利になった
uniq, pluck, explain, with_lock
store
意味的にしっかりしてきた
migration の scope
first_or_create
78
thgirypoC © .devreseR sthgiR llA dtL ,.oC MOCERD
- 79. まとめ
ActiveSupport
便利になった
TaggedLogging
Time#all_day
ActiveSupport::Cache::NullStore
79
thgirypoC © .devreseR sthgiR llA dtL ,.oC MOCERD