【Rails】GemfileのVersion指定方法

Rails tutorialをやり始めました。
その時の気づいたこととか備忘録です。
今回は第1章1.3.1 Bundler第1章 ゼロからデプロイまで | Rails チュートリアル でのGemfileのversionの指定方法について。

TL;DR

>= : gem 'Hoge', '>=x.y.z'
x.y.z以上のVerが最新の場合、それをインストールする。(メジャーアップデートも行う。)

~= : gem 'Hoge', '~= x.y.z'
マイナーアップデートは行うが、メジャーアップデートは行わない。

gem 'Hoge', '~= 1.2.4'
v1.2.5となった際はアップデートを行うが
v1.3.0 になってもアップデートは行わずv1.2.5のまま

Version指定

Gemfileのversion指定が曖昧の場合

環境構築する際に、Gemfileのバージョン指定は曖昧のままでもできますが、
gemがアップデートした際にローカルがアップデートされないことがあります。

マイナーアップデートで止めたい理由

自分がPG始めたての頃は、なんかGemfileが勝手に出来上がってるけど、動くから
っと思ってこの辺りは曖昧でしたが、
~と>の違いがわからないとメジャーアップデートされなかったり、
勝手にメジャーアップデートされて動かなくなることもあります。


メジャーアップデートされるとPS2からPS3になることもあります。


なのでアップデートをマイナーアップデートで止めておきたいことは多々あります。

Version方法

ということで、Versionの指定方法です。

メジャーアップデート

メジャーアップデートも含めたい場合
gem 'hoge', '>=1.2.3'みたいな感じにすれば
bundle update(すでにインストール済みのgemをupdateする場合)
もしくは
bundle install時にver1.2.3以上のgemがある場合はメジャー、マイナー問わずそのversionでインストールします。

マイナーアップデート

マイナーアップデートのみの場合
gem 'hoge', '~=1.2.3'としたら、
ver1.2.4がある場合はそちらをインストールしますが、
ver1.3.0以上があっても、それはメジャーアップデートとして、そちらはインストールしません

部分的なメジャーアップデート

またver1.2.3以上でかつ1.3.xをインストールしたいが、1.4.x以上はインストールしたくない場合は
gem 'hoge', '>= 1.2.3', '< 1.4'とします

ヴァージョン指定

またメジャー、マイナーバージョンに問わず、Versionを指定したい場合は
gem 'hoge', '1.2.3'とします。

参照

railstutorial.jp