Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
How to Change Organization
Search
SHIBATA Hiroshi
December 12, 2014
440
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
How to Change Organization
SHIBATA Hiroshi
December 12, 2014
More Decks by SHIBATA Hiroshi
See All by SHIBATA Hiroshi
How to make faster release cycle of Ruby?
hsbt
2
6.3k
Ruby の開発を支えるエコシステム
hsbt
4
2.4k
Why is building the Ruby environment hard?
hsbt
6
8.5k
開発環境へのこだわり
hsbt
16
12k
OSS ことはじめ
hsbt
5
1.5k
GMO DevNight 05 在宅勤務開始から2ヶ月でやったこと
hsbt
2
600
Development Environment 2019
hsbt
1
390
How to become the Psychic
hsbt
0
2.1k
Software Development
hsbt
1
6.7k
Featured
See All Featured
A Guide to Academic Writing Using Generative AI - A Workshop
ks91
PRO
1
360
How to Build an AI Search Optimization Roadmap - Criteria and Steps to Take #SEOIRL
aleyda
1
2.1k
Java REST API Framework Comparison - PWX 2021
mraible
34
9.6k
Fashionably flexible responsive web design (full day workshop)
malarkey
408
67k
Code Review Best Practice
trishagee
74
20k
エンジニアに許された特別な時間の終わり
watany
108
250k
VelocityConf: Rendering Performance Case Studies
addyosmani
333
25k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
333
23k
Building AI with AI
inesmontani
PRO
1
1.1k
The Curious Case for Waylosing
cassininazir
1
440
It's Worth the Effort
3n
188
29k
The AI Revolution Will Not Be Monopolized: How open-source beats economies of scale, even for LLMs
inesmontani
PRO
3
3.7k
Transcript
! How to Change Organization ! Hiroshi SHIBATA @hsbt Rakuten
TechTalk
SHIBATA ! Hiroshi ! @hsbt
None
ruby rubygems rake rdoc psych syck ruby-build railsgirls railsgirls-jp kaminari
tdiary hiki jenkins.rb fastladder commit bit collector
Ruby Committer
None
จࣈ
asakusa.rb
RailsGirls in Japan
None
ͬͱ ͓͠Ζ͘ Ͱ͖Δ
ຊࣾ ࢧࣾ
"MPOHUJNFBHP
None
None
None
None
Pepabo Hosting EC Media
0WFSQFPQMF
organizations which design systems ... are constrained to produce designs
which are copies of the communication structures of these organizations — M. Conway
PHP MySQL5 PHP MySQL4 Ruby and PHP Rails MySQL5 Pepabo
ϛυϧΣΞͷΞοϓάϨʔυ ࣾ։ൃج൫ͷߏங ౷ܭج൫ͷߏங +409ͷӡ༻උ HJUIVC ηΩϡϦςΟࠪ ίʔυϨϏϡʔ ςετج൫ͷߏங ΞΫηεղੳج൫ͷߏங ։ൃϓϩηε
৽ਓڭҭ ݪߘࣥච ΧϯϑΝϨϯεൃද 044։ൃ αʔόʔߏཧͷ৽ ϦʔϯελʔτΞοϓ +FOLJOT 3VCZ3BJMT 3%#.4 ٕज़ج൫νʔϜ
Pepabo ٕज़ج൫νʔϜ PHP MySQL5 PHP MySQL4 Ruby and PHP Rails
MySQL5
Ruby Rails MySQL5 Ruby Rails MySQL5 Ruby and PHP Rails
MySQL5 Pepabo ٕज़ج൫νʔϜ
Why Ruby?
3. references Why Ruby? 2. environment 1. testing
Testing
3. rspec powerful testing framework 2. minitest 1. test-unit
Capybara
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
None
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
3. run test -> fail -> detect fail reason Typical
usecase 2. add inspection code 1. run test -> fail 5. run test -> success 4. fix code
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
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
None
Development Environment 2. rbenv + ruby-build 1. osx + homebrew
Many references
Why Rails?
3. admin integration Why Rails? 2. oss way 1. modern
architecture
enforce modern architecture
case.1 Ruby 1.8.6 to Ruby 2.1.2
http://30d.jp
from 2008/4
380,000 users 230,000,000 photos
Our Rails app 46 models 5000 lines in controllers 400
lines in routes.rb 1:1.3 code to test ratio
storage is over 450 TB
system architecture
application server
storage server
job server
transaction server
Ruby 1.8.6 Rails 2.0.2
Ruby 1.8.6 Rails 2.0.2 Ruby 2.1.3 Rails 4.1.6 new!
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
Rails 2.0 Rails 2.3
Rails 2.0 Rails 2.3 hotfix A migration A
Rails 2.0 Rails 2.3 hotfix A migration A
Rails 2.0 Rails 2.3 hotfix A migration A
None
None
KyotoTycoon to memcached case.2 replace legacy middleware
app1 app2
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
kyoto tycoon is slower than mysql… dalli is not support
to kyoto tycoon…
None
enforce oss way
Ruby Rails MySQL5 Ruby Rails MySQL5 Ruby and PHP Rails
MySQL5 Pepabo ٕज़ج൫νʔϜ
Use trunk everyday.
None
None
None
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
% 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
None
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'!
admin integration
3. no console What’s admin? 2. payment/refund 1. customer support
organizations which design systems ... are constrained to produce designs
which are copies of the communication structures of these organizations — M. Conway
Developer Director Customer Support Our Typical Team
VONBJOUBJOFEʜ
3. other app better admin 2. Rails Engine 1. app
internal
app internal pros better testing better deploy cons including difference
application including effective code
Rails Engine pros splitting application code better deploy cons difficulty
testing can’t use production code directly
Other app pros definitely splitting app cons separated develop cycle
duplicated code
No silver bullet
Rails like a php MySQL5 Rails like a java MySQL5
Rails like a php MySQL5 Optimize Your Company ٕज़ج൫νʔϜ
Ͱ͖Δ͚͍ͩؒ ϢʔβʹՁΛ ఏڙ͠ ར५ΛੜΈଓ͚Δ8FCαʔ ϏεΛӡӦ͢ΔͨΊʹ ܧଓతͳ վળΛߦ͏͜ͱ͕ඞཁͰ͢ɻ8FCαʔ ϏεΛվળ͢Δʹ ٕज़తͳऔΓ ΈͪΖΜ
։ൃࢿͱͦͷϦλʔ ϯͱ͍͏ܦӦతͳ؍ νʔϜϏϧ σΟϯάͳͲͷ։ൃϓϩηε Ϗδω εϝτϦΫεͷࢹͳͲ ߟྀ͢ ͖͜ͱ͕ͨ͘͞Μ͋Γ·͢ɻ
εΫϥϜɺʮෳࡶͰมԽͷܹ͍͠ ʯʹରԠ͢Δ͜ͱΛୈҰඪ ͱͨ͠ΞδϟΠϧ։ൃख๏Ͱ͢ɻ ͋ΔΞδϟΠϧ։ൃख๏ͷதͰɺ ͍·ѹతʹ࠾༻͞Ε͍ͯ·͢ɻ ɹ ຊಛूͰɺݱࡏͷιϑτΣΞ ։ൃʹ͓͚ΔεΫϥϜͷҙ͔ٛΒɺ ࣮ࡍͷݱʹ͓͚ΔऔΓΈ· ͰɺεΫϥϜΛపఈղઆ͠·͢ɻ
ฏು͞ΜʹΑΔߨԋ
ΞδϟΠϧಋೖݚम
10ݚम
Lern to Rails Internal step by step
Lern to Active Record Internal
github workflow
ChatOps github issue costomer’s contact nagios
DevOps
4 deploy/day
Go to the next 10 years
ͬͱ ͓͠Ζ͘ Ͱ͖Δ