実践で学ぶRuby on rails 〜仮説千本ノック〜

プログラマーとして独立するため日々スキルアップに励んでいます。優れたプログラマは仮説を立てるのがうまい。そこを目指して仮説を立てては検証する日々です!!

gemのバージョン指定ってどんな時に必要なの?


はじめに

gemfileでインストールするgemを記述する際、バージョンを指定することがありますが、その結果何が起こるのか、どういう時にバージョンを指定すべきなのか、いまいちピンとこなかったので調べてみました。

# 5.2.3以上、6未満のものしかインストールできない。 '~>5.2.3', '<6.0.0'と意味は同じ。
gem 'rails', '~> 5.2.3'

# 0.4.4以上、.0.6.0未満のものしかインストールできない。
gem 'mysql2', '>= 0.4.4', '< 0.6.0'

# 1.3.0以上のものしかインストールできない(以上あればなんでもいい)
gem 'uglifier', '>= 1.3.0'

まとめ

Aというアプリがあって、このアプリが、0.4.4以上、.0.6.0未満のバージョンのmysql2に対応するよう設計していたとしましょう。 この場合、gemfileにバージョン指定せず、単にmysqlとだけ書くと、bundle install した際には、現在公開されている最新バージョンがインストールされてしまい、エラーが起きてしまう可能性があります。

このため、バージョンによってはエラーが生じる可能性のあるgemは、問題が起きないと確信がもてるバージョンしかインストールできないよう制限をかけているのです。