Download - 20141210 rakuten techtalk

Transcript
Page 1: 20141210 rakuten techtalk

!

How to Change Organization

!

Hiroshi SHIBATA @hsbt

Rakuten TechTalk

Page 2: 20141210 rakuten techtalk

SHIBATA !Hiroshi !@hsbt

Page 3: 20141210 rakuten techtalk
Page 4: 20141210 rakuten techtalk

ruby rubygems rake rdoc psych syck ruby-build

railsgirls railsgirls-jp kaminari tdiary hiki jenkins.rb fastladder

commit bit collector

Page 5: 20141210 rakuten techtalk

Ruby Committer

Page 6: 20141210 rakuten techtalk
Page 7: 20141210 rakuten techtalk

文字

Page 8: 20141210 rakuten techtalk

asakusa.rb

Page 9: 20141210 rakuten techtalk

RailsGirls in Japan

Page 10: 20141210 rakuten techtalk
Page 11: 20141210 rakuten techtalk

もっと おもしろく できる

Page 12: 20141210 rakuten techtalk

本社支社

Page 13: 20141210 rakuten techtalk

A long time ago..

Page 14: 20141210 rakuten techtalk
Page 15: 20141210 rakuten techtalk
Page 16: 20141210 rakuten techtalk
Page 17: 20141210 rakuten techtalk
Page 18: 20141210 rakuten techtalk

Pepabo

Hosting EC Media

Page 19: 20141210 rakuten techtalk

Over 250 people

Page 20: 20141210 rakuten techtalk

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

— M. Conway

Page 21: 20141210 rakuten techtalk

PHP MySQL5

PHP MySQL4

Ruby and PHP Rails

MySQL5

Pepabo

Page 22: 20141210 rakuten techtalk

ミドルウェアのアップグレード

社内開発基盤の構築

統計基盤の構築JSOXの運用整備

github

セキュリティ監査コードレビューテスト基盤の構築

アクセス解析基盤の構築

開発プロセス

新人教育原稿執筆

カンファレンス発表

OSS開発 サーバー構成管理の刷新

リーンスタートアップ

Jenkins

Ruby/Rails

RDBMS

技術基盤チーム

Page 23: 20141210 rakuten techtalk

Pepabo

技術基盤チーム

PHP MySQL5

PHP MySQL4

Ruby and PHP Rails

MySQL5

Page 24: 20141210 rakuten techtalk

Ruby Rails

MySQL5

Ruby Rails

MySQL5

Ruby and PHP Rails

MySQL5

Pepabo

技術基盤チーム

Page 25: 20141210 rakuten techtalk

Why Ruby?

Page 26: 20141210 rakuten techtalk

3. references

Why Ruby?

2. environment1. testing

Page 27: 20141210 rakuten techtalk

Testing

Page 28: 20141210 rakuten techtalk

3. rspec

powerful testing framework

2. minitest1. test-unit

Page 29: 20141210 rakuten techtalk

Capybara

Page 30: 20141210 rakuten techtalk

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

Page 31: 20141210 rakuten techtalk
Page 32: 20141210 rakuten techtalk

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

Page 33: 20141210 rakuten techtalk

3. run test -> fail -> detect fail reason

Typical usecase

2. add inspection code

1. run test -> fail

5. run test -> success

4. fix code

Page 34: 20141210 rakuten techtalk

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

Page 35: 20141210 rakuten techtalk

Typical usecase1. 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

Page 36: 20141210 rakuten techtalk
Page 37: 20141210 rakuten techtalk

Development Environment

2. rbenv + ruby-build1. osx + homebrew

Page 38: 20141210 rakuten techtalk

Many references

Page 39: 20141210 rakuten techtalk

Why Rails?

Page 40: 20141210 rakuten techtalk

3. admin integration

Why Rails?

2. oss way1. modern architecture

Page 41: 20141210 rakuten techtalk

enforce modern architecture

Page 42: 20141210 rakuten techtalk

case.1 Ruby 1.8.6 to Ruby 2.1.2

Page 43: 20141210 rakuten techtalk

http://30d.jp

Page 44: 20141210 rakuten techtalk

from 2008/4

Page 45: 20141210 rakuten techtalk

380,000 users

230,000,000 photos

Page 46: 20141210 rakuten techtalk

Our Rails app

46 models

5000 lines in controllers

400 lines in routes.rb

1:1.3 code to test ratio

Page 47: 20141210 rakuten techtalk

storage is over 450 TB

Page 48: 20141210 rakuten techtalk

system architecture

Page 49: 20141210 rakuten techtalk

application server

Page 50: 20141210 rakuten techtalk

storage server

Page 51: 20141210 rakuten techtalk

job server

Page 52: 20141210 rakuten techtalk

