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

How to Change Organization

SHIBATA Hiroshi
December 12, 2014
250

How to Change Organization

SHIBATA Hiroshi

December 12, 2014
Tweet

Transcript

  1. !
    How to Change
    Organization
    !
    Hiroshi SHIBATA
    @hsbt
    Rakuten TechTalk

    View Slide

  2. SHIBATA
    !
    Hiroshi
    !
    @hsbt

    View Slide

  3. View Slide

  4. ruby
    rubygems
    rake
    rdoc
    psych
    syck
    ruby-build
    railsgirls
    railsgirls-jp
    kaminari
    tdiary
    hiki
    jenkins.rb
    fastladder
    commit bit collector

    View Slide

  5. Ruby Committer

    View Slide

  6. View Slide

  7. จࣈ

    View Slide

  8. asakusa.rb

    View Slide

  9. RailsGirls in Japan

    View Slide

  10. View Slide

  11. ΋ͬͱ
    ͓΋͠Ζ͘
    Ͱ͖Δ

    View Slide

  12. ຊࣾ
    ࢧࣾ

    View Slide

  13. "MPOHUJNFBHP

    View Slide

  14. View Slide

  15. View Slide

  16. View Slide

  17. View Slide

  18. Pepabo
    Hosting EC Media

    View Slide

  19. 0WFSQFPQMF

    View Slide

  20. organizations which design systems ... are constrained to
    produce designs which are copies of the communication
    structures of these organizations

    — M. Conway

    View Slide

  21. PHP

    MySQL5
    PHP

    MySQL4
    Ruby and PHP

    Rails

    MySQL5
    Pepabo

    View Slide

  22. ϛυϧ΢ΣΞͷΞοϓάϨʔυ
    ࣾ಺։ൃج൫ͷߏங
    ౷ܭج൫ͷߏங
    +409ͷӡ༻੔උ
    HJUIVC
    ηΩϡϦςΟ؂ࠪ
    ίʔυϨϏϡʔ
    ςετج൫ͷߏங
    ΞΫηεղੳج൫ͷߏங
    ։ൃϓϩηε
    ৽ਓڭҭ
    ݪߘࣥච
    ΧϯϑΝϨϯεൃද
    044։ൃ αʔόʔߏ੒؅ཧͷ࡮৽
    ϦʔϯελʔτΞοϓ
    +FOLJOT
    3VCZ3BJMT
    3%#.4
    ٕज़ج൫νʔϜ

    View Slide

  23. Pepabo
    ٕज़ج൫νʔϜ
    PHP

    MySQL5
    PHP

    MySQL4
    Ruby and PHP

    Rails

    MySQL5

    View Slide

  24. Ruby

    Rails

    MySQL5
    Ruby

    Rails

    MySQL5
    Ruby and PHP

    Rails

    MySQL5
    Pepabo
    ٕज़ج൫νʔϜ

    View Slide

  25. Why Ruby?

    View Slide

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

    View Slide

  27. Testing

    View Slide

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

    View Slide

  29. Capybara

    View Slide

  30. 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]

    | | #

    | 3

    String
    Power Assert

    View Slide

  31. View Slide

  32. 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]

    | | #

    | 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

    View Slide

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

    View Slide

  34. 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

    View Slide

  35. 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]

    | | #

    | 3

    String

    View Slide

  36. View Slide

  37. Development
    Environment
    2. rbenv + ruby-build
    1. osx + homebrew

    View Slide

  38. Many references

    View Slide

  39. Why Rails?

    View Slide

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

    View Slide

  41. enforce
    modern architecture

    View Slide

  42. case.1
    Ruby 1.8.6 to Ruby 2.1.2

    View Slide

  43. http://30d.jp

    View Slide

  44. from 2008/4

    View Slide

  45. 380,000 users
    230,000,000 photos

    View Slide

  46. Our Rails app
    46 models
    5000 lines in controllers
    400 lines in routes.rb
    1:1.3 code to test ratio

    View Slide

  47. storage is over
    450 TB

    View Slide

  48. system architecture

    View Slide

  49. application server

    View Slide

  50. storage server

    View Slide

  51. job server

    View Slide

  52. transaction server

    View Slide

  53. Ruby 1.8.6
    Rails 2.0.2

    View Slide

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

    View Slide

  55. 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

    View Slide

  56. Rails 2.0
    Rails 2.3

    View Slide

  57. Rails 2.0
    Rails 2.3
    hotfix A
    migration A

    View Slide

  58. Rails 2.0
    Rails 2.3
    hotfix A
    migration A

    View Slide

  59. Rails 2.0
    Rails 2.3
    hotfix A
    migration A

    View Slide

  60. View Slide

  61. View Slide

  62. KyotoTycoon
    to
    memcached
    case.2
    replace legacy middleware

    View Slide

  63. app1
    app2

    View Slide

  64. 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

    View Slide

  65. kyoto tycoon is slower
    than mysql…
    dalli is not support
    to kyoto tycoon…

    View Slide

  66. View Slide

  67. enforce oss way

    View Slide

  68. Ruby

    Rails

    MySQL5
    Ruby

    Rails

    MySQL5
    Ruby and PHP

    Rails

    MySQL5
    Pepabo
    ٕज़ج൫νʔϜ

    View Slide

  69. Use trunk everyday.

    View Slide

  70. View Slide

  71. View Slide

  72. View Slide

  73. 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

    View Slide

  74. % 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

    View Slide

  75. View Slide

  76. source 'https://rubygems.org'!
    !
    gem 'rails', '~> 2.3.18'!
    gem 'rake', '~> 0.9.2'!
    gem 'rdoc'!
    gem 'rake-confirm'!
    !
    gem 'mysql'!
    gem "mysql_retry_lost_connection"!
    gem 'acts_as_paranoid', :github => 'paperboy-30days/acts_as_paranoid'!
    gem 'passenger', '~> 3.0'!
    gem 'memcache-client', :require => 'memcache'!
    gem 'system_timer'!
    gem 'yajl-ruby', :require => 'yajl'!
    gem 'will_paginate', '~> 2.3'!
    gem 'mail'!
    !
    gem 'sass'!
    gem 'compass-rails'!
    !
    gem 'osaipo_client', :git => '[email protected]:paperboy-all/
    osaipo_client.git', :branch => 'legacy'!
    gem 'jugem_client', :git => '[email protected]:paperboy-all/
    jugem_client.git'!
    gem 'ppb_footer', :github => 'paperboy-all/ppb_footer'!

    View Slide

  77. admin integration

    View Slide

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

    View Slide

  79. organizations which design systems ... are constrained to
    produce designs which are copies of the communication
    structures of these organizations

    — M. Conway

    View Slide

  80. Developer Director
    Customer

    Support
    Our Typical Team

    View Slide

  81. VONBJOUBJOFEʜ

    View Slide

  82. 3. other app
    better admin
    2. Rails Engine
    1. app internal

    View Slide

  83. app internal
    pros
    better testing
    better deploy
    cons
    including difference application
    including effective code

    View Slide

  84. Rails Engine
    pros
    splitting application code
    better deploy
    cons
    difficulty testing
    can’t use production code directly

    View Slide

  85. Other app
    pros
    definitely splitting app
    cons
    separated develop cycle
    duplicated code

    View Slide

  86. No silver bullet

    View Slide

  87. Rails

    like a php

    MySQL5
    Rails

    like a java

    MySQL5
    Rails

    like a php

    MySQL5
    Optimize Your Company
    ٕज़ج൫νʔϜ

    View Slide

  88. Ͱ͖Δ͚ͩ௕͍ؒ ϢʔβʹՁ஋Λ
    ఏڙ͠ ར५ΛੜΈଓ͚Δ8FCαʔ
    ϏεΛӡӦ͢ΔͨΊʹ͸ ܧଓతͳ
    վળΛߦ͏͜ͱ͕ඞཁͰ͢ɻ8FCαʔ
    ϏεΛվળ͢Δʹ͸ ٕज़తͳऔΓ૊
    Έ͸΋ͪΖΜ ։ൃ౤ࢿͱͦͷϦλʔ
    ϯͱ͍͏ܦӦతͳ؍఺ νʔϜϏϧ
    σΟϯάͳͲͷ։ൃϓϩηε Ϗδω
    εϝτϦΫε΁ͷ஫ࢹͳͲ ߟྀ͢΂
    ͖͜ͱ͕ͨ͘͞Μ͋Γ·͢ɻ

    View Slide

  89. εΫϥϜ͸ɺʮෳࡶͰมԽͷܹ͍͠
    ໰୊ʯʹରԠ͢Δ͜ͱΛୈҰ໨ඪ
    ͱͨ͠ΞδϟΠϧ։ൃख๏Ͱ͢ɻ਺
    ͋ΔΞδϟΠϧ։ൃख๏ͷதͰ΋ɺ
    ͍·ѹ౗తʹ࠾༻͞Ε͍ͯ·͢ɻ
    ɹ
    ຊಛूͰ͸ɺݱࡏͷιϑτ΢ΣΞ
    ։ൃʹ͓͚ΔεΫϥϜͷҙ͔ٛΒɺ
    ࣮ࡍͷݱ৔ʹ͓͚ΔऔΓ૊Έ·
    ͰɺεΫϥϜΛపఈղઆ͠·͢ɻ

    View Slide

  90. ฏು͞ΜʹΑΔߨԋ

    View Slide

  91. ΞδϟΠϧಋೖݚम

    View Slide

  92. 10ݚम

    View Slide

  93. Lern to
    Rails
    Internal
    step
    by
    step

    View Slide

  94. Lern to
    Active
    Record
    Internal

    View Slide

  95. github workflow

    View Slide

  96. ChatOps
    github issue
    costomer’s
    contact
    nagios

    View Slide

  97. DevOps

    View Slide

  98. 4 deploy/day

    View Slide

  99. Go to the
    next
    10 years

    View Slide

  100. ΋ͬͱ
    ͓΋͠Ζ͘
    Ͱ͖Δ

    View Slide