いまさら聞けないBundler復習+覚えておきたいコマンド群


いまさら聞けない、でも理解しないわけにはいかないBundlerについてまとめてみました。

Bundlerとは?

Rubyにおける依存関係管理の仕組み。
アプリケーションで使用するgemパッケージを定義し、依存関係を解決するツール。
Javaでいうgradle、JavaScriptでいうnpm、SwiftでいうCocoaPod。

依存関係はGemfileに記述します。

bundler自体のインストール

gem install bundler

ちなみに、bundlerの実行は「bundler」というコマンドではなく「bundle」というコマンドであることに注意しましょう。

Gemfileの作成

bundle init

でGemfileを作成できます。

Gemfileの編集

source 'https://rubygems.org'

# 使用するパッケージを記述していく
gem 'rails','>=5.0.0' #railsの5.0.0以上を使用。

依存パッケージをローカルにダウンロードする

最初の一回だけ以下のコマンドで実行。

bundle install --path vendor/bundle

これで、プロジェクトルート以下のvendor/bundleにgemがダウンロードされます。

以降、gemのアップデートなどは

bundle install

でOK。

プロジェクトの実行

bundle exec (実行したいコマンド)で、bundleで入れたgemパッケージについての依存関係がすべて解決された状態でコマンドを実行できます。

bundle exec pry #bundle環境下でのpryの実行

使用しているライブラリをすべて表示する

例えば、RailsをGemfileに追記した場合、Railsが依存しているライブラリもすべて表示されます。

gem list
bundle list
bundle show #bundle listのエイリアス

使用するライブラリのスコープを分ける

groupを用いて、gemパッケージを使用するスコープを分けることができます。

Gemfile

group :test do
  gem 'rspec' #テストのときのみRSpecを使用する
end

gemを落としてくる取得先を指定

gemはRubyGems以外からも取得することができます。

例えばgitからクローンしてくる場合は以下のように記述します。

gem 'sinatra',:git => 'https://github.com/sinatra/sinatra.git'

さらに、第三引数に

  • :branch => ‘ブランチ名’ でブランチを指定して取得
  • :tag => ‘タグ名’ でタグを指定して取得
  • :ref => ‘コミットハッシュ’ で指定したコミットのものを取得

などを指定することで、柔軟にバージョンを管理することができます。

Gemfile.lockの取り扱い

Bundlerでインストールされるgemパッケージの依存関係の解決結果とバージョンを固定します。

複数人で開発する場合、使用しているgemのバージョンを統一するため、Gemfile.lockはバージョン管理することが推奨されます。

尚、明示的に依存関係を再度更新する場合は

bundle update

を実行。

Bundlerで管理しているgemパッケージの動作確認

bundle console

を実行することで、gemパッケージをすべて読み込んだ状態でのirbが使用できます。

gemプロジェクトの作成

bundle gem project_name

上記コマンドを実行することで、Ruby標準のプロジェクト構成の雛形が作成されます。