transaction server

Page 53: 20141210 rakuten techtalk

Ruby 1.8.6

Rails 2.0.2

Page 54: 20141210 rakuten techtalk

Ruby 1.8.6Rails 2.0.2

Ruby 2.1.3Rails 4.1.6 new!

Page 55: 20141210 rakuten techtalk

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

Page 56: 20141210 rakuten techtalk

Rails 2.0

Rails 2.3

Page 57: 20141210 rakuten techtalk

Rails 2.0

Rails 2.3

hotfix A

migration A

Page 58: 20141210 rakuten techtalk

Rails 2.0

Rails 2.3

hotfix A

migration A

Page 59: 20141210 rakuten techtalk

Rails 2.0

Rails 2.3

hotfix A

migration A

Page 60: 20141210 rakuten techtalk
Page 61: 20141210 rakuten techtalk
Page 62: 20141210 rakuten techtalk

KyotoTycoon to

memcached

case.2 replace legacy middleware

Page 63: 20141210 rakuten techtalk

app1

app2

Page 64: 20141210 rakuten techtalk

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

Page 65: 20141210 rakuten techtalk

kyoto tycoon is slower than mysql…

dalli is not support to kyoto tycoon…

Page 66: 20141210 rakuten techtalk
Page 67: 20141210 rakuten techtalk

enforce oss way

Page 68: 20141210 rakuten techtalk

Ruby Rails

MySQL5

Ruby Rails

MySQL5

Ruby and PHP Rails

MySQL5

Pepabo

技術基盤チーム

Page 69: 20141210 rakuten techtalk

Use trunk everyday.

Page 70: 20141210 rakuten techtalk
Page 71: 20141210 rakuten techtalk
Page 72: 20141210 rakuten techtalk
Page 73: 20141210 rakuten techtalk

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

Page 74: 20141210 rakuten techtalk

% 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

Page 75: 20141210 rakuten techtalk
Page 76: 20141210 rakuten techtalk

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'!

Page 77: 20141210 rakuten techtalk

admin integration

Page 78: 20141210 rakuten techtalk

3. no console

What’s admin?

2. payment/refund1. customer support

Page 79: 20141210 rakuten techtalk

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

— M. Conway

Page 80: 20141210 rakuten techtalk

Developer DirectorCustomer Support

Our Typical Team

Page 81: 20141210 rakuten techtalk

unmaintained…

Page 82: 20141210 rakuten techtalk

3. other app

better admin

2. Rails Engine1. app internal

Page 83: 20141210 rakuten techtalk

app internalpros better testing better deploy

cons including difference application including effective code

Page 84: 20141210 rakuten techtalk

Rails Enginepros splitting application code better deploy

cons difficulty testing can’t use production code directly

Page 85: 20141210 rakuten techtalk

Other apppros definitely splitting app

cons separated develop cycle duplicated code

Page 86: 20141210 rakuten techtalk

No silver bullet

Page 87: 20141210 rakuten techtalk

Rails like a php MySQL5

Rails like a java MySQL5

Rails like a php MySQL5

Optimize Your Company

技術基盤チーム

Page 88: 20141210 rakuten techtalk

できるだけ長い間,ユーザに価値を提供し,利潤を生み続けるWebサービスを運営するためには,継続的な改善を行うことが必要です。Webサービスを改善するには,技術的な取り組みはもちろん,開発投資とそのリターンという経営的な観点,チームビルディングなどの開発プロセス,ビジネスメトリクスへの注視など,考慮すべきことがたくさんあります。

Page 89: 20141210 rakuten techtalk

スクラムは、「複雑で変化の激しい問題」に対応することを第一目標としたアジャイル開発手法です。数あるアジャイル開発手法の中でも、いま圧倒的に採用されています。  本特集では、現在のソフトウェア開発におけるスクラムの意義から、実際の現場における取り組みまで、スクラムを徹底解説します。

Page 90: 20141210 rakuten techtalk

平鍋さんによる講演

Page 91: 20141210 rakuten techtalk

アジャイル導入研修

Page 92: 20141210 rakuten techtalk

PO研修

Page 93: 20141210 rakuten techtalk

Lern to Rails

Internal step by

step

Page 94: 20141210 rakuten techtalk

Lern to Active Record Internal

Page 95: 20141210 rakuten techtalk

github workflow

Page 96: 20141210 rakuten techtalk

ChatOps

github issue

costomer’s contact

nagios

Page 97: 20141210 rakuten techtalk

DevOps

Page 98: 20141210 rakuten techtalk

4 deploy/day

Page 99: 20141210 rakuten techtalk

Go to the next

10 years

Page 100: 20141210 rakuten techtalk

もっと おもしろく できる