[ruby] Bundler4つの便利な使い方(初期化、インストール、省略する設定など)


Ruby(Rails)での開発にあたり、開発環境(エディタやツールなど)の調査や試用をしていました!!
その中で、パッケージ管理ツールのBundlerのサブコマンドやオプションでこれはいいと思ったものについてまとめてみたいと思います。間違いなどあればご指摘お願いいたいします。

前提としてRubyは rbenv,ruby-build でビルドした環境です。

まず、Bundlerとは

Rubyのパッケージを管理するもの。
Gemfileというファイルにパッケージ名、バージョンを記述してgemのライブラリを管理出来ます。また、グループ化などもでき、環境に応じてgemを管理することができます。


次から3つの便利な使い方です。

その1 初期化コマンド

とても簡単で、initサブコマンドを実行するだけです。

    % bundle init

このコマンドを実行したら、以下の内容で「Gemfile」のデフォルトファイルが生成されます。

Gemfileの中身

# A sample Gemfile
source "https://rubygems.org"

# gem "rails"

その2 インストールコマンド

基本的には「bundle install」というコマンドを実行すればGemfileから該当のgemをインストールしてくれるのですが、色々とオプションを設定すると環境依存がない形でインストール出来ます。

    % bundle install --path=vendor/bundle --binstubs=vendor/bin

–path と –binstubs という2つのオプションを指定しました。

  • [–path]
    指定したディレクトリへGemをインストールします。指定しない場合はrbenvのグローバルな領域へインストールされます。
    上記の場合、カレントディレクトリに「vendor/bundle」というディレクトリが掘られ、インストールされます。

  • [–binstubs]
    指定したディレクトリへコマンドとなるスクリプトを配置します。指定しない場合はカレントに 「bin」というディレクトリが出来てそれいかにスクリプトが置かれます(※1 注意が必要)
    上記の場合、「vendor/bin」というディレクトリにスクリプトが配置されます。
    「bundle_bin」というディレクトリ名を指定するのも多いようですが、自分はvendor/binとしてインストールしました。

  • [–without]
    ここでは指定していないが、以下のようにwithooutに設定するとtest , development グループに記述したgemのインストールを除外する。  

    % bundle install --without test development

(※1) Rails4では–binstubsでデフォルトで指定されるbinディレクトリだと不都合が起きるようです。rails3までで使われていた「script」ディレクトリがなくなり、「bin」ディレクトリが代わりにできるようになったからだそうです。
* Rails 4.0 と bundler install –binstubs について
* Rails4から–binstubsが使えなくなる件

その3 設定を確認するコマンド

上記のような 「–path」や「–binstubs」などの設定を確認するコマンドです。
「bundle config」

    % bundle config
    Settings are listed in order of priority. The top value will be used.
    
    path
      Set for your local app (/PATH_TO_PROJECT/.bundle/config): "vendor/bundle"
    
    bin
      Set for your local app (/PATH_TO_PROJECT/.bundle/config): "vendor/bin"
    
    disable_shared_gems
      Set for your local app (/PATH_TO_PROJECT/.bundle/config): "1"

その4 bundle exec コマンドを省略する件

bundle execを使わずに済む方法(rbenv編) の記事を参考にしてみて、rbenv-binstubsというプラグインを入れてみた。

    % mkdir ~/.rbenv/plugins
    % cd .rbenv/plugins
    % git clone git://github.com/ianheggie/rbenv-binstubs.git

これで以下のように該当プロジェクトでbundle exec を省略して rails などのコマンドを実行するとbundleでインストールしたものが利用できる。

    % cd RAILS_PROJECT_DIR
    $ rails --version
    Rails 3.2.13

しかし、、、これだと「–path=vendor/bundle」など –path でbundleのインストールディレクトリを指定した場合は利用でいないみたいだ。。

    ↓これだとコマンドが読み込めない
    % bundle install --path=vendor/bundle --binstubs=vendor/bin
    
    ↓このようにすると使える(グローバルにインストール)
    % bundle install --binstubs=vendor/bin

これはおそらくグローバルに入っていないとrbenvのディレクトリへのパスが通ってない状態なので、インストールしたプラグインが利用することができないためです。
そもそも以下のようにrailsコマンドを打ってもコマンドが見つからないというエラーとなる。

% rails --version
zsh: command not found: railss

グローバルに何でもかんでも入れたくないので、最終的に以下のように明示的にパスを設定することで解決しました。

export PATH=./vendor/bin:$PATH

RVMでの利用方法
RVM の after_cd_bundler というフックスクリプトを利用することができるそうです。
http://qiita.com/items/a1fbac19686a8fcd2e34


おまけ

以下のようにBundleで利用するgemがどの領域のgemを利用しているか確認する場合、以下のコマンドで確認できます。

% rbenv which pry
% bundle show pry

インストール可能な gem を探すには

hogeってキーワードに引っかかるパッケージ一覧出す
% gem search --remote hoge
省略形
% gem search -r hoge

ネットワークからパッケージを探して詳しく一覧で出す(現在最新のバージョン)
% gem search -rd hoge

ネットワークからパッケージを探して詳しく一覧で出す(過去バージョンも出力)  
% gem search -rda hoge 

【FaceBookでコメント】

comments

Powered by Facebook Comments

[ruby] Bundler4つの便利な使い方(初期化、インストール、省略する設定など)」への1件のフィードバック

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です