年末に作った目標管理システムをRails 5.1にアップデートした


Rails 5.1

年末に作った目標管理システムのフロントにVue.jsを導入しようと思っていたのだが、ちょうどこのタイミングで正式にリリースされたRails 5.1でWebpackがサポートされたため、先にRails 5.1にアップデートをしてからVue.jsを導入することにした。

5.0から5.1への変更内容はRuby on Rails 5.1リリースノートに詳しく記述されているが、フロントエンド周りのアップデートが主となっている。今回のシステムの場合、フロントエンドのこだわった実装がほとんどない状態だったこともあり、Rails 5.0から5.1へのアップデートはほとんど問題なくスムーズに進んだのだが、一応記録として残しておく。

Rails 5.1へのアップデート

Railsのアップデート

Gemfileを編集して、railsのバージョンを5.1.2に書き換えbundle updateを実行すると、Railsを含むライブラリ一式がアップデートされる。

Gemfile
gem 'rails', '~> 5.1.2'
bundle update

Rails以外のライブラリのアップデートについて

単純にbundle updateを実行すると、rails以外でもバージョンを指定していないgemはアップデートされてしまう。アップデートで不具合が発生してしまう場合は、各gemのバージョンを明示的に指定する。

今回の場合twitter-bootstrap-railsで問題が発生してしまった。2017年2月に4.0.0がリリースされたのだが、そこでfont-awesomeのサポートがドロップされてしまったのが原因だった。(2016年年末時点では3.2.2が最新だった)

参考: https://github.com/seyhunak/twitter-bootstrap-rails/issues/889

font-awesome-railsgemなどを使うことで、引き続きfont-awesomeを使うことは可能だが、コードの変更を伴う箇所が多数あるため、今回は明示的にtwitter-bootstrap-rails3.2.2を使うように指定する形にした。

アップデートタスク

rails app:updateコマンドで、設定ファイルなどの自動アップデートを行う。
gitコマンドで、差分をチェックする。

routesの中身が消されてしまったので、そこだけ元に戻した。

unknown asset対策

Rails 5.1から存在しないAssetをコンパイルしようとした場合にエラーが発生するようになった。

configRails.application.config.assets.unknown_asset_fallback = falseを設定することで、以前と同じような挙動にすることもできるが、なるべく標準の挙動に従っておきたいので設定しないことにした。

前回Rails 5.0で生成したコードでは、faviconを指定している箇所が何箇所かあるが、favicon自体が存在しないのでエラーになってしまう。本来ならfaviconを用意した方がいいのだろうが、面倒くさいので今回はfaviconの指定個所を削除することにした。

form_withへの置き換え

form_tagform_forが今後deprecatedになった。変更しなくても問題なく動くのだが、form_withへの置き換えが推奨されているため、置き換えた。特に問題もなく、難しい箇所もなかった。

その他

Rails 5.1では他にも秘密情報の暗号化やルーティング周りの強化が追加されているが、今回のシステムでは使う場面がなかったので影響はなかった。フロントエンドJSの部分に関しては、この後Vue.jsの導入と合わせて活用していく予定。

参考