はじめに
RailsアプリにGemをインストールするときに使うGemfileですが、意外とその詳しい書き方は把握していないという方も多いと思います。例えば、インストールするバージョンを「2.1.2以上でパッチバージョンのみ上げることを許容」などと指定する方法や、ソースとしてGitHubの特定のブランチを指定する方法などは、よく使う割に曖昧になりがちです。
本記事では、Gemfileを書くときによく使うものの「そういえば、どう書くんだっけ?」ということをまとめています。
Gemfileでよく使う書き方
Gemのバージョン指定
Gemfileでは、インストールするGemに対して以下のバージョン指定方法ができます。
指定方法 | 意味 |
---|---|
X.X.X |
X.X.X 固定 |
>= X.X.X |
X.X.X 以上 |
>= X.X.X, < Y.Y.Y |
X.X.X 以上Y.Y.Y 未満 |
~> X.X.X |
明記したところ以下のバージョンが上がることのみ許容 |
最後のチルダ(~
)を使ったバージョン指定方法がわかりにくいので補足します。
「明記したところ以下のバージョン」とは、指定したバージョンの右端のバージョンのことを指します。X.Y.Z
だったらZ
、X.Y
だったらY
、X
だったらX
が「明記したところ以下のバージョン」となります。指定したバージョンの段階別にまとめると以下の通りとなります。
指定バージョン | 意味 | 別の書き方 |
---|---|---|
~> 1.2.3 |
1.2.3 以上1.3.0 未満 |
>= 1.2.3, < 1.3.0 |
~> 1.2 |
1.2.x (1.2 以上1.3 未満) |
>= 1.2, < 1.3 |
~> 1 |
1.x (1 以上2 未満) |
>= 1, < 2 |
ちなみに、package.json
などで使えるキャレット(^
)を使ったバージョン指定方法は、Gemfileではサポートしていません。
バージョニング表記について
補足として、簡単にバージョニング表記の意味について説明しておきます。
表記 | 意味 |
---|---|
0.0.x |
パッチバージョン。APIの変更のない実装レベルの修正。バグフィックス等。 |
0.x.0 |
マイナーバージョン。後方互換性をもったAPIの変更など。新機能、新APIの実装等。 |
x.0.0 |
アップデートするとユーザーの実装が動かなくなるような後方互換性のない変更を含む場合。 |
Gitリポジトリの指定
Gemfileはファイルの先頭でグローバルなソースを指定します。
source "https://rubygems.org"
Gemのインストールにグローバルなソースを使うのではなく、特定のGitリポジトリを指定することができます。
gem 'impressionist', git: 'git://github.com/charlotte-ruby/impressionist.git'
オプションで特定のタグやブランチも指定できます。
オプション | 意味 |
---|---|
tag: 'tag_name' |
タグを指定 |
branch: 'branch_name' |
ブランチを指定 |
ref: '46a582ff8cd3496da64f174b30b91f9d97e86643' |
コミット(リファレンス)を指定 |
GitHubリポジトリの場合はgit
の代わりにgithub
が使えます。git
と比べて簡略表記が可能です。もちろんタグやブランチも指定できます。
gem 'impressionist', github: 'charlotte-ruby/impressionist', branch: 'branch_name'
インストール環境の指定
byebug
など特定の環境でのみ必要となるGemがあります。こういったGemのためにインストール環境を指定することができます。
group :development, :test do
gem 'byebug'
end
特定のGemに対して直接指定することもできます。あまり使いませんが、参考までに。
gem 'byebug', group: [development, test]
Bundlerを実行する際、--without
オプションをつけることで、インストールすべきでない環境を明示的に指定することができます。
$ bundle install --without development test
--without
オプションを指定すると、Bundlerは指定された環境を記憶します。次にBundlerを実行するときは、--without
オプションを指定しなくても記憶している環境を除いて実行されます。
指定された環境は.bundle
ディレクトリ配下のconfig
ファイルに書き込まれます。もし、指定した環境をリセットしたいという場合、このファイルを削除することでリセットすることができます(次に--without
オプションを指定したときに再作成される)。
config
---
BUNDLE_WITHOUT: "production"
まとめ
Gemfileには今回紹介した書き方以外にももっとたくさんの書き方がありますが、その中でも特によく使うであろう書き方をピックアップしてまとめてみました。
Webページの記述されているコードをコピペする方法は楽ですが、コピペばかりしているといつまで経っても書き方を覚えることができません。よく使う書き方くらいは何も見ずとも書けるようになりたいものです。
本記事を参考にして、Gemfileの書き方を覚えていただければと思います。