gemの複数バージョンカジュアルテスト #shibuyarb

36
gemの複数バージョンカジュ アルテスト @sue445 2015/05/20 Shibuya.rb

Upload: go-sueyoshi-aka-sue445

Post on 22-Jul-2015

1.619 views

Category:

Technology


2 download

TRANSCRIPT

Page 1: gemの複数バージョンカジュアルテスト #shibuyarb

gemの複数バージョンカジュアルテスト

@sue4452015/05/20 Shibuya.rb

Page 2: gemの複数バージョンカジュアルテスト #shibuyarb

自己紹介

sue445 @drecom● お仕事

○ iOS/Androidアプリの課金ライブラリのメンテ

○ 社内ツール、社内ライブラリ開発

○ サーバサイド全般(アプリ~インフラまで横断的に)○ TDDおじさん

○ PO (Precure Ojisan)● Twitterは上級者向けのアカウントなのでフォロー厳禁

○ 30分間で200ツイート以上流れるよ!!

● Shibuya.rb (RubyKaja 2014)

Page 3: gemの複数バージョンカジュアルテスト #shibuyarb

【今期の嫁】キュアトゥインクル

Page 4: gemの複数バージョンカジュアルテスト #shibuyarb

今期の黄色は肩背中出し!!!!

Page 5: gemの複数バージョンカジュアルテスト #shibuyarb

【本妻】キュアピース

Page 6: gemの複数バージョンカジュアルテスト #shibuyarb

はじめにいくつか質問

Page 7: gemの複数バージョンカジュアルテスト #shibuyarb

【質問1/5】

gemを作ったことある

人?

Page 8: gemの複数バージョンカジュアルテスト #shibuyarb

【質問2/5】

作ったgemのテストをし

ている人?

Page 9: gemの複数バージョンカジュアルテスト #shibuyarb

【質問3/5】

複数のRubyのバージョ

ンでテストしてる人?(例. Ruby2.0, 2.1, 2.2系)

Page 10: gemの複数バージョンカジュアルテスト #shibuyarb

【質問4/5】

Rails系のgemを作って

る人?

Page 11: gemの複数バージョンカジュアルテスト #shibuyarb

【質問5/5】

複数のRailsのバージョ

ンでテストしてる人?(例. Rails 4.0, 4.1, 4.2系)

Page 12: gemの複数バージョンカジュアルテスト #shibuyarb

複数のrubyのバージョン

複数のgemのバージョン

でカジュアルなテストを!

Page 13: gemの複数バージョンカジュアルテスト #shibuyarb

Agenda

● Travis CIを使う○ 複数のRubyのバージョンでテストをする

○ 複数のRailsのバージョンでテストをする

● Jenkinsを使う○ マルチ構成プロジェクト

● まとめ

Page 14: gemの複数バージョンカジュアルテスト #shibuyarb

最初にまとめ

Travis CI使う方がめっ

ちゃ楽

Page 15: gemの複数バージョンカジュアルテスト #shibuyarb

Travis CIを使う

CI系のサービスはいくつかあるけど(Circle CI, Werckerなど)、カジュアルに複数バージョン系の

テストを行えるのはTravis CIのみ

Page 16: gemの複数バージョンカジュアルテスト #shibuyarb

Travis CIで複数のRubyバージョンのテスト

bundle gemした直後の .travis.ymllanguage: ruby

rvm:

- 2.2.2

Page 17: gemの複数バージョンカジュアルテスト #shibuyarb

Travis CIで複数のRubyバージョンのテスト

いい感じに編集した .travis.ymllanguage: ruby

rvm:

- 2.0.0-p598

- 2.1.6

# こういう書き方をすれば2.2.x系の最新版を使う

- 2.2

Page 18: gemの複数バージョンカジュアルテスト #shibuyarb

Travis CIで複数のRubyバージョンのテスト

Travis CIの結果

Page 19: gemの複数バージョンカジュアルテスト #shibuyarb

Travis CIで複数のRailsバージョンのテスト

.travis.yml にgemfileを追記

gemfile:

- gemfiles/rails3_2.gemfile

- gemfiles/rails4_0.gemfile

- gemfiles/rails4_1.gemfile

- gemfiles/rails4_2.gemfile

Page 20: gemの複数バージョンカジュアルテスト #shibuyarb

Travis CIで複数のRailsバージョンのテスト

gemfiles/rails4_2.gemfilesource 'https://rubygems.org'

gem 'rails', "~> 4.2.0"

gemspec :path => '../'

Page 21: gemの複数バージョンカジュアルテスト #shibuyarb

Travis CIで複数のRailsバージョンのテスト

gemspec spec.add_dependency "rails"

# 下記のように書いても可

# spec.add_dependency "rails", ">= 3.2.0", "<

5.0"

Page 22: gemの複数バージョンカジュアルテスト #shibuyarb

【おまけ】Rails3系と4系でテストしたいけどRails4系でしか使えないgemも使いたい

当時やりたかったこと

● Rails 3.2, 4.0, 4.1, 4.2系でテスト

● activerecord-turntable(DBのカジュアル水

平分割gem)と組み合わせた場合のテストをし

たい

○ https://github.com/drecom/activerecord-turntable

○ turntableの最新はactiverecord 4.0以降のみ対応

○ Rails 3系ではturntableはテストしない

Page 23: gemの複数バージョンカジュアルテスト #shibuyarb

だがしかし

普通にこうすると

spec.add_dependency "rails"

spec.add_development_dependency "activerecord-

turntable", ">= 2.0.0"

Page 24: gemの複数バージョンカジュアルテスト #shibuyarb

だがしかし

rails 3.2系だとbundle installで詰む

multiple_version_test_sample (>= 0) ruby depends on

rails (= 3.2.21) ruby depends on

activerecord (= 3.2.21) ruby depends on

activemodel (= 3.2.21) ruby depends on

activesupport (= 3.2.21) ruby

activerecord-turntable (>= 2.0.0) ruby depends on

activesupport (>= 4.0.0) ruby

Page 25: gemの複数バージョンカジュアルテスト #shibuyarb

【解決方法】グローバル変数を利用w

gemfiles/rails4_x.gemfilesource 'https://rubygems.org'

$rails_version = "4.2.0"

gem 'rails', "~> #{$rails_version}"

gemspec :path => '../'

Page 26: gemの複数バージョンカジュアルテスト #shibuyarb

【解決方法】グローバル変数を利用w

gemfiles/rails4_x.gemfilesource 'https://rubygems.org'

$rails_version = "4.2.0"

gem 'rails', "~> #{$rails_version}"

gemspec :path => '../'

Page 27: gemの複数バージョンカジュアルテスト #shibuyarb

【解決方法】グローバル変数を利用w

gemspec spec.add_dependency "rails"

if !$rails_version || $rails_version.to_i == 4

spec.add_development_dependency

"activerecord-turntable", ">= 2.0.0"

end

Page 28: gemの複数バージョンカジュアルテスト #shibuyarb

【解決方法】グローバル変数を利用w

gemspec spec.add_dependency "rails"

if !$rails_version || $rails_version.to_i == 4

spec.add_development_dependency

"activerecord-turntable", ">= 2.0.0"

end

普通にbundle installするとグローバル変数がないので左側が評価

Page 29: gemの複数バージョンカジュアルテスト #shibuyarb

【解決方法】グローバル変数を利用w

gemspec spec.add_dependency "rails"

if !$rails_version || $rails_version.to_i == 4

spec.add_development_dependency

"activerecord-turntable", ">= 2.0.0"

end

gemfile経由だとグローバル変数があるので右側が評価

Page 30: gemの複数バージョンカジュアルテスト #shibuyarb

Jenkinsのマルチ構成プロジェクト

Page 31: gemの複数バージョンカジュアルテスト #shibuyarb

Jenkinsのマルチ構成プロジェクト

ここで定義した環境変数の組み合わせでジョブが実行される

Page 32: gemの複数バージョンカジュアルテスト #shibuyarb

Jenkinsのマルチ構成プロジェクト

ビルド結果

Page 33: gemの複数バージョンカジュアルテスト #shibuyarb

Jenkinsでの注意点

● 受け取った環境変数を元にRubyのバージョン

やgemfileを切り替える部分はビルドスクリプト

内で頑張る

● 組み合わせが多すぎるとJenkinsのキューが詰

まるのでSlaveを増やす

Page 36: gemの複数バージョンカジュアルテスト #shibuyarb

まとめ

Jenkinsでも頑張ればできない

ことはないけど、Travis CI使っ

た方がめっちゃ楽