1. Qiita
  2. 投稿
  3. Ruby

ネクストエンジンAPIエクスプローラーをRails5に対応させる

  • 4
    いいね
  • 0
    コメント

はじめに

この記事はHamee Advent Calendar 2016の19日目の記事です。

TL;DR

ボタン一つでネクストエンジンAPIを試すで作成したアプリをRails4.2から5へアップデートしました。

  1. Rubyのバージョンアップ
    • ruby 2.2.2以上
  2. Railsのバージョンアップ
    • rails gemのアップデートのためにGemfileの更新とbundle update
  3. アプリケーションのRails5対応
    • 設定ファイルなどを更新するためbin/rails app:update

この記事で書いていること

ネクストエンジン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で動作させるためにはGemfileruby '2.2.6'のようにRubyのバージョンを明示的に指定する必要があったので後から追加しています。

Gemfile
-
+ruby '2.2.6'

この状態でbundle installを再度実行するとGemfile.lockにもRubyのバージョンが追記されます。

Gemfile.lock
+RUBY VERSION
+   ruby 2.2.6p396
+

Railsのバージョンアップ

Rubyのバージョンアップが終わったので今度はRails。元々4.2.5を指定していたので5系を指定。

Gemfile
-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とエラーメッセージのにらめっこをしながら最終的に以下の差分に。

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が原因らしいのでアップデートしてみる。

Gemfile
-  web-console (~> 2.0)
+  web-console (~> 3.0)

bundle update web-consoleしてgemを更新した状態でbin/rails s。さあどうだ・・・?

やった!動いた!

ne_api_explorer_rails5.png

コードの書き換え

DBを使っていないこともあって今回は不要でした。モデル層を使うならApplicationRecordなどRails5で登場したクラスなどは作成した方がよいかと思います。

まとめ

Rails4から5への移行を試すならまずは小さなアプリで試すのがよいと思いました(小並感)

宣伝

1ミリたりともRails5の機能は使っていませんが、ネクストエンジンとネクストエンジンAPIと合わせてne_api_explorerをよろしくお願いします。

参考URL