LoginSignup
19
18

More than 3 years have passed since last update.

Ruby のバージョンアップで気をつけるべきこと

Last updated at Posted at 2019-09-06

はじめに

Ruby 2.4.02.6.2 にアップデートする際につまったことをまとめました。

心構え

Ruby バージョンアップに伴う影響範囲は膨大であることを肝に銘じましょう。
BundleやGemなどの便利なものがありますが、依存性などの関係で動かなくなることがあります。
すんなり移行できることのほうが珍しいです。

Ruby

バージョン定義ファイル

調査のため頻繁に切り替えるので、すべてが同じ値か、想定している値か確認しましょう。

ファイル名 説明
Gemfile Gemの定義ファイル
Gemfile.lock Gemfileから生成する
.ruby-version Rubyバージョン定義

アップデート順序

Rubyのマイナーバージョンを一気に更新することはよろしくないとの有識者からの助言があったので、 2.4.02.5.02.6.2 という段階を踏んでアップデートしました。
実例として、2.4.02.5.0 への更新は成功するが、2.5.02.6.2 でエラーになるケースがありました。
問題切り分けのためこちらも試して見ましょう。

bundle 関連

updateは慎重に

bundle updateは、既存の Gemfile.lockを破棄しGemfileからGemfile.lockを生成します。
ここで問題となるケースが、Gemfileにバージョン指定がない場合です。
その場合、最新リポジトリを取得しますが、依存性の関係で動かなくなることがあります。
bundle コマンドの影響の小さいものから試してみましょう。

bundle オプション

上は影響度が低く、下ほど影響度が高いです。

コマンド名 説明
bundle install Gemfileにはあるが、Gemfile.lockに記載のないものをインストールします
bundle update {gem名} 指定したGemのみを更新します
bundle update GemfileからGemfile.lockを生成します。 現行のGemfile.lockは破棄します。

rbenv: bundle: command not found

Rubyのバージョンを変更すると、bundleが見つからなくなることがあります。

# エラーコード
$ bundle update
rbenv: bundle: command not found

The `bundle' command exists in these Ruby versions:
  2.6.2

こういった場合は、bundle手動インストールしましょう。

gem install bundler

エラーの調査方法

正常に動作している環境を確保する

まず正常動作する環境を確保しましょう。
これができると「実行環境の問題」か、「コードの問題」か切り分けが出来るようになります。
別環境で正常動作しているものを見つけ、自分の環境で動作させてみましょう。
新規Railsアプリケーションを構築 でもいいと思います。

依存性を確認しよう

Gemの動作要件として、別のGemが指定されていることがよくあります。
Gemの最新バージョンを取得すると、現行バージョンと比較して次のようなケースがあります。

  • 要求するGemのバージョン指定が上がった
  • 要求するGemが、不要になった
  • 要求するGemが、差し替えられた

ややこしいのですが、rubygems.org のサイトで検索を行い、runtime 依存性 を確認してみましょう。
https://rubygems.org/
別環境で動いているコードがあるのでしたら、当該部分のGemfile.lockの記述をあわせてみて動作確認してみましょう。

Gem公式ページの確認

Gemで提供しているライブラリは、Githubで管理されていることが多いと思います。
公式ページを確認し、不具合issueがないか確認しましょう。修正中や本番リリース待ちだったりします。
急いでいる場合は、Gemfile.lockを編集して動作確認できたバージョンまでダウングレードることで対応しましょう。

19
18
1

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
19
18