20141210 rakuten techtalk

Post on 12-Jul-2015

2.750 Views

Category:

Technology

1 Downloads

Preview:

Click to see full reader

TRANSCRIPT

!

How to Change Organization

!

Hiroshi SHIBATA @hsbt

Rakuten TechTalk

SHIBATA !Hiroshi !@hsbt

ruby rubygems rake rdoc psych syck ruby-build

railsgirls railsgirls-jp kaminari tdiary hiki jenkins.rb fastladder

commit bit collector

Ruby Committer

文字

asakusa.rb

RailsGirls in Japan

もっと おもしろく できる

本社支社

A long time ago..

Pepabo

Hosting EC Media

Over 250 people

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

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

社内開発基盤の構築

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

github

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

アクセス解析基盤の構築

開発プロセス

新人教育原稿執筆

カンファレンス発表

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

リーンスタートアップ

Jenkins

Ruby/Rails

RDBMS

技術基盤チーム

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. environment1. testing

Testing

3. rspec

powerful testing framework

2. minitest1. 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

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

Development Environment

2. rbenv + ruby-build1. osx + homebrew

Many references

Why Rails?

3. admin integration

Why Rails?

2. oss way1. 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.6Rails 2.0.2

Ruby 2.1.3Rails 4.1.6 new!

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

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

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…

enforce oss way

Ruby Rails

MySQL5

Ruby Rails

MySQL5

Ruby and PHP Rails

MySQL5

Pepabo

技術基盤チーム

Use trunk everyday.

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

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 => 'git@github.com:paperboy-all/osaipo_client.git', :branch => 'legacy'!gem 'jugem_client', :git => 'git@github.com:paperboy-all/jugem_client.git'!gem 'ppb_footer', :github => 'paperboy-all/ppb_footer'!

admin integration

3. no console

What’s admin?

2. payment/refund1. customer support

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

— M. Conway

Developer DirectorCustomer Support

Our Typical Team

unmaintained…

3. other app

better admin

2. Rails Engine1. app internal

app internalpros better testing better deploy

cons including difference application including effective code

Rails Enginepros splitting application code better deploy

cons difficulty testing can’t use production code directly

Other apppros 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

技術基盤チーム

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

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

平鍋さんによる講演

アジャイル導入研修

PO研修

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

もっと おもしろく できる

top related