Successfully reported this slideshow.
Your SlideShare is downloading. ×

Controllerのbefore_actionにおける インスタンス変数セットについて

Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Loading in …3
×

Check these out next

1 of 24 Ad
Advertisement

More Related Content

Similar to Controllerのbefore_actionにおける インスタンス変数セットについて (20)

Advertisement

Recently uploaded (20)

Controllerのbefore_actionにおける インスタンス変数セットについて

  1. 1. Controllerのbefore_actionにおける インスタンス変数セットについて
  2. 2. 自己紹介 名前 : pospome ブログ : http://d.hatena.ne.jp/pospome/ 職種 : サーバサイドエンジニア rails歴:2 ~ 3ヶ月
  3. 3. before_actionで インスタンス変数をセットしているコードを 見かけることがある
  4. 4. class UserController < ApplicationController before_action :set_user def index() //何らかの処理 @user.execute end private def set_user @user = User.findby(id: 100) end end
  5. 5. before_action で変数をセットする実装が 好きではない 自分ならこう書く
  6. 6. class UserController < ApplicationController def index() @user = find_user(100) @user.execute end private def find_user(id) User.findby(id: id) end end
  7. 7. before_actionでの変数セットをやめて action側でprivateな関数を呼び出す
  8. 8. サーバサイドでjsonを返す場合は インスタンス変数すら不要になるので、 user変数のスコープを狭くできる
  9. 9. class UserController < ApplicationController def index() user = find_user(100) user.execute render json: user end private def find_user(id) User.findby(id: id) end end
  10. 10. なぜ、こういった実装をするのか?
  11. 11. before_actionが連続した場合の 変数書き換えを防ぐ
  12. 12. class UserController < ApplicationController // それぞれで同じ変数を書き換えているかも // before_action が増えたら、 // 実行順と変数の状態を考慮する必要がある before_action :aaa before_action :bbb, only: ['index', 'detail'] before_action :ccc, except: ['index', 'detail'] end
  13. 13. before_actionは戻り値を取れないので、 Controller内のインスタンス変数に対して 副作用を与える実装になってしまいがち action内で明示的に呼ぶことによって 参照透過な実装になる
  14. 14. データの読み込みも処理の一部 action内で明示することによって、 処理の流れがaction内で完結する
  15. 15. before_actionは何をするのか?
  16. 16. actionを実行するかどうかの バリデーションに利用する 例:権限チェック 可能な限り before_action同士で依存関係を 持たないようにした方がいい
  17. 17. 人によっては DRYに反していると思うかもしれないが、 action内の関数呼び出しは重複だろうか? 変数のスコープを限定する方が大事だと思う
  18. 18. 同じ考えを持つ方々 http://craftingruby.com/posts/2015/05/31/dont-use-before- action-to-load-data.html http://blog.ragnarson.com/2015/09/30/problems-with-typical -rails-controllers-and-before-actions.html http://blog.thefrontiergroup.com.au/2014/02/before_action _an_anti_pattern/
  19. 19. 「Best Practice」らしいが、 コメント欄を確認すると面白い http://rails- bestpractices.com/posts/2010/07/24/use- before_filter/
  20. 20. 今回の内容はrailsというよりも 変数のスコープや副作用の話なので、 実はrails関係ない
  21. 21. おわり
  22. 22. ここから発表後の追記です
  23. 23. 発表時間が余ったので before_actionで変数を セットしている人いますか? と聞いたところ・・・・
  24. 24. 25人中2,3人がセットしているとのこと before_actionで変数セットするのって 少数派なのかな・・・ だとしたら、 わざわざ取り上げるテーマでもなかった かもしれない・・・

×