21
18

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Pessimize で Gemfile のバージョン指定をサクッと追記

Posted at

概要

Ruby 開発者のみなさん、Gemfile でちゃんとバージョン指定してますか?
Effective Ruby の第 7 章項目 43 にこう書かれています。

バージョン要件の上限を省略するのは、自分のアプリケーションやライブラリが依存コードの将来のすべてのバージョンをサポートすると公言するようなものだ。

あなたにその覚悟がおありですか? bundle update してもプロジェクトは壊れませんか?

「でも私全然バージョン指定してないわ…。かといって、ひとつひとつバージョンを調べて指定するの超めんどい…」

という方も安心。Pessimize ならね。
("gem version add auto" でググったらこいつが出てきました。)

使い方

$ gem install pessimize
$ pessimize --version-constraint patch

すると以下の Gemfile が…

Gemfile
# before
gem 'rails'
gem 'responders'
gem 'pg'
gem 'database_cleaner'
gem 'devise'
gem 'cancancan'

なんということでしょう!
悲観的バージョン演算子 ~> によってしっかりバージョン指定されているではありませんか。

Gemfile
# 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 を省略する、つまりデフォルトでは

Gemfile
# 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 では、
「悲観的バージョン演算子はファジーなので利用せず、バージョン番号の範囲を明示的に示せ」とも指摘されていますが、
そこまでは厳密でなくてもいいかなと個人的には考えています。

21
18
0

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?