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

Crafting Rails Culture

Crafting Rails Culture

Eabad423977cfc6873b8f5df62b848a6?s=128

SHIBATA Hiroshi

September 27, 2014
Tweet

More Decks by SHIBATA Hiroshi

Other Decks in Technology

Transcript

  1. Crafting Rails Culture to Your Company Hiroshi SHIBATA @hsbt RailsPacific

  2. Thank you!

  3. SHIBATA Hiroshi @hsbt

  4. Tokyo Matze

  5. RailsGirls in Japan

  6. asakusa.rb

  7. RubyKaigi 2014 RubyConf Taiwan 2014 RedDotRubyConf 2014 RailsPacific OedoRubyKaigi04

  8. Ruby Committer

  9. ruby rubygems rake rdoc psych syck ruby-build railsgirls railsgirls-jp kaminari

    tdiary hiki jenkins.rb fastladder commit bit collector
  10. My work of Ruby 2.2.0 Update test-unit and minitest (removed

    from repository but bundled in tarball) coordinate to Ruby committers negotiate to sponsors make development environment
  11. None
  12. None
  13. None
  14. None
  15. None
  16. None
  17. None
  18. None
  19. "MPOHUJNFBHP

  20. None
  21. None
  22. None
  23. Pepabo Hosting EC Media

  24. 0WFSQFPQMF

  25. organizations which design systems ... are constrained to produce designs

    which are copies of the communication structures of these organizations — M. Conway
  26. PHP MySQL5 PHP MySQL4 Ruby and PHP Rails MySQL5 Pepabo

  27. ϛυϧ΢ΣΞͷΞοϓάϨʔυ ࣾ಺։ൃج൫ͷߏங ౷ܭج൫ͷߏங +409ͷӡ༻੔උ HJUIVC ηΩϡϦςΟ؂ࠪ ίʔυϨϏϡʔ ςετج൫ͷߏங ΞΫηεղੳج൫ͷߏங ։ൃϓϩηε

    ৽ਓڭҭ ݪߘࣥච ΧϯϑΝϨϯεൃද 044։ൃ αʔόʔߏ੒؅ཧͷ࡮৽ ϦʔϯελʔτΞοϓ +FOLJOT 3VCZ3BJMT 3%#.4 ٕज़ج൫νʔϜ
  28. Pepabo ٕज़ج൫νʔϜ PHP MySQL5 PHP MySQL4 Ruby and PHP Rails

    MySQL5
  29. Ruby Rails MySQL5 Ruby Rails MySQL5 Ruby and PHP Rails

    MySQL5 Pepabo ٕज़ج൫νʔϜ
  30. Why Ruby?

  31. 3. references Why Ruby? 2. environment 1. testing

  32. Testing

  33. 3. rspec powerful testing framework 2. minitest 1. test-unit

  34. Capybara

  35. 1) Failure: TestPowerAssert#test_power_assert_failed [test/test_power_assert.rb:10]: assert { "0".class == "3".to_i.times.map {|i|

    i + 1 }.class } | | | | | | | | | Array | | | [1, 2, 3] | | #<Enumerator: 3:times> | 3 String Power Assert
  36. None
  37. 1) Failure: TestPowerAssert#test_power_assert_failed [test/test_power_assert.rb:10]: assert { "0".class == "3".to_i.times.map {|i|

    i + 1 }.class } | | | | | | | | | Array | | | [1, 2, 3] | | #<Enumerator: 3:times> | 3 String class TestPowerAssert < Minitest::Test def test_power_assert_failed assert { "0".class == "3".to_i.times.map {|i| i + 1 }.class } end end testcase assertion
  38. 3. run test -> fail -> detect fail reason Typical

    usecase 2. add inspection code 1. run test -> fail 5. run test -> success 4. fix code
  39. 3. run test -> fail -> detect fail reason Typical

    usecase 2. add inspection code 1. run test -> fail 5. run test -> fail!!! -> turn to 2 4. fix code
  40. Typical usecase 1. run test -> fail 5. run test

    -> fail!!! -> turn to 4 4. fix code 1) Failure: TestPowerAssert#test_power_assert_failed [test/test_power_assert.rb:10]: assert { "0".class == "3".to_i.times.map {|i| i + 1 }.class } | | | | | | | | | Array | | | [1, 2, 3] | | #<Enumerator: 3:times> | 3 String
  41. None
  42. Development Environment 2. rbenv + ruby-build 1. osx + homebrew

  43. Many references

  44. Rails Good Parts Why Rails?

  45. 3. admin integration Why Rails? 2. oss way 1. modern

    architecture
  46. enforce modern architecture

  47. case.1 Ruby 1.8.6 to Ruby 2.1.2

  48. Ruby 1.8.6 Rails 2.0.2 Ruby 2.1.3 Rails 4.1.6 new!

  49. Ruby 1.8.6 1.8.7 1.9.3 2.0.0 2.1 Rails 2.0/2.1 2.3 3.0

    3.2 4.0/4.1
  50. KyotoTycoon to memcached case.2 replace legacy middleware

  51. app1 app2

  52. begin require 'dalli' rescue LoadError => e $stderr.puts "You don't

    have dalli installed in your application. Please add it to your Gemfile and run bundle install" raise e end rails4 need to dalli
  53. kyoto tycoon is slower than mysql… dalli is not support

    to kyoto tycoon…
  54. None
  55. enforce oss way

  56. Ruby Rails MySQL5 Ruby Rails MySQL5 Ruby and PHP Rails

    MySQL5 Pepabo ٕज़ج൫νʔϜ
  57. None
  58. class Bar def bar(foo = foo()) foo end def buzz(foo

    = foo) foo end def foo :buzz end end p Bar.new.bar p Bar.new.buzz
  59. % ruby -v r45272.rb ruby 2.2.0dev (2014-04-13 trunk 45580) [x86_64-darwin13]

    :buzz nil % ruby -v r45272.rb ruby 2.1.2p80 (2014-03-01 revision 45231) [x86_64-darwin13.0] :buzz :buzz
  60. None
  61. admin integration

  62. 3. no console What’s admin? 2. payment/refund 1. customer support

  63. organizations which design systems ... are constrained to produce designs

    which are copies of the communication structures of these organizations — M. Conway
  64. Developer Director Customer Support Our Typical Team

  65. VONBJOUBJOFEʜ

  66. 3. other app better admin 2. Rails Engine 1. app

    internal
  67. app internal pros better testing better deploy cons including difference

    application including effective code
  68. Rails Engine pros splitting application code better deploy cons difficulty

    testing can’t use production code directly
  69. Other app pros definitely splitting app cons separated develop cycle

    duplicated code
  70. No silver bullet

  71. Rails like a php MySQL5 Rails like a java MySQL5

    Rails like a php MySQL5 Optimize Your Company ٕज़ج൫νʔϜ
  72. Lern to Rails Internal step by step

  73. Lern to Active Record Internal

  74. github workflow

  75. ChatOps github issue costomer’s contact nagios

  76. DevOps

  77. Go to the next 10 years