最適化計算エンジンを備えた ruby on rails アプリケーション …rails winworks one...

107
最適化計算エンジンを備えた Ruby on Rails アプリケーションの アーキテクチャーと進化 Masaki Takeuchi 2013-12-17 Rubyアソシエーションセミナー Rubyの技術を語る1日 in 品川

Upload: others

Post on 24-Jul-2020

1 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: 最適化計算エンジンを備えた Ruby on Rails アプリケーション …Rails WINWORKS One のソースコード 3.1.0 3.2 3.1.1 3.2 3.1.x 4.0 4.0非互換のコード 4.0互換のコード

最適化計算エンジンを備えた Ruby on Rails アプリケーションの

アーキテクチャーと進化

Masaki Takeuchi !

2013-12-17 Rubyアソシエーションセミナー Rubyの技術を語る1日 in 品川

Page 2: 最適化計算エンジンを備えた Ruby on Rails アプリケーション …Rails WINWORKS One のソースコード 3.1.0 3.2 3.1.1 3.2 3.1.x 4.0 4.0非互換のコード 4.0互換のコード

竹内 真樹 @m4i

ウィンワークス株式会社 Chief Scientist

Page 3: 最適化計算エンジンを備えた Ruby on Rails アプリケーション …Rails WINWORKS One のソースコード 3.1.0 3.2 3.1.1 3.2 3.1.x 4.0 4.0非互換のコード 4.0互換のコード
Page 4: 最適化計算エンジンを備えた Ruby on Rails アプリケーション …Rails WINWORKS One のソースコード 3.1.0 3.2 3.1.1 3.2 3.1.x 4.0 4.0非互換のコード 4.0互換のコード

• WINWORKS One の紹介

• Ruby on Rails 4.0 へのアップグレード

• ウィンワークスにとっての Ruby on Rails

Page 5: 最適化計算エンジンを備えた Ruby on Rails アプリケーション …Rails WINWORKS One のソースコード 3.1.0 3.2 3.1.1 3.2 3.1.x 4.0 4.0非互換のコード 4.0互換のコード

オークラフロンティアホテルつくば様

ローラアシュレイジャパン様

総就業時間13.3%削減

接客効率10%向上

WINWORKS Oneは、サービス業の現場で 勤務効率を上げるために利用されている

Page 6: 最適化計算エンジンを備えた Ruby on Rails アプリケーション …Rails WINWORKS One のソースコード 3.1.0 3.2 3.1.1 3.2 3.1.x 4.0 4.0非互換のコード 4.0互換のコード

業務量とリソース

モチベーション

コンプライアンス

売上向上コスト削減

業務量変動勤務人員

接客時間の増加 x 適正な!スキルの配置

業務量

スタッフ

変動する業務量

業務量の変動に合わせてスタッフの勤務を最適化することで、オペレーション上の様々な制約を満たしつつ、パフォーマンスの最大化を図る

Page 7: 最適化計算エンジンを備えた Ruby on Rails アプリケーション …Rails WINWORKS One のソースコード 3.1.0 3.2 3.1.1 3.2 3.1.x 4.0 4.0非互換のコード 4.0互換のコード

Webアプリケーションと、整数計画法を適用した!シフト編成計算エンジンの組み合わせにより稼働

WINWORKS One Mrs.RIC

携帯から希望 勤務を申請

携帯へ シフト表 を配信

• スタッフの勤務可能時間の範囲で勤務を割当て • 余剰の時間帯と不足時間帯を同時に削減整数計画法の適用

最適シフト 編成計算

条件を満たしつつ繁閑に合致した最適なシフト表

シフト表を Excel出力

Page 8: 最適化計算エンジンを備えた Ruby on Rails アプリケーション …Rails WINWORKS One のソースコード 3.1.0 3.2 3.1.1 3.2 3.1.x 4.0 4.0非互換のコード 4.0互換のコード

Webアプリケーションと、整数計画法を適用した!シフト編成計算エンジンの組み合わせにより稼働

WINWORKS One Mrs.RIC

携帯から希望 勤務を申請

携帯へ シフト表 を配信

• スタッフの勤務可能時間の範囲で勤務を割当て • 余剰の時間帯と不足時間帯を同時に削減整数計画法の適用

最適シフト 編成計算

条件を満たしつつ繁閑に合致した最適なシフト表

シフト表を Excel出力

日毎・時間帯の作業負荷 および必要人員数を予測

Page 9: 最適化計算エンジンを備えた Ruby on Rails アプリケーション …Rails WINWORKS One のソースコード 3.1.0 3.2 3.1.1 3.2 3.1.x 4.0 4.0非互換のコード 4.0互換のコード

Webアプリケーションと、整数計画法を適用した!シフト編成計算エンジンの組み合わせにより稼働

WINWORKS One Mrs.RIC

携帯から希望 勤務を申請

携帯へ シフト表 を配信

• スタッフの勤務可能時間の範囲で勤務を割当て • 余剰の時間帯と不足時間帯を同時に削減整数計画法の適用

最適シフト 編成計算

条件を満たしつつ繁閑に合致した最適なシフト表

シフト表を Excel出力

スタッフ属性を設定 • 総勤務日数・時間数 • 所有スキル • 就業可能なシフト枠

Page 10: 最適化計算エンジンを備えた Ruby on Rails アプリケーション …Rails WINWORKS One のソースコード 3.1.0 3.2 3.1.1 3.2 3.1.x 4.0 4.0非互換のコード 4.0互換のコード

Webアプリケーションと、整数計画法を適用した!シフト編成計算エンジンの組み合わせにより稼働

WINWORKS One Mrs.RIC

携帯から希望 勤務を申請

携帯へ シフト表 を配信

• スタッフの勤務可能時間の範囲で勤務を割当て • 余剰の時間帯と不足時間帯を同時に削減整数計画法の適用

最適シフト 編成計算

条件を満たしつつ繁閑に合致した最適なシフト表

シフト表を Excel出力

カレンダー画面設定 • 日ごとの「業務」 • メモの記述

Page 11: 最適化計算エンジンを備えた Ruby on Rails アプリケーション …Rails WINWORKS One のソースコード 3.1.0 3.2 3.1.1 3.2 3.1.x 4.0 4.0非互換のコード 4.0互換のコード

Webアプリケーションと、整数計画法を適用した!シフト編成計算エンジンの組み合わせにより稼働

WINWORKS One Mrs.RIC

携帯から希望 勤務を申請

携帯へ シフト表 を配信

• スタッフの勤務可能時間の範囲で勤務を割当て • 余剰の時間帯と不足時間帯を同時に削減整数計画法の適用

最適シフト 編成計算

条件を満たしつつ繁閑に合致した最適なシフト表

シフト表を Excel出力

勤務ルールを設定 • 就業規則 • 勤務、公休取得の公平性 • 働きやすさ

Page 12: 最適化計算エンジンを備えた Ruby on Rails アプリケーション …Rails WINWORKS One のソースコード 3.1.0 3.2 3.1.1 3.2 3.1.x 4.0 4.0非互換のコード 4.0互換のコード

Webアプリケーションと、整数計画法を適用した!シフト編成計算エンジンの組み合わせにより稼働

WINWORKS One Mrs.RIC

携帯から希望 勤務を申請

携帯へ シフト表 を配信

• スタッフの勤務可能時間の範囲で勤務を割当て • 余剰の時間帯と不足時間帯を同時に削減整数計画法の適用

最適シフト 編成計算

条件を満たしつつ繁閑に合致した最適なシフト表

シフト表を Excel出力

Page 13: 最適化計算エンジンを備えた Ruby on Rails アプリケーション …Rails WINWORKS One のソースコード 3.1.0 3.2 3.1.1 3.2 3.1.x 4.0 4.0非互換のコード 4.0互換のコード

Webアプリケーションと、整数計画法を適用した!シフト編成計算エンジンの組み合わせにより稼働

WINWORKS One Mrs.RIC

携帯から希望 勤務を申請

携帯へ シフト表 を配信

• スタッフの勤務可能時間の範囲で勤務を割当て • 余剰の時間帯と不足時間帯を同時に削減整数計画法の適用

最適シフト 編成計算

条件を満たしつつ繁閑に合致した最適なシフト表

シフト表を Excel出力

月別のシフト表

Page 14: 最適化計算エンジンを備えた Ruby on Rails アプリケーション …Rails WINWORKS One のソースコード 3.1.0 3.2 3.1.1 3.2 3.1.x 4.0 4.0非互換のコード 4.0互換のコード

Webアプリケーションと、整数計画法を適用した!シフト編成計算エンジンの組み合わせにより稼働

WINWORKS One Mrs.RIC

携帯から希望 勤務を申請

携帯へ シフト表 を配信

• スタッフの勤務可能時間の範囲で勤務を割当て • 余剰の時間帯と不足時間帯を同時に削減整数計画法の適用

最適シフト 編成計算

条件を満たしつつ繁閑に合致した最適なシフト表

シフト表を Excel出力

日別のシフト表

Page 15: 最適化計算エンジンを備えた Ruby on Rails アプリケーション …Rails WINWORKS One のソースコード 3.1.0 3.2 3.1.1 3.2 3.1.x 4.0 4.0非互換のコード 4.0互換のコード

Webアプリケーションと、整数計画法を適用した!シフト編成計算エンジンの組み合わせにより稼働

WINWORKS One Mrs.RIC

携帯から希望 勤務を申請

携帯へ シフト表 を配信

• スタッフの勤務可能時間の範囲で勤務を割当て • 余剰の時間帯と不足時間帯を同時に削減整数計画法の適用

最適シフト 編成計算

条件を満たしつつ繁閑に合致した最適なシフト表

シフト表を Excel出力

Page 16: 最適化計算エンジンを備えた Ruby on Rails アプリケーション …Rails WINWORKS One のソースコード 3.1.0 3.2 3.1.1 3.2 3.1.x 4.0 4.0非互換のコード 4.0互換のコード

WEB サーバ 最適化サーバ

ブラウザでWebに アクセス

計算キューを順次処理

WebサービスとしてのWINWORKS Oneは機能分散構成により計算能力のスケーラビリティを実現

Page 17: 最適化計算エンジンを備えた Ruby on Rails アプリケーション …Rails WINWORKS One のソースコード 3.1.0 3.2 3.1.1 3.2 3.1.x 4.0 4.0非互換のコード 4.0互換のコード

WINWORKS One の歴史

機能拡充マーケットニーズ

2.x

3.x

1.x

開発

開発

オンプレミス SaaS

機能高度化・対象範囲拡大案件大型化対応

2007年 2008年 2009年 2010年 2011年 2012年 2013年 2014年

Page 18: 最適化計算エンジンを備えた Ruby on Rails アプリケーション …Rails WINWORKS One のソースコード 3.1.0 3.2 3.1.1 3.2 3.1.x 4.0 4.0非互換のコード 4.0互換のコード

WINWORKS One の歴史

機能拡充マーケットニーズ

2.x

3.x

1.x

開発

開発

オンプレミス SaaS

機能高度化・対象範囲拡大案件大型化対応

2007年 2008年 2009年 2010年 2011年 2012年 2013年 2014年

ビジネス オンプレミス => SaaS

プラット フォーム

Windows => Linux Ruby on Rails 採用

Page 19: 最適化計算エンジンを備えた Ruby on Rails アプリケーション …Rails WINWORKS One のソースコード 3.1.0 3.2 3.1.1 3.2 3.1.x 4.0 4.0非互換のコード 4.0互換のコード

WINWORKS One の歴史

機能拡充マーケットニーズ

2.x

3.x

1.x

開発

開発

オンプレミス SaaS

機能高度化・対象範囲拡大案件大型化対応

2007年 2008年 2009年 2010年 2011年 2012年 2013年 2014年

ビジネス オンプレミス => SaaS

プラット フォーム

Windows => Linux Ruby on Rails 採用

ビジネス システム規模拡大

プラット フォーム

Windows 廃止 ILOG => Gurobi(性能向上)

Page 20: 最適化計算エンジンを備えた Ruby on Rails アプリケーション …Rails WINWORKS One のソースコード 3.1.0 3.2 3.1.1 3.2 3.1.x 4.0 4.0非互換のコード 4.0互換のコード

WINWORKS One を支える技術

Web 最適化

• Ruby on Rails • Ruby • MySQL • nginx + Passenger

• JRuby • Redis • Gurobi Optimizer

Page 21: 最適化計算エンジンを備えた Ruby on Rails アプリケーション …Rails WINWORKS One のソースコード 3.1.0 3.2 3.1.1 3.2 3.1.x 4.0 4.0非互換のコード 4.0互換のコード

WINWORKS One の規模

Model 281 クラス

Controller 95 クラス

JavaScript 23,000 行

テスト 3,000 examples (Coverage 90%)

最適化(JRuby) 7,000 行

Page 22: 最適化計算エンジンを備えた Ruby on Rails アプリケーション …Rails WINWORKS One のソースコード 3.1.0 3.2 3.1.1 3.2 3.1.x 4.0 4.0非互換のコード 4.0互換のコード

Rails を利用している方?

Page 23: 最適化計算エンジンを備えた Ruby on Rails アプリケーション …Rails WINWORKS One のソースコード 3.1.0 3.2 3.1.1 3.2 3.1.x 4.0 4.0非互換のコード 4.0互換のコード

Rails 4 未満のバージョンを利用中の方?

Page 24: 最適化計算エンジンを備えた Ruby on Rails アプリケーション …Rails WINWORKS One のソースコード 3.1.0 3.2 3.1.1 3.2 3.1.x 4.0 4.0非互換のコード 4.0互換のコード

Rails 4.0

Page 25: 最適化計算エンジンを備えた Ruby on Rails アプリケーション …Rails WINWORKS One のソースコード 3.1.0 3.2 3.1.1 3.2 3.1.x 4.0 4.0非互換のコード 4.0互換のコード

アップグレード手順

Page 26: 最適化計算エンジンを備えた Ruby on Rails アプリケーション …Rails WINWORKS One のソースコード 3.1.0 3.2 3.1.1 3.2 3.1.x 4.0 4.0非互換のコード 4.0互換のコード

アップグレード手順1. rails4 branch を作成

Page 27: 最適化計算エンジンを備えた Ruby on Rails アプリケーション …Rails WINWORKS One のソースコード 3.1.0 3.2 3.1.1 3.2 3.1.x 4.0 4.0非互換のコード 4.0互換のコード

アップグレード手順1. rails4 branch を作成

2. Gemfile を Rails 4.0 のものに更新

Page 28: 最適化計算エンジンを備えた Ruby on Rails アプリケーション …Rails WINWORKS One のソースコード 3.1.0 3.2 3.1.1 3.2 3.1.x 4.0 4.0非互換のコード 4.0互換のコード

アップグレード手順1. rails4 branch を作成

2. Gemfile を Rails 4.0 のものに更新

3. rake rails:update して設定ファイルも更新

Page 29: 最適化計算エンジンを備えた Ruby on Rails アプリケーション …Rails WINWORKS One のソースコード 3.1.0 3.2 3.1.1 3.2 3.1.x 4.0 4.0非互換のコード 4.0互換のコード

アップグレード手順1. rails4 branch を作成

2. Gemfile を Rails 4.0 のものに更新

3. rake rails:update して設定ファイルも更新

4. とりあえず rspec => すぐにエラーで停止する

Page 30: 最適化計算エンジンを備えた Ruby on Rails アプリケーション …Rails WINWORKS One のソースコード 3.1.0 3.2 3.1.1 3.2 3.1.x 4.0 4.0非互換のコード 4.0互換のコード

アップグレード手順1. rails4 branch を作成

2. Gemfile を Rails 4.0 のものに更新

3. rake rails:update して設定ファイルも更新

4. とりあえず rspec => すぐにエラーで停止する

5. 停止する原因をすべて取り除く

Page 31: 最適化計算エンジンを備えた Ruby on Rails アプリケーション …Rails WINWORKS One のソースコード 3.1.0 3.2 3.1.1 3.2 3.1.x 4.0 4.0非互換のコード 4.0互換のコード

アップグレード手順1. rails4 branch を作成

2. Gemfile を Rails 4.0 のものに更新

3. rake rails:update して設定ファイルも更新

4. とりあえず rspec => すぐにエラーで停止する

5. 停止する原因をすべて取り除く

6. もう一度 rspec を走らせる

Page 32: 最適化計算エンジンを備えた Ruby on Rails アプリケーション …Rails WINWORKS One のソースコード 3.1.0 3.2 3.1.1 3.2 3.1.x 4.0 4.0非互換のコード 4.0互換のコード
Page 33: 最適化計算エンジンを備えた Ruby on Rails アプリケーション …Rails WINWORKS One のソースコード 3.1.0 3.2 3.1.1 3.2 3.1.x 4.0 4.0非互換のコード 4.0互換のコード

DEPRECATION WARNING を出力しない

require 'active_support/deprecation'!ActiveSupport::Deprecation.silenced = true

spec/spec_helper.rb

Page 34: 最適化計算エンジンを備えた Ruby on Rails アプリケーション …Rails WINWORKS One のソースコード 3.1.0 3.2 3.1.1 3.2 3.1.x 4.0 4.0非互換のコード 4.0互換のコード
Page 35: 最適化計算エンジンを備えた Ruby on Rails アプリケーション …Rails WINWORKS One のソースコード 3.1.0 3.2 3.1.1 3.2 3.1.x 4.0 4.0非互換のコード 4.0互換のコード

アップグレード手順

Page 36: 最適化計算エンジンを備えた Ruby on Rails アプリケーション …Rails WINWORKS One のソースコード 3.1.0 3.2 3.1.1 3.2 3.1.x 4.0 4.0非互換のコード 4.0互換のコード

アップグレード手順7. DEPRECATION WARNING の出力を止める

Page 37: 最適化計算エンジンを備えた Ruby on Rails アプリケーション …Rails WINWORKS One のソースコード 3.1.0 3.2 3.1.1 3.2 3.1.x 4.0 4.0非互換のコード 4.0互換のコード

アップグレード手順7. DEPRECATION WARNING の出力を止める

8. 潰すエラーの狙いを定める

Page 38: 最適化計算エンジンを備えた Ruby on Rails アプリケーション …Rails WINWORKS One のソースコード 3.1.0 3.2 3.1.1 3.2 3.1.x 4.0 4.0非互換のコード 4.0互換のコード

アップグレード手順7. DEPRECATION WARNING の出力を止める

8. 潰すエラーの狙いを定める

9. 修正して確認する

Page 39: 最適化計算エンジンを備えた Ruby on Rails アプリケーション …Rails WINWORKS One のソースコード 3.1.0 3.2 3.1.1 3.2 3.1.x 4.0 4.0非互換のコード 4.0互換のコード

アップグレード手順7. DEPRECATION WARNING の出力を止める

8. 潰すエラーの狙いを定める

9. 修正して確認する

• rspec spec/controller/users_spec.rb -l 624

Page 40: 最適化計算エンジンを備えた Ruby on Rails アプリケーション …Rails WINWORKS One のソースコード 3.1.0 3.2 3.1.1 3.2 3.1.x 4.0 4.0非互換のコード 4.0互換のコード

アップグレード手順7. DEPRECATION WARNING の出力を止める

8. 潰すエラーの狙いを定める

9. 修正して確認する

• rspec spec/controller/users_spec.rb -l 624

10.すべての test 通るまで繰り返す

Page 41: 最適化計算エンジンを備えた Ruby on Rails アプリケーション …Rails WINWORKS One のソースコード 3.1.0 3.2 3.1.1 3.2 3.1.x 4.0 4.0非互換のコード 4.0互換のコード

アップグレード手順7. DEPRECATION WARNING の出力を止める

8. 潰すエラーの狙いを定める

9. 修正して確認する

• rspec spec/controller/users_spec.rb -l 624

10.すべての test 通るまで繰り返す

11.DEPRECATION WARNING の出力を再開する

Page 42: 最適化計算エンジンを備えた Ruby on Rails アプリケーション …Rails WINWORKS One のソースコード 3.1.0 3.2 3.1.1 3.2 3.1.x 4.0 4.0非互換のコード 4.0互換のコード
Page 43: 最適化計算エンジンを備えた Ruby on Rails アプリケーション …Rails WINWORKS One のソースコード 3.1.0 3.2 3.1.1 3.2 3.1.x 4.0 4.0非互換のコード 4.0互換のコード

アップグレード手順

Page 44: 最適化計算エンジンを備えた Ruby on Rails アプリケーション …Rails WINWORKS One のソースコード 3.1.0 3.2 3.1.1 3.2 3.1.x 4.0 4.0非互換のコード 4.0互換のコード

アップグレード手順

12.すべての DEPRECATION WARNING を潰す

Page 45: 最適化計算エンジンを備えた Ruby on Rails アプリケーション …Rails WINWORKS One のソースコード 3.1.0 3.2 3.1.1 3.2 3.1.x 4.0 4.0非互換のコード 4.0互換のコード

アップグレード手順

12.すべての DEPRECATION WARNING を潰す

13.実際に画面を操作してテストする

Page 46: 最適化計算エンジンを備えた Ruby on Rails アプリケーション …Rails WINWORKS One のソースコード 3.1.0 3.2 3.1.1 3.2 3.1.x 4.0 4.0非互換のコード 4.0互換のコード

アップグレード手順

12.すべての DEPRECATION WARNING を潰す

13.実際に画面を操作してテストする

14.RAILS_ENV=production で動かしてみる

Page 47: 最適化計算エンジンを備えた Ruby on Rails アプリケーション …Rails WINWORKS One のソースコード 3.1.0 3.2 3.1.1 3.2 3.1.x 4.0 4.0非互換のコード 4.0互換のコード

アップグレード手順

12.すべての DEPRECATION WARNING を潰す

13.実際に画面を操作してテストする

14.RAILS_ENV=production で動かしてみる

15.テスト/ステージング環境にデプロイしてみる

Page 48: 最適化計算エンジンを備えた Ruby on Rails アプリケーション …Rails WINWORKS One のソースコード 3.1.0 3.2 3.1.1 3.2 3.1.x 4.0 4.0非互換のコード 4.0互換のコード

アップグレード手順

12.すべての DEPRECATION WARNING を潰す

13.実際に画面を操作してテストする

14.RAILS_ENV=production で動かしてみる

15.テスト/ステージング環境にデプロイしてみる

16.リリース!

Page 49: 最適化計算エンジンを備えた Ruby on Rails アプリケーション …Rails WINWORKS One のソースコード 3.1.0 3.2 3.1.1 3.2 3.1.x 4.0 4.0非互換のコード 4.0互換のコード

アップグレード作業の方針

WINWORKS One Rails WINWORKS One のソースコード

3.1.0 3.2

3.1.1 3.2

3.1.x 4.0

4.0互換のコード4.0非互換のコード

3.2/4.0 両方で動作する修正

3.2 で 動作しない修正

Rails 4.0 対応開始

Page 50: 最適化計算エンジンを備えた Ruby on Rails アプリケーション …Rails WINWORKS One のソースコード 3.1.0 3.2 3.1.1 3.2 3.1.x 4.0 4.0非互換のコード 4.0互換のコード

通常の branch 構成

master branch

Page 51: 最適化計算エンジンを備えた Ruby on Rails アプリケーション …Rails WINWORKS One のソースコード 3.1.0 3.2 3.1.1 3.2 3.1.x 4.0 4.0非互換のコード 4.0互換のコード

通常の branch 構成

master branch

rails4 branch

Rails4.0化

Page 52: 最適化計算エンジンを備えた Ruby on Rails アプリケーション …Rails WINWORKS One のソースコード 3.1.0 3.2 3.1.1 3.2 3.1.x 4.0 4.0非互換のコード 4.0互換のコード

通常の branch 構成

master branch

rails4 branch

Rails4.0化

修正A 修正B

Page 53: 最適化計算エンジンを備えた Ruby on Rails アプリケーション …Rails WINWORKS One のソースコード 3.1.0 3.2 3.1.1 3.2 3.1.x 4.0 4.0非互換のコード 4.0互換のコード

通常の branch 構成

master branch

rails4 branch

Rails4.0化

修正A 修正B

不具合 発生

Page 54: 最適化計算エンジンを備えた Ruby on Rails アプリケーション …Rails WINWORKS One のソースコード 3.1.0 3.2 3.1.1 3.2 3.1.x 4.0 4.0非互換のコード 4.0互換のコード

通常の branch 構成

master branch

rails4 branch

Rails4.0化

バグ修正

修正A 修正B

不具合 発生

Page 55: 最適化計算エンジンを備えた Ruby on Rails アプリケーション …Rails WINWORKS One のソースコード 3.1.0 3.2 3.1.1 3.2 3.1.x 4.0 4.0非互換のコード 4.0互換のコード

通常の branch 構成

master branch

rails4 branch

Rails4.0化

バグ修正

merge

修正A 修正B

不具合 発生

Page 56: 最適化計算エンジンを備えた Ruby on Rails アプリケーション …Rails WINWORKS One のソースコード 3.1.0 3.2 3.1.1 3.2 3.1.x 4.0 4.0非互換のコード 4.0互換のコード

通常の branch 構成

master branch

rails4 branch

Rails4.0化

バグ修正

merge

_人人人人人人人_ > Conflict !!! < ‾Y^Y^Y^Y^Y^Y‾

修正A 修正B

不具合 発生

Page 57: 最適化計算エンジンを備えた Ruby on Rails アプリケーション …Rails WINWORKS One のソースコード 3.1.0 3.2 3.1.1 3.2 3.1.x 4.0 4.0非互換のコード 4.0互換のコード

通常の branch 構成

master branch

rails4 branch

Rails4.0化

バグ修正

merge

_人人人人人人人_ > Conflict !!! < ‾Y^Y^Y^Y^Y^Y‾

ここの長さに応じて conflict の可能性が上がる

修正A 修正B

不具合 発生

Page 58: 最適化計算エンジンを備えた Ruby on Rails アプリケーション …Rails WINWORKS One のソースコード 3.1.0 3.2 3.1.1 3.2 3.1.x 4.0 4.0非互換のコード 4.0互換のコード

今回の branch 構成

master branch

Page 59: 最適化計算エンジンを備えた Ruby on Rails アプリケーション …Rails WINWORKS One のソースコード 3.1.0 3.2 3.1.1 3.2 3.1.x 4.0 4.0非互換のコード 4.0互換のコード

今回の branch 構成

master branch

rails4 branch

Rails4.0化

Page 60: 最適化計算エンジンを備えた Ruby on Rails アプリケーション …Rails WINWORKS One のソースコード 3.1.0 3.2 3.1.1 3.2 3.1.x 4.0 4.0非互換のコード 4.0互換のコード

今回の branch 構成

master branch

rails4 branch

Rails4.0化

修正A

Page 61: 最適化計算エンジンを備えた Ruby on Rails アプリケーション …Rails WINWORKS One のソースコード 3.1.0 3.2 3.1.1 3.2 3.1.x 4.0 4.0非互換のコード 4.0互換のコード

今回の branch 構成

master branch

rails4 branch

Rails4.0化

修正A

修正A

Page 62: 最適化計算エンジンを備えた Ruby on Rails アプリケーション …Rails WINWORKS One のソースコード 3.1.0 3.2 3.1.1 3.2 3.1.x 4.0 4.0非互換のコード 4.0互換のコード

今回の branch 構成

master branch

rails4 branch

修正A

rebase master

Page 63: 最適化計算エンジンを備えた Ruby on Rails アプリケーション …Rails WINWORKS One のソースコード 3.1.0 3.2 3.1.1 3.2 3.1.x 4.0 4.0非互換のコード 4.0互換のコード

今回の branch 構成

master branch

rails4 branch 修正B

修正A

rebase master

Page 64: 最適化計算エンジンを備えた Ruby on Rails アプリケーション …Rails WINWORKS One のソースコード 3.1.0 3.2 3.1.1 3.2 3.1.x 4.0 4.0非互換のコード 4.0互換のコード

今回の branch 構成

master branch

rails4 branch 修正B

修正A

rebase master

修正B

Page 65: 最適化計算エンジンを備えた Ruby on Rails アプリケーション …Rails WINWORKS One のソースコード 3.1.0 3.2 3.1.1 3.2 3.1.x 4.0 4.0非互換のコード 4.0互換のコード

今回の branch 構成

master branch

rails4 branch

修正A 修正B

rebase master

Page 66: 最適化計算エンジンを備えた Ruby on Rails アプリケーション …Rails WINWORKS One のソースコード 3.1.0 3.2 3.1.1 3.2 3.1.x 4.0 4.0非互換のコード 4.0互換のコード

今回の branch 構成

master branch

rails4 branch

修正A 修正B

rebase master

不具合 発生

Page 67: 最適化計算エンジンを備えた Ruby on Rails アプリケーション …Rails WINWORKS One のソースコード 3.1.0 3.2 3.1.1 3.2 3.1.x 4.0 4.0非互換のコード 4.0互換のコード

今回の branch 構成

master branch

rails4 branch

バグ修正修正A 修正B

rebase master

不具合 発生

Page 68: 最適化計算エンジンを備えた Ruby on Rails アプリケーション …Rails WINWORKS One のソースコード 3.1.0 3.2 3.1.1 3.2 3.1.x 4.0 4.0非互換のコード 4.0互換のコード

今回の branch 構成

master branch

rails4 branch

バグ修正修正A 修正B

rebase master

不具合 発生

Page 69: 最適化計算エンジンを備えた Ruby on Rails アプリケーション …Rails WINWORKS One のソースコード 3.1.0 3.2 3.1.1 3.2 3.1.x 4.0 4.0非互換のコード 4.0互換のコード

今回の branch 構成

master branch

rails4 branch

バグ修正修正A 修正B

rebase master

conflict の可能性を小さくできる

不具合 発生

Page 70: 最適化計算エンジンを備えた Ruby on Rails アプリケーション …Rails WINWORKS One のソースコード 3.1.0 3.2 3.1.1 3.2 3.1.x 4.0 4.0非互換のコード 4.0互換のコード

http://blog.m4i.jp/entry/2013/12/10/184336

Page 71: 最適化計算エンジンを備えた Ruby on Rails アプリケーション …Rails WINWORKS One のソースコード 3.1.0 3.2 3.1.1 3.2 3.1.x 4.0 4.0非互換のコード 4.0互換のコード

rspec で検出できなかったものへの対応が 想定より多かった(10%)

rspec を完走させるために必要 8

rspec で Failure/Error 10

DEPRECATION WARNING 12

rspec で検出できなかったもの 4機能拡張により簡単に書けるよ

うになったもの4

合計 38

Page 72: 最適化計算エンジンを備えた Ruby on Rails アプリケーション …Rails WINWORKS One のソースコード 3.1.0 3.2 3.1.1 3.2 3.1.x 4.0 4.0非互換のコード 4.0互換のコード

text_field, text_area の デフォルトサイズ指定が削除された

Page 73: 最適化計算エンジンを備えた Ruby on Rails アプリケーション …Rails WINWORKS One のソースコード 3.1.0 3.2 3.1.1 3.2 3.1.x 4.0 4.0非互換のコード 4.0互換のコード

text_field, text_area の デフォルトサイズ指定が削除された

Page 74: 最適化計算エンジンを備えた Ruby on Rails アプリケーション …Rails WINWORKS One のソースコード 3.1.0 3.2 3.1.1 3.2 3.1.x 4.0 4.0非互換のコード 4.0互換のコード

text_field, text_area の デフォルトサイズ指定が削除された

Page 75: 最適化計算エンジンを備えた Ruby on Rails アプリケーション …Rails WINWORKS One のソースコード 3.1.0 3.2 3.1.1 3.2 3.1.x 4.0 4.0非互換のコード 4.0互換のコード

原因

Rails 3.2

Rails 4.0

<%= f.text_field :name %>!<%= f.text_area :description %>

<input size="30" type="text" id="blog_name" name="blog[name]" />!<textarea cols="40" rows="20" id="blog_description" name="blog[description]">

<input type="text" id="blog_name" name="blog[name]" />!<textarea id="blog_description" name="blog[description]">

Page 76: 最適化計算エンジンを備えた Ruby on Rails アプリケーション …Rails WINWORKS One のソースコード 3.1.0 3.2 3.1.1 3.2 3.1.x 4.0 4.0非互換のコード 4.0互換のコード

原因

# actionpack-3.2.16/lib/action_view/helpers/form_helper.rb!!DEFAULT_TEXT_AREA_OPTIONS = { "cols" => 40, "rows" => 20 }!!def to_text_area_tag(options = {})! options = DEFAULT_TEXT_AREA_OPTIONS.merge(options.stringify_keys)

# actionpack-4.0.2/lib/action_view/helpers/tags/text_area.rb!!def render! options = @options.stringify_keys

Rails 3.2

Rails 4.0

Page 77: 最適化計算エンジンを備えた Ruby on Rails アプリケーション …Rails WINWORKS One のソースコード 3.1.0 3.2 3.1.1 3.2 3.1.x 4.0 4.0非互換のコード 4.0互換のコード

対応module TextAreaWithDefaultSize! DEFAULT_TEXT_AREA_OPTIONS =! { 'cols' => 40, 'rows' => 20 }!! def render! @options = DEFAULT_TEXT_AREA_OPTIONS.! merge(@options.stringify_keys)!! super! end!end!!require 'action_view/helpers/tags/text_area'!ActionView::Helpers::Tags::TextArea.! prepend TextAreaWithDefaultSize

Page 78: 最適化計算エンジンを備えた Ruby on Rails アプリケーション …Rails WINWORKS One のソースコード 3.1.0 3.2 3.1.1 3.2 3.1.x 4.0 4.0非互換のコード 4.0互換のコード

ステージング環境で サーバが立ち上がらない

Page 79: 最適化計算エンジンを備えた Ruby on Rails アプリケーション …Rails WINWORKS One のソースコード 3.1.0 3.2 3.1.1 3.2 3.1.x 4.0 4.0非互換のコード 4.0互換のコード

ステージング環境で サーバが立ち上がらない

execjs-2.0.2/lib/execjs/runtimes.rb:51:in `autodetect’:Could not find a JavaScript runtime.

See https://github.com/sstephenson/execjsfor a list of available runtimes.(ExecJS::RuntimeUnavailable)

Page 80: 最適化計算エンジンを備えた Ruby on Rails アプリケーション …Rails WINWORKS One のソースコード 3.1.0 3.2 3.1.1 3.2 3.1.x 4.0 4.0非互換のコード 4.0互換のコード

ステージング環境で サーバが立ち上がらない

execjs-2.0.2/lib/execjs/runtimes.rb:51:in `autodetect’:Could not find a JavaScript runtime.

See https://github.com/sstephenson/execjsfor a list of available runtimes.(ExecJS::RuntimeUnavailable)

Page 81: 最適化計算エンジンを備えた Ruby on Rails アプリケーション …Rails WINWORKS One のソースコード 3.1.0 3.2 3.1.1 3.2 3.1.x 4.0 4.0非互換のコード 4.0互換のコード

原因

http://guides.rubyonrails.org/v4.0.1/upgrading_ruby_on_rails.html#upgrading-from-rails-3-2-to-rails-4-0-gemfile

https://github.com/rails/rails/commit/49c4af43ec

Page 82: 最適化計算エンジンを備えた Ruby on Rails アプリケーション …Rails WINWORKS One のソースコード 3.1.0 3.2 3.1.1 3.2 3.1.x 4.0 4.0非互換のコード 4.0互換のコード

原因

group :assets do! gem 'sass-rails', '~> 3.2.3'! gem 'coffee-rails', '~> 3.2.1'! # gem 'therubyracer', :platforms => :ruby! gem 'uglifier', '>= 1.0.3'!end

gem 'sass-rails', '~> 4.0.0'!gem 'uglifier', '>= 1.3.0'!gem 'coffee-rails', '~> 4.0.0'!# gem 'therubyracer', platforms: :ruby

Rails 4.0 - Gemfile

Rails 3.2 - Gemfile

Page 83: 最適化計算エンジンを備えた Ruby on Rails アプリケーション …Rails WINWORKS One のソースコード 3.1.0 3.2 3.1.1 3.2 3.1.x 4.0 4.0非互換のコード 4.0互換のコード

WINWORKS One の環境

Page 84: 最適化計算エンジンを備えた Ruby on Rails アプリケーション …Rails WINWORKS One のソースコード 3.1.0 3.2 3.1.1 3.2 3.1.x 4.0 4.0非互換のコード 4.0互換のコード

開発環境

ビルド/デプロイ 環境

本番環境

WINWORKS One の環境

Page 85: 最適化計算エンジンを備えた Ruby on Rails アプリケーション …Rails WINWORKS One のソースコード 3.1.0 3.2 3.1.1 3.2 3.1.x 4.0 4.0非互換のコード 4.0互換のコード

開発環境 • bundle install • Node.js あり

ビルド/デプロイ 環境

本番環境

WINWORKS One の環境

Page 86: 最適化計算エンジンを備えた Ruby on Rails アプリケーション …Rails WINWORKS One のソースコード 3.1.0 3.2 3.1.1 3.2 3.1.x 4.0 4.0非互換のコード 4.0互換のコード

開発環境 • bundle install • Node.js あり

• bundle install ̶without development test • Node.js あり

ビルド/デプロイ 環境

本番環境

WINWORKS One の環境

Page 87: 最適化計算エンジンを備えた Ruby on Rails アプリケーション …Rails WINWORKS One のソースコード 3.1.0 3.2 3.1.1 3.2 3.1.x 4.0 4.0非互換のコード 4.0互換のコード

開発環境 • bundle install • Node.js あり

• bundle install ̶without development test • Node.js あり

• bundle install ̶without development test assets • Node.js なし

ビルド/デプロイ 環境

本番環境

WINWORKS One の環境

Page 88: 最適化計算エンジンを備えた Ruby on Rails アプリケーション …Rails WINWORKS One のソースコード 3.1.0 3.2 3.1.1 3.2 3.1.x 4.0 4.0非互換のコード 4.0互換のコード

対応

-gem 'sass-rails', '~> 4.0.0'!-gem 'uglifier', '>= 1.3.0'!-gem 'coffee-rails', '~> 4.0.0'!+gem 'sass-rails', '~> 4.0.0', group: :assets!+gem 'uglifier', '>= 1.3.0', group: :assets!+gem 'coffee-rails', '~> 4.0.0', group: :assets

Gemfile

Page 89: 最適化計算エンジンを備えた Ruby on Rails アプリケーション …Rails WINWORKS One のソースコード 3.1.0 3.2 3.1.1 3.2 3.1.x 4.0 4.0非互換のコード 4.0互換のコード

Rails 4.0 へ アップグレードすべきか?

Page 90: 最適化計算エンジンを備えた Ruby on Rails アプリケーション …Rails WINWORKS One のソースコード 3.1.0 3.2 3.1.1 3.2 3.1.x 4.0 4.0非互換のコード 4.0互換のコード

WINWORKS One の Rails バージョン遷移

1.2.x

2.0.x2.1.x2.2.x2.3.x

3.0.x

3.1.x

3.2.x

4.0.x

2007 2008 2009 2010 2011 2012 2013

WINWORKS One の Rails アップグレード

Rails のリリース

Page 91: 最適化計算エンジンを備えた Ruby on Rails アプリケーション …Rails WINWORKS One のソースコード 3.1.0 3.2 3.1.1 3.2 3.1.x 4.0 4.0非互換のコード 4.0互換のコード

WINWORKS One の Rails バージョン遷移

1.2.x

2.0.x2.1.x2.2.x2.3.x

3.0.x

3.1.x

3.2.x

4.0.x

2007 2008 2009 2010 2011 2012 2013

WINWORKS One Version 2 の開発

WINWORKS One の Rails アップグレード

Rails のリリース

Page 92: 最適化計算エンジンを備えた Ruby on Rails アプリケーション …Rails WINWORKS One のソースコード 3.1.0 3.2 3.1.1 3.2 3.1.x 4.0 4.0非互換のコード 4.0互換のコード

WINWORKS One の Rails バージョン遷移

1.2.x

2.0.x2.1.x2.2.x2.3.x

3.0.x

3.1.x

3.2.x

4.0.x

2007 2008 2009 2010 2011 2012 2013

WINWORKS One Version 2 の開発

WINWORKS One の Rails アップグレード

Rails のリリース

Page 93: 最適化計算エンジンを備えた Ruby on Rails アプリケーション …Rails WINWORKS One のソースコード 3.1.0 3.2 3.1.1 3.2 3.1.x 4.0 4.0非互換のコード 4.0互換のコード

WINWORKS One の Rails バージョン遷移

1.2.x

2.0.x2.1.x2.2.x2.3.x

3.0.x

3.1.x

3.2.x

4.0.x

2007 2008 2009 2010 2011 2012 2013

WINWORKS One Version 2 の開発

WINWORKS One Version 3 の開発

WINWORKS One の Rails アップグレード

Rails のリリース

Page 94: 最適化計算エンジンを備えた Ruby on Rails アプリケーション …Rails WINWORKS One のソースコード 3.1.0 3.2 3.1.1 3.2 3.1.x 4.0 4.0非互換のコード 4.0互換のコード

WINWORKS One の Rails バージョン遷移

1.2.x

2.0.x2.1.x2.2.x2.3.x

3.0.x

3.1.x

3.2.x

4.0.x

2007 2008 2009 2010 2011 2012 2013

WINWORKS One Version 2 の開発

WINWORKS One Version 3 の開発

Rails 2.3 => 3.2

WINWORKS One の Rails アップグレード

Rails のリリース

Page 95: 最適化計算エンジンを備えた Ruby on Rails アプリケーション …Rails WINWORKS One のソースコード 3.1.0 3.2 3.1.1 3.2 3.1.x 4.0 4.0非互換のコード 4.0互換のコード

WINWORKS One の Rails バージョン遷移

1.2.x

2.0.x2.1.x2.2.x2.3.x

3.0.x

3.1.x

3.2.x

4.0.x

2007 2008 2009 2010 2011 2012 2013

WINWORKS One Version 2 の開発

WINWORKS One Version 3 の開発

Rails 2.3 => 3.2

Rails 3.2 => 4.0

WINWORKS One の Rails アップグレード

Rails のリリース

Page 96: 最適化計算エンジンを備えた Ruby on Rails アプリケーション …Rails WINWORKS One のソースコード 3.1.0 3.2 3.1.1 3.2 3.1.x 4.0 4.0非互換のコード 4.0互換のコード

何を学んだか

Page 97: 最適化計算エンジンを備えた Ruby on Rails アプリケーション …Rails WINWORKS One のソースコード 3.1.0 3.2 3.1.1 3.2 3.1.x 4.0 4.0非互換のコード 4.0互換のコード

何を学んだか

• テスト重要

Page 98: 最適化計算エンジンを備えた Ruby on Rails アプリケーション …Rails WINWORKS One のソースコード 3.1.0 3.2 3.1.1 3.2 3.1.x 4.0 4.0非互換のコード 4.0互換のコード

何を学んだか

• テスト重要

• こまめなアップグレードが開発のリスクとコストを抑える

Page 99: 最適化計算エンジンを備えた Ruby on Rails アプリケーション …Rails WINWORKS One のソースコード 3.1.0 3.2 3.1.1 3.2 3.1.x 4.0 4.0非互換のコード 4.0互換のコード

本当に?

Page 100: 最適化計算エンジンを備えた Ruby on Rails アプリケーション …Rails WINWORKS One のソースコード 3.1.0 3.2 3.1.1 3.2 3.1.x 4.0 4.0非互換のコード 4.0互換のコード

事業のコアはなにか?

Page 101: 最適化計算エンジンを備えた Ruby on Rails アプリケーション …Rails WINWORKS One のソースコード 3.1.0 3.2 3.1.1 3.2 3.1.x 4.0 4.0非互換のコード 4.0互換のコード

利用しているサービス

• GitHub

• CircleCI

• HipChat

• AWS

• NewRelic

• Airbrake

Page 102: 最適化計算エンジンを備えた Ruby on Rails アプリケーション …Rails WINWORKS One のソースコード 3.1.0 3.2 3.1.1 3.2 3.1.x 4.0 4.0非互換のコード 4.0互換のコード

ウィンワークスの結論

Page 103: 最適化計算エンジンを備えた Ruby on Rails アプリケーション …Rails WINWORKS One のソースコード 3.1.0 3.2 3.1.1 3.2 3.1.x 4.0 4.0非互換のコード 4.0互換のコード

ウィンワークスの結論

ユーザベースの拡大

Page 104: 最適化計算エンジンを備えた Ruby on Rails アプリケーション …Rails WINWORKS One のソースコード 3.1.0 3.2 3.1.1 3.2 3.1.x 4.0 4.0非互換のコード 4.0互換のコード

ウィンワークスの結論

ユーザベースの拡大

利用形態の進化

Page 105: 最適化計算エンジンを備えた Ruby on Rails アプリケーション …Rails WINWORKS One のソースコード 3.1.0 3.2 3.1.1 3.2 3.1.x 4.0 4.0非互換のコード 4.0互換のコード

ウィンワークスの結論

ユーザベースの拡大

利用形態の進化

海外ユーザ

Page 106: 最適化計算エンジンを備えた Ruby on Rails アプリケーション …Rails WINWORKS One のソースコード 3.1.0 3.2 3.1.1 3.2 3.1.x 4.0 4.0非互換のコード 4.0互換のコード

ウィンワークスの結論

ユーザベースの拡大

利用形態の進化

海外ユーザ

モバイルデバイス

Page 107: 最適化計算エンジンを備えた Ruby on Rails アプリケーション …Rails WINWORKS One のソースコード 3.1.0 3.2 3.1.1 3.2 3.1.x 4.0 4.0非互換のコード 4.0互換のコード

ウィンワークスの結論

Rails の進化に

WINWORKS One を追随させる

ユーザベースの拡大

利用形態の進化

海外ユーザ

モバイルデバイス