Upgrade to Pro — share decks privately, control downloads, hide ads and more …

how require kill spring

how require kill spring

永和システムマネジメント・DeNA 技術交流会発表資料

Fumiaki MATSUSHIMA

March 25, 2015
Tweet

More Decks by Fumiaki MATSUSHIMA

Other Decks in Programming

Transcript

  1. (株)永和システムマネジメント
    @mtsmfm
    松島 史秋
    springの死について
    私が知っている1つの方法

    View Slide

  2. 松島 史秋
    GitHub, Twitter
    @mtsmfm

    View Slide

  3. View Slide

  4. ある
    rails 3.2
    案件

    View Slide

  5. spring の死

    View Slide

  6. spring の死
    \LoadError/

    View Slide

  7. TL;DR
    rails 上で
    requireするな

    View Slide

  8. TL;DR
    rails 上で
    requireするな
    ※ ただし stdlib は除く

    View Slide

  9. $ bundle exec
    spring rspec

    View Slide

  10. Expected /...
    /break_spring/app/models
    /animal.rb
    to define Animal (LoadError)

    View Slide

  11. View Slide

  12. あるから!

    View Slide

  13. View Slide

  14. View Slide

  15. ???

    View Slide

  16. $ bundle exec
    spring rspec
    すると何が起きるか

    View Slide

  17. ※ spring 1.3.3
    ※ rails 3.2 のデフォルト設定の場合
    ※ rails 4 ~> のデフォルト設定の場合は発
    生しません

    View Slide

  18. $ bundle exec
    spring rspec
    (1回目)

    View Slide

  19. 1. gem とか require
    2. app 以下とか load
    3. テスト実行
    (1回目)

    View Slide

  20. 簡易 spring

    View Slide

  21. View Slide

  22. require & load
    run command

    View Slide

  23. View Slide

  24. $ bundle exec
    spring rspec
    (2回目、変更無)

    View Slide

  25. (2回目、変更無)
    1. gem とか require
    2. app 以下とか load
    3. テスト実行

    View Slide

  26. 1. gem とか require
    2. app 以下とか load
    3. テスト実行
    (2回目、変更無)

    View Slide

  27. 1. gem とか require
    2. app 以下とか load
    3. テスト実行
    (2回目、変更無)
    fork 前
    fork 後

    View Slide

  28. 1. gem とか require
    2. app 以下とか load
    3. テスト実行
    (2回目、変更無)
    fork 前
    fork 後

    View Slide

  29. $ touch app/models/cat.
    rb

    View Slide

  30. $ bundle exec
    spring rspec
    (3回目、変更有)

    View Slide

  31. 1. load したのを
    const_remove
    2. テスト実行
    3. const_missing で
    require
    (3回目、変更有)

    View Slide

  32. 1. load したのを
    const_remove
    2. テスト実行
    3. const_missing で
    require
    (3回目、変更有)

    View Slide

  33. require 済

    View Slide

  34. require ‘animal’
    # => false

    View Slide

  35. Expected /...
    /break_spring/app/models
    /animal.rb
    to define Animal (LoadError)

    View Slide

  36. ※ spring 1.3.3
    ※ rails 3.2 のデフォルト設定の場合
    ※ rails 4 ~> のデフォルト設定の場合は発
    生しません

    View Slide

  37. 1. gem とか require
    2. app 以下とか load
    3. テスト実行
    4. const_missing で
    require

    View Slide

  38. 1. gem とか require
    2. app 以下とか load
    3. テスト実行
    4. const_missing で
    require
    fork 前
    fork 後

    View Slide

  39. Rails 3
    config.cache_classes = true
    (eager_load = true を兼ねてる)
    Rails 4
    config.cache_classes = true
    config.eager_load = false

    View Slide

  40. TL;DR
    rails 上で
    requireするな
    ※ ただし stdlib は除く

    View Slide

  41. stdlib の
    イケてる require
    場所
    どこ

    View Slide