Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
19
Help us understand the problem. What are the problem?

More than 5 years have passed since last update.

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

概要

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

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
19
Help us understand the problem. What are the problem?