はじめに
この記事はHamee Advent Calendar 2016の19日目の記事です。
TL;DR
ボタン一つでネクストエンジンAPIを試すで作成したアプリをRails4.2から5へアップデートしました。
- Rubyのバージョンアップ
- ruby 2.2.2以上
- Railsのバージョンアップ
- rails gemのアップデートのためにGemfileの更新と
bundle update
- rails gemのアップデートのためにGemfileの更新と
- アプリケーションのRails5対応
- 設定ファイルなどを更新するため
bin/rails app:update
- 設定ファイルなどを更新するため
Developer Networkの紹介(2017-04-25追記)
ネクストエンジンには Developer Network (略してDevNet)という開発者向けコミュニティサイトがあります。ここには 開発ガイド 、 APIリファレンス 、チュートリアルなど開発の役に立つ情報が盛りだくさんです。また、開発者同士でディスカッションする コミュニティ もありますので、わからないことがあれば こちら に質問を投稿してください。
ネクストエンジン Developer Networkwork
https://developer.next-engine.com/
この記事で書いていること
ネクストエンジンAPIを簡単に試すウェッブアプリケーションであるne_api_explorerをRails5にアップデートしてみました。
アップデートの手順
- Rubyのバージョンアップ
- Railsのバージョンアップ
- アプリケーションコードの書き換え
Rubyのバージョンアップ
Rails5ではRubyのバージョン2.2.2以上が必要です。これ未満のバージョンの場合は(Railsではなく)Rubyバージョンアップが必要です。
ruby -v # => ruby 2.2.0p0 (2014-12-25 revision 49005) [x86_64-darwin13]
自分の手元の環境(Mac OS 10.9.4)ではrubyのバージョンが2.2.0だったのでアップデートします。rbenv等を使っている場合はbrew upgrade rbenv
するなどして、最新のバージョンが選択できるようにしてください。
rbenv install -l # => 2.2.6 or 2.3.3(2016.12.18現在)
rbenv install 2.2.6
Rubyのバージョンが上がったかを確認し、bundlerのインストールとライブラリのインストールを実行。
ruby -v # => ruby 2.2.6p396 (2016-11-15 revision 56800) [x86_64-darwin13]
gem install bundler # rubyのバージョンが変わったのでbundleを再インストール
bundle install # gemの再インストール
Herokuでの動作時の注意点
Herokuで動作させるためにはGemfile
にruby '2.2.6'
のようにRubyのバージョンを明示的に指定する必要があったので後から追加しています。
-
+ruby '2.2.6'
この状態でbundle install
を再度実行するとGemfile.lock
にもRubyのバージョンが追記されます。
+RUBY VERSION
+ ruby 2.2.6p396
+
Railsのバージョンアップ
Rubyのバージョンアップが終わったので今度はRails。元々4.2.5を指定していたので5系を指定。
-gem 'rails', '4.2.5'
+gem 'rails', '~> 5.0'
この状態でbundle update
を実行。bundle install
ではない点に注意。すると以下のようなメッセージがでて失敗。
Fetching gem metadata from https://rubygems.org/..........
Fetching version metadata from https://rubygems.org/..
Fetching dependency metadata from https://rubygems.org/.
Resolving dependencies...
Bundler could not find compatible versions for gem "railties":
In Gemfile:
rails (~> 5.0) was resolved to 5.0.0, which depends on
railties (= 5.0.0)
sass-rails (~> 5.0) was resolved to 5.0.4, which depends on
railties (< 5.0, >= 4.0.0)
sass-rails
の依存関係の問題があるようです。依存関係を解決するためGemfileとエラーメッセージのにらめっこをしながら最終的に以下の差分に。
-gem 'rails', '4.2.5'
+gem 'rails', '~> 5.0'
gem 'pg', '~> 0.15'
gem 'sass-rails', '~> 5.0'
gem 'uglifier', '>= 1.3.0'
-gem 'coffee-rails', '~> 4.1.0'
+gem 'coffee-rails', '~> 4.2.1'
gem 'jquery-rails'
-gem 'jbuilder', '~> 2.0'
+gem 'jbuilder', '~> 2.6'
この状態で再度bundle update
を実行。引数にはrails以外にアップデートが必要なgemを指定。
bundle update rails sass-rails coffee-rails jquery-rails
すると今度は成功。で、サーバーを起動してみると・・・。起動に成功したと思いきやWARNINGがでている。この状態でlocalhost:3000にアクセスするとエラー。
DEPRECATION WARNING: Accessing mime types via constants is deprecated. Please change `Mime::HTML` to `Mime[:html]`. (called from require at /usr/local/rbenv/versions/2.2.6/lib/ruby/gems/2.2.0/gems/bundler-1.13.6/lib/bundler/runtime.rb:91)
DEPRECATION WARNING: Accessing mime types via constants is deprecated. Please change `Mime::TEXT` to `Mime[:text]`. (called from require at /usr/local/rbenv/versions/2.2.6/lib/ruby/gems/2.2.0/gems/bundler-1.13.6/lib/bundler/runtime.rb:91)
DEPRECATION WARNING: Accessing mime types via constants is deprecated. Please change `Mime::URL_ENCODED_FORM` to `Mime[:url_encoded_form]`. (called from require at /usr/local/rbenv/versions/2.2.6/lib/ruby/gems/2.2.0/gems/bundler-1.13.6/lib/bundler/runtime.rb:91)
=> Booting WEBrick
=> Rails 5.0.0.1 application starting in development on http://localhost:3000
WARNINGのメッセージでググるとweb-console gemが原因らしいのでアップデートしてみる。
- web-console (~> 2.0)
+ web-console (~> 3.0)
bundle update web-console
してgemを更新した状態でbin/rails s
。さあどうだ・・・?
やった!動いた!
コードの書き換え
DBを使っていないこともあって今回は不要でした。モデル層を使うならApplicationRecordなどRails5で登場したクラスなどは作成した方がよいかと思います。
まとめ
Rails4から5への移行を試すならまずは小さなアプリで試すのがよいと思いました(小並感)
宣伝
1ミリたりともRails5の機能は使っていませんが、ネクストエンジンとネクストエンジンAPIと合わせてne_api_explorerをよろしくお願いします。