まちいろエンジニアブログ

南池袋のWebサービス開発会社、株式会社まちいろのエンジニアブログです。

Gemfileのバージョンとオプション指定についてまとめてみた

こんにちは、柏谷です。

弊社ではrubyをアプリケーション開発に採用する事が増えてきて、必然的にbundleやgemの知識が必要となってまいりました。

今回は備忘録もかねて、rubyで開発をする際の入り口ともいえるGemfileの記述方法を記事にしました。

Gemfileを作成

普通にファイルを作成してもいいのですが、bundle initすると自動で生成してくれます。

提供元を指定する

Gemfileの最初には提供元を記載します。

source 'https://rubygems.org'
# 認証が必要な場合
source 'https://user@password:rubygems.org'
# プライベートなリポジトリを指定
source 'https://rubygem.machiiro.jp'

その他の提供元(使った事ない)

rubyのバージョンを指定する

続いて、rubyのバージョンを指定します。

ruby '1.9.1'
# パッチレベルを指定する
ruby '1.9.1', :patchlevel => "376"

RubyのバージョンはMAJOR.MINOR.TEENY+PATCHとなっています。 MINORバージョンは1年に1度クリスマスにあがるとのこと。おもしろい文化ですね。

2.1.0以降のバージョンは、Semantic Versioning 2.0.0に乗っ取って更新されています。

必要なGemを指定する

いよいよ、アプリケーションに必要なgemを羅列していきます。

バージョンの指定

# 常に最新のもの
gem 'activerecord'
# バージョン指定
gem "activerecord", "3.0.0",
# バージョン指定・以上以下
gem "activerecord", ">= 3.0.0", "< 3.1.0"
# バージョン指定・メジャーバージョンは変えない
gem "activerecord", "~>= 3.0.0"

必要とするファイルの指定

# 必要とするファイルを指定
gem 'activerecord', '>= 3.1.0', require: 'active_record'
# 必要とするファイルを指定・複数
gem 'activerecord', '>= 3.1.0', require: ['active_record', 'active_record2']

requirefalseに指定すると、アプリケーションでライブラリを使用する際に、明示的にrequire: gem_nameとしなければなりません。

development用に入れているツールには、production用で不要な自動ロードをさせないため指定する事が多いです。

また、gemの名称とrequireするライブラリの名称が異なる際などにもよく利用されます。

http://stackoverflow.com/questions/4800721/bundler-what-does-require-false-in-a-gemfile-mean

環境の指定(group,groups)

個別に指定する場合

# 環境を一つ指定する
gem 'rspec', group: 'test'
# 環境を複数指定する
gem 'rspec', group: [:test, :development]

グループ毎に指定する場合

# デフォルトでアプリケーションに必要
gem activerecord
# 開発に必要
group :development do 
     gem 'rspec'
group :test do 
# テスト環境に必要
group :test do 
     gem 'rspec'
group :test do 
# 本番環境に必要
group :production do 
     gem 'rspec'
group :test do 

bundle installするときに--withoutオプションをつけると、不要なインストールを避ける事が出来ます。

# 全部インストール
bundle install
# 開発用に必要なモノは除いてインストール
bundle install --without development

gemファイルのパスを指定

ローカルに自前のgemなどがある場合に、pathを指定して読み込む事が出来ます。

gem "rails", :path => "vendor/rails"

プラットフォームを指定

gourpとプロジェクトに必要なgemが、rubyのバージョンやwindows環境などプラットフォームによって変わってくる場合は、プラットフォームを指定してインストールするgemを記載する事が出来ます。

bundle installする際の処理系により判断されます。

gem "weakling",   :platforms => :jruby

gitリポジトリを利用する

gemが公な提供元に属していない場合や、提供元で公開されていない最新のバージョンを利用したい場合、gitオプションでgemを指定することで利用する事が可能となります。

githubとbitbucketに関しては、専用のオプションが準備されています。

# git リポジトリを利用する
# HTTP(S)でダウンロードする場合
gem "rails", :git => "https://github.com/rails/rails.git"
# SSHでダウンロードする場合
gem "rails", :git => "git@github.com:rails/rails.git"

# github のリポジトリを利用する
gem "rails", :github => "rails/rails"

# bitbucketのリポジトリを利用する
gem "rails", :bitbucket => "rails/rails"

皆さんもぜひGemfileを使いこなして、快適なrubyライフを送ってください!