概要
- 自作サービスをRails 4.2.6からRails 5.0.0に移行した
- 基本的にはRails5でrails newしたプロジェクトとdiffをとってどんどんマージ
- bundle installでコケたのでRails5非対応gemをコメントアウト
- テストがコケたのでテストを修正
- TravisCIがコケたので.travis.ymlを修正
作業対象のサービスとソースコード
千葉県民のためのバス停検索サービス「chi-bus.jp」https://www.chi-bus.jp/
- GitHub:https://github.com/yamamuteki/chi-bus.jp
- 今回のコミット:https://github.com/yamamuteki/chi-bus.jp/commit/b29b040ede7660677ebe005ccb007e7101db29bf
- 開発の背景などはこちら:http://www.slideshare.net/SatoshiYamazaki2/20160527-m3-tech-talk-rails-chibusjp
前提
このあたりは読んでいることが前提
- Ruby on Rails 5.0 リリースノート http://railsguides.jp/5_0_release_notes.html
- Rails アップグレードガイド http://railsguides.jp/upgrading_ruby_on_rails.html
作業手順
- 変更部分を詳しく理解したいのでrails:updateタスク(Rails5からはapp:updateタスク)は使わない
-
rails new rails5_sample
した後にvimのDirDiff.vimプラグインを使ってマージ - s(sync)コマンドが便利、部分的なマージはdoやdpでサクサク進めるべし
- 一通りマージしたら、rails5_sampleアプリ側で
rails g scaffold hoge name
などしてモデルやコントローラ、テストコードの変更点もチェックしてサービスのコードを書き換える -
rm Gemfile.lock
してからbundle install
→依存関係で問題 -
rails test
→ワーニングとエラー沢山…次節で対処 -
念のためrake test
→こっちも同様
対処など
- quiet_assets gemがRails5非対応だったのでGemfileからコメントアウト
- コントローラのテストで
get :index, { q: 'hoge' }
とかやっている場合、get :index, params: { q: 'hoge' }
のようにパラメータのハッシュに名前が必要になった - Railsガイドにも書いてあるけどテストコードでassignsを使っている場合はGemfileに
gem 'rails-controller-testing'
の追加が必要 - ActionView::TestCaseを継承したテストからのhelperメソッドの呼び出しで、他のヘルパーがインクルードされなくなった?仕方がないので
stub(:render, true) do ... end
みたいな感じで他のペルパーに依存する箇所をスタブ化して対応 - ActiveRecoedのbelongs_toのバリデーション強化の影響?でメモリ上でアソシエーションテーブル作って一部保存という手抜きが出来なくなり、テスト中にbus_route.saveがコケている箇所があったので、最初にbus_route.create!しておくことで対応(次回コケてもわかるように念のため感嘆符つけた)
- Travis CIのビルドがコケるようになったので.travis.ymlのscript:セクションに
bin/rails db:migrate RAILS_ENV=test
とbin/rails test
を追加
所感
- モデルオブジェクトがActiveRecord::Baseの継承からApplicationRecordの継承に切り替わるなど、随所に使いやすい変更が入っていて好印象
- rakeからrailsコマンドに変更になった影響か、動的ロードの変更の影響か、testなどのrakeタスクの実行周りは色々とみえない変更ありそう(より依存関係の分離が進んだ?)
- ActionCableやActionMailer関連のテンプレートコードが追加されてカバレッジが微妙に下がった(笑)
- なんにせよアプリケーション自体は簡単に動いたのでよかったよかった
参照
- DirDiff.vim https://github.com/will133/vim-dirdiff