SlideShare ist ein Scribd-Unternehmen logo
1 von 44
Downloaden Sie, um offline zu lesen
Rails3.8から5.1へ
第81回 Ruby関⻄勉強会
@satomicchy
⾃⼰紹介
✤ つじたさとみ @satomicchy
✤ ⽇本語学校の総務経理とwebプログラマ
✤ 昔はFPGAやってました
✤ 最近、LinuxKernel勉強会やってます
お品書き
✤ 対象アプリ
✤ バージョンアップ⼿順
✤ 変更あれこれ 27連発
✤ まとめ
バージョンアップの全容についてはこちらを参照
https://railsguides.jp/
upgrading_ruby_on_rails.html
change.logの内容とかあまり覚えてない(知らな
い)けど、バージョンアップをしないといけなくなっ
た⽅へ、ざっくり紹介
対象アプリ
✤ とある学校様の受講申込∼卒業までの学⽣管理
✤ model数:43、controller数:42
✤ DB:MySql
✤ テスト:minitest
✤ 2012年リリース
対象アプリ
✤ rails stats(変更前)
+----------------------+-------+-------+---------+---------+-----+-------+
| Name                 | Lines |   LOC | Classes | Methods | M/C | LOC/M |
+----------------------+-------+-------+---------+---------+-----+-------+
| Controllers          |  3857 |  3120 |      44 |     296 |   6 |     8 |
| Helpers              |   545 |   490 |       0 |      27 |   0 |    16 |
| Models               |  2500 |  2115 |      44 |     165 |   3 |    10 |
| Libraries            |   142 |   126 |       5 |      15 |   3 |     6 |
| Integration tests    |   407 |   347 |       8 |       3 |   0 |   113 |
| Functional tests     |  2477 |  2046 |      43 |       1 |   0 |  2044 |
| Unit tests           |  2354 |  1942 |      87 |       2 |   0 |   969 |
+----------------------+-------+-------+---------+---------+-----+-------+
| Total                | 12282 | 10186 |     231 |     509 |   2 |    18 |
+----------------------+-------+-------+---------+---------+-----+-------+
  Code LOC: 5851     Test LOC: 4335     Code to Test Ratio: 1:0.7
対象アプリ
✤ rails stats(変更後)
+----------------------+--------+--------+---------+---------+-----+-------+
| Name | Lines | LOC | Classes | Methods | M/C | LOC/M |
+----------------------+--------+--------+---------+---------+-----+-------+
| Controllers | 3717 | 3026 | 43 | 313 | 7 | 7 |
| Helpers | 584 | 526 | 0 | 30 | 0 | 15 |
| Models | 2501 | 2112 | 44 | 168 | 3 | 10 |
| JavaScripts | 493 | 408 | 0 | 110 | 0 | 1 |
| Libraries | 165 | 148 | 5 | 15 | 3 | 7 |
| Controller tests | 2330 | 1929 | 42 | 267 | 6 | 5 |
| Helper tests | 0 | 0 | 0 | 0 | 0 | 0 |
| Model tests | 2380 | 1971 | 86 | 215 | 2 | 7 |
| Mailer tests | 0 | 0 | 0 | 0 | 0 | 0 |
| Integration tests | 356 | 301 | 7 | 41 | 5 | 5 |
| System tests | 53 | 48 | 1 | 3 | 3 | 14 |
+----------------------+--------+--------+---------+---------+-----+-------+
| Total | 12579 | 10469 | 228 | 1162 | 5 | 7 |
+----------------------+--------+--------+---------+---------+-----+-------+
Code LOC: 6220 Test LOC: 4249 Code to Test Ratio: 1:0.7
対象アプリ
✤ Gemfile(変更前)
gem 'rails', '3.2.13'
gem 'sass'
gem 'coffee-script'
gem 'uglifier'
gem 'jquery-rails'
gem 'underscore-rails'
gem 'jbuilder'
gem 'backup', require: false
gem 'whenever', require: false
gem 'devise'
gem 'kaminari'
gem 'cancan'
group :development, :test do
gem 'faker'
gem 'simplecov', require: false
gem 'zeus'
gem 'capybara-webkit', github: 'thoughtbot/
capybara-webkit'
gem 'database_cleaner'
gem 'bullet'
gem 'mocha', require: 'mocha/api'
gem 'pg'
end
group :test do
gem 'sqlite3'
end
gem "mysql2", "0.3.11"
gem 'prawn_rails'
gem 'prawn', '1.0.0.rc1'
gem 'csv_rails'
gem 'spreadsheet'
gem 'carrierwave'
gem "therubyracer"
gem "less-rails"
gem 'twitter-bootstrap-rails'
gem 'form_helper-error_messages'
gem 'acts_as_tree'
gem 'parallel'
gem 'progressbar'
gem 'lazy_high_charts'
gem 'htmlentities'
gem "docx_templater", "~> 0.1.1"
gem 'axlsx'
gem 'acts_as_xlsx'
gem 'rubyzip'
gem 'rubyXL', github: ‘weshatheleopard/rubyXL'
gem 'capistrano'
対象アプリ
✤ Gemfile(変更後)
gem 'rails', '5.1.4'
gem 'sass'
gem 'coffee-script'
gem 'uglifier'
gem 'jquery-rails'
gem 'underscore-rails'
gem 'jbuilder'
gem 'backup', '~>3.4.0', require: false
gem 'whenever', require: false
gem 'devise'
gem 'kaminari'
gem 'cancancan'
group :development, :test do
gem 'faker'
gem 'simplecov', require: false
gem 'zeus'
gem 'database_cleaner'
gem ‘bullet'
gem 'mocha', require: 'mocha/api'
end
group :test do
gem 'rails-controller-testing'
end
gem "mysql2"
gem 'prawn_rails'
gem 'prawn'
gem 'prawn-table'
gem 'csv_rails'
gem ‘spreadsheet'
gem 'carrierwave'
gem 'fog-aws'
gem 'form_helper-error_messages'
gem 'acts_as_tree'
gem 'parallel'
gem 'progressbar'
gem 'lazy_high_charts'
gem 'htmlentities'
gem "docx_templater", github: 'BaseCampOps/docx_templater'
gem 'axlsx', github: 'randym/axlsx'
gem 'acts_as_xlsx'
gem 'rubyzip'
gem 'rubyXL'#, '> 3.3.0'
gem 'webpacker'
gem 'puma', '~> 3.7'
gem 'sass-rails', '~> 5.0'
gem 'coffee-rails', '~> 4.2'
gem 'turbolinks', '~> 5'
group :development, :test do
gem 'byebug', platforms: [:mri, :mingw, :x64_mingw]
gem 'capybara', '~> 2.13'
gem 'selenium-webdriver'
end
group :development do
gem 'web-console', '>= 3.3.0'
gem 'listen', '>= 3.0.5', '< 3.2'
gem 'spring'
gem 'spring-watcher-listen', '~> 2.0.0'
gem 'capistrano'
gem 'capistrano-rails'
gem "letter_opener"
end
gem 'tzinfo-data', platforms: [:mingw, :mswin, :x64_mingw, :jruby]
gem 'dotenv-rails'
バージョンアップ⼿順
✤ 全体の流れ その1(今回採⽤)
• Gemfileのversion変更
• => gem install
• => railsコマンド(Rails5の設定ファイル等)
• => modelテスト
• => controlerテスト
• => integrationテスト
• => デザインfix
バージョンアップ⼿順
✤ 全体の流れ その2(こっちの⽅がいいかも)
• Gemfileのテストgroupだけversion変更
• => gem install
• => テスト確認
• => GemfileのRailsのversion変更
• => gem install
• => railsコマンド
• => …
バージョンアップ⼿順
✤ railsコマンド その1
• $ rails app:update
• config/およびbin/以下の追加、修正のみ
バージョンアップ⼿順
✤ railsコマンド その2(今回採⽤)
• $ rails new
• すべてのフォルダ対象で追加・修正
変更あれこれ 1
✤ bundle installでgemのバージョンが古くなっ
た
変更あれこれ 2
✤ turbolinks になった
変更あれこれ 3
✤ applicationなんちゃらファイルが上書きされた
変更あれこれ 4
✤ secret_token.rb が secret.yml になった
変更あれこれ 5
✤ bin以下がchmod664から775にされた
変更あれこれ 6
✤ routes の prefix が変わってた
変更あれこれ 7
✤ config/initializes/inflections.rb上書きされた
変更あれこれ 8
✤ before* の callback が return false で⽌ま
らなくなった
変更あれこれ 9
✤ *_filter が *_actionになった
変更あれこれ 10
✤ .all の返り値が Array から
ActiveReacord::Relation になった
変更あれこれ 11
✤ model のdependent関係変わった
変更あれこれ 12
✤ has_many :through 書く順番おこられた
変更あれこれ 13
✤ .find_or_create_by_* なくなった
変更あれこれ 14
✤ .scoped なくなった
変更あれこれ 15
✤ .time_zone デフォルト記載なくなった
変更あれこれ 16
✤ .without ていう scopeを 定義してたら、
active_support に同名のメソッドができてた
変更あれこれ 17
✤ .minutes の返り値が fixture から integer
になった
変更あれこれ 18
✤ .references が必要になった
変更あれこれ 19
✤ .orderにシンボルを渡したときのsqlが変わった
✤ 前 Student.order(:”people.alphabet”)
✤ 今 Student.order(”people.alphabet”)
変更あれこれ 20
✤ MassAssignmentSecurity(attr_accessible)
から StrongParameter になった
変更あれこれ 21
✤ polymorphic_url なくなった
変更あれこれ 22
✤ button_to_function/link_to_function なくな
った
変更あれこれ 23
✤ minitest のフォルダ構成が変わった
変更あれこれ 24
✤ minitest のテストの順番が固定だったのがラ
ンダムになった
変更あれこれ 25
✤ minitestでdelete実⾏時、association をちゃ
んと⾒るようになった
変更あれこれ 26
✤ テストで assigns なくなった。
gem 'rails-controller-testing' 追加した
変更あれこれ 27
✤ minitest の response のクラスが変わった
-class ActionController::TestResponse
+class ActionDispatch::TestResponse
変更あれこれ 27+1
✤ minitest の params の書き⽅が変わった
https://github.com/xinminlabs/synvert
このgemでうまいこと置換できるらしいです。
(発表のあとに教えてもらいました。)
おまけ
✤ bootstrapバージョン 2系 => 4系 にした
まとめ
✤ テスト⼤事
✤ まめにバージョンアップ
✤ did_you_mean ありがとう!

Weitere ähnliche Inhalte

Ähnlich wie Rubykansai 81

Control distribution of virtual machines
Control distribution of virtual machinesControl distribution of virtual machines
Control distribution of virtual machines
irix_jp
 
Zabbixでvmc statsの情報など監視
Zabbixでvmc statsの情報など監視Zabbixでvmc statsの情報など監視
Zabbixでvmc statsの情報など監視
Shota Onishi
 

Ähnlich wie Rubykansai 81 (20)

MySQL 5.7 InnoDB 日本語全文検索(その2)
MySQL 5.7 InnoDB 日本語全文検索(その2)MySQL 5.7 InnoDB 日本語全文検索(その2)
MySQL 5.7 InnoDB 日本語全文検索(その2)
 
ML2/OVN アーキテクチャ概観
ML2/OVN アーキテクチャ概観ML2/OVN アーキテクチャ概観
ML2/OVN アーキテクチャ概観
 
MariaDB Columnstore 使いこなそう
MariaDB Columnstore 使いこなそうMariaDB Columnstore 使いこなそう
MariaDB Columnstore 使いこなそう
 
osoljp 2011.08
osoljp 2011.08osoljp 2011.08
osoljp 2011.08
 
MySQLとPostgreSQLの基本的な実行プラン比較
MySQLとPostgreSQLの基本的な実行プラン比較MySQLとPostgreSQLの基本的な実行プラン比較
MySQLとPostgreSQLの基本的な実行プラン比較
 
DB tech showcase_tokyo2018_LOCONDO
DB tech showcase_tokyo2018_LOCONDODB tech showcase_tokyo2018_LOCONDO
DB tech showcase_tokyo2018_LOCONDO
 
20160929 inno db_fts_jp
20160929 inno db_fts_jp20160929 inno db_fts_jp
20160929 inno db_fts_jp
 
SICE 2020 Rtm tutorial 2_online_en
SICE 2020 Rtm tutorial 2_online_enSICE 2020 Rtm tutorial 2_online_en
SICE 2020 Rtm tutorial 2_online_en
 
第20回 中国地方DB勉強会 in 岡山 MySQLレプリケーション
第20回 中国地方DB勉強会 in 岡山 MySQLレプリケーション第20回 中国地方DB勉強会 in 岡山 MySQLレプリケーション
第20回 中国地方DB勉強会 in 岡山 MySQLレプリケーション
 
Control distribution of virtual machines
Control distribution of virtual machinesControl distribution of virtual machines
Control distribution of virtual machines
 
RTM講習会 2部
RTM講習会 2部RTM講習会 2部
RTM講習会 2部
 
openstack_neutron-ovs_osc2014tf_20141019
openstack_neutron-ovs_osc2014tf_20141019openstack_neutron-ovs_osc2014tf_20141019
openstack_neutron-ovs_osc2014tf_20141019
 
What's Temporal model FuelPHP東京勉強会03
What's Temporal model FuelPHP東京勉強会03What's Temporal model FuelPHP東京勉強会03
What's Temporal model FuelPHP東京勉強会03
 
食べログ流 - Rails Upgrade Practices
食べログ流 - Rails Upgrade Practices食べログ流 - Rails Upgrade Practices
食べログ流 - Rails Upgrade Practices
 
増井雄一郎の「wri.pe」を事例に学ぶ、自作サービスの作り方〜開発編 先生:増井 雄一郎
増井雄一郎の「wri.pe」を事例に学ぶ、自作サービスの作り方〜開発編 先生:増井 雄一郎増井雄一郎の「wri.pe」を事例に学ぶ、自作サービスの作り方〜開発編 先生:増井 雄一郎
増井雄一郎の「wri.pe」を事例に学ぶ、自作サービスの作り方〜開発編 先生:増井 雄一郎
 
ネットワークプログラマビリティ勉強会
ネットワークプログラマビリティ勉強会ネットワークプログラマビリティ勉強会
ネットワークプログラマビリティ勉強会
 
[TL07] エンタープライズ基準で " 丁寧に " .NET Framework のバージョンアップしていくコツ
[TL07] エンタープライズ基準で " 丁寧に " .NET Framework のバージョンアップしていくコツ[TL07] エンタープライズ基準で " 丁寧に " .NET Framework のバージョンアップしていくコツ
[TL07] エンタープライズ基準で " 丁寧に " .NET Framework のバージョンアップしていくコツ
 
VagrantとChefで開発スピードを上げる話
VagrantとChefで開発スピードを上げる話VagrantとChefで開発スピードを上げる話
VagrantとChefで開発スピードを上げる話
 
MySQL 5.7にやられないためにおぼえておいてほしいこと
MySQL 5.7にやられないためにおぼえておいてほしいことMySQL 5.7にやられないためにおぼえておいてほしいこと
MySQL 5.7にやられないためにおぼえておいてほしいこと
 
Zabbixでvmc statsの情報など監視
Zabbixでvmc statsの情報など監視Zabbixでvmc statsの情報など監視
Zabbixでvmc statsの情報など監視
 

Mehr von Satomi Tsujita

Rails初心者レッスン lesson3 3edition
Rails初心者レッスン lesson3 3editionRails初心者レッスン lesson3 3edition
Rails初心者レッスン lesson3 3edition
Satomi Tsujita
 
Rails初心者レッスン lesson4 2edition
Rails初心者レッスン lesson4 2editionRails初心者レッスン lesson4 2edition
Rails初心者レッスン lesson4 2edition
Satomi Tsujita
 

Mehr von Satomi Tsujita (20)

Osaka rubykaigi01
Osaka rubykaigi01Osaka rubykaigi01
Osaka rubykaigi01
 
Raspberry Pi3 のCPUまわりを整理してみた
Raspberry Pi3 のCPUまわりを整理してみたRaspberry Pi3 のCPUまわりを整理してみた
Raspberry Pi3 のCPUまわりを整理してみた
 
2017年12月 linux kernel
2017年12月 linux kernel2017年12月 linux kernel
2017年12月 linux kernel
 
2017年9月 サイト紹介
2017年9月 サイト紹介2017年9月 サイト紹介
2017年9月 サイト紹介
 
Devfes kyoto2017
Devfes kyoto2017Devfes kyoto2017
Devfes kyoto2017
 
いわみくとMeetup第15回
いわみくとMeetup第15回いわみくとMeetup第15回
いわみくとMeetup第15回
 
セキュリティー入門(メールウイルス編)
セキュリティー入門(メールウイルス編)セキュリティー入門(メールウイルス編)
セキュリティー入門(メールウイルス編)
 
Gemの話 紹介編
Gemの話 紹介編Gemの話 紹介編
Gemの話 紹介編
 
RubyとRailsのおいしい使い方 ver. okayama1
RubyとRailsのおいしい使い方 ver. okayama1RubyとRailsのおいしい使い方 ver. okayama1
RubyとRailsのおいしい使い方 ver. okayama1
 
RubyとRailsのおいしい使い方
RubyとRailsのおいしい使い方RubyとRailsのおいしい使い方
RubyとRailsのおいしい使い方
 
Minami.rbの履歴書
Minami.rbの履歴書Minami.rbの履歴書
Minami.rbの履歴書
 
Wt2015
Wt2015Wt2015
Wt2015
 
Rubyビジネスセミナー大阪2015
Rubyビジネスセミナー大阪2015Rubyビジネスセミナー大阪2015
Rubyビジネスセミナー大阪2015
 
経理屋がRailsを始めた理由
経理屋がRailsを始めた理由経理屋がRailsを始めた理由
経理屋がRailsを始めた理由
 
JAWS-UG2014
JAWS-UG2014JAWS-UG2014
JAWS-UG2014
 
Rails初心者レッスン lesson3 3edition
Rails初心者レッスン lesson3 3editionRails初心者レッスン lesson3 3edition
Rails初心者レッスン lesson3 3edition
 
Uragamiso re
Uragamiso reUragamiso re
Uragamiso re
 
Rails初心者レッスン lesson2 3edition
Rails初心者レッスン lesson2 3editionRails初心者レッスン lesson2 3edition
Rails初心者レッスン lesson2 3edition
 
Sql基礎の基礎
Sql基礎の基礎Sql基礎の基礎
Sql基礎の基礎
 
Rails初心者レッスン lesson4 2edition
Rails初心者レッスン lesson4 2editionRails初心者レッスン lesson4 2edition
Rails初心者レッスン lesson4 2edition
 

Kürzlich hochgeladen

Kürzlich hochgeladen (10)

新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
 
Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsUtilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native Integrations
 
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 

Rubykansai 81