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']
require
をfalse
に指定すると、アプリケーションでライブラリを使用する際に、明示的に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
ライフを送ってください!