概要
Ruby 開発者のみなさん、Gemfile でちゃんとバージョン指定してますか?
Effective Ruby の第 7 章項目 43 にこう書かれています。
バージョン要件の上限を省略するのは、自分のアプリケーションやライブラリが依存コードの将来のすべてのバージョンをサポートすると公言するようなものだ。
あなたにその覚悟がおありですか? bundle update
してもプロジェクトは壊れませんか?
「でも私全然バージョン指定してないわ…。かといって、ひとつひとつバージョンを調べて指定するの超めんどい…」
という方も安心。Pessimize ならね。
("gem version add auto" でググったらこいつが出てきました。)
使い方
$ gem install pessimize
$ pessimize --version-constraint patch
すると以下の Gemfile が…
# before
gem 'rails'
gem 'responders'
gem 'pg'
gem 'database_cleaner'
gem 'devise'
gem 'cancancan'
なんということでしょう!
悲観的バージョン演算子 ~>
によってしっかりバージョン指定されているではありませんか。
# after (with --version-constraint patch)
gem 'rails', "~> 4.2.4"
gem 'responders', "~> 2.1.0"
gem 'pg', "~> 0.18.1"
gem 'database_cleaner', "~> 1.4.1"
gem 'devise', "~> 3.4.1"
gem 'cancancan', "~> 1.10.1"
なお --version-constraint patch
を省略する、つまりデフォルトでは
# after (default or with --version-constraint minor)
gem 'rails', "~> 4.2"
gem 'responders', "~> 2.1"
gem 'pg', "~> 0.18"
gem 'database_cleaner', "~> 1.4"
gem 'devise', "~> 3.4"
gem 'cancancan', "~> 1.10"
とマイナーバージョンまでの指定となります。
余談
Effective Ruby では、
「悲観的バージョン演算子はファジーなので利用せず、バージョン番号の範囲を明示的に示せ」とも指摘されていますが、
そこまでは厳密でなくてもいいかなと個人的には考えています。