LoginSignup
13
14

More than 5 years have passed since last update.

自作サービスをRails 4.2.6からRails 5.0.0に移行した手順とあれこれ

Posted at

概要

  • 自作サービスを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=testbin/rails testを追加

所感

  • モデルオブジェクトがActiveRecord::Baseの継承からApplicationRecordの継承に切り替わるなど、随所に使いやすい変更が入っていて好印象
  • rakeからrailsコマンドに変更になった影響か、動的ロードの変更の影響か、testなどのrakeタスクの実行周りは色々とみえない変更ありそう(より依存関係の分離が進んだ?)
  • ActionCableやActionMailer関連のテンプレートコードが追加されてカバレッジが微妙に下がった(笑)
  • なんにせよアプリケーション自体は簡単に動いたのでよかったよかった

参照

13
14
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
13
14