Help us understand the problem. What is going on with this article?

いちいちbundle execしたくない 決定版

More than 3 years have passed since last update.

はじめに

Gemfileを使ってgemを管理してるプロジェクトで、日常的にbundle exec 何々ってやってて、alias be='bundle exec'とかしてるけど、beすら打つのが面倒、って状況よくありますよね。

結論から

2013/12/26にリリースされたRubyGems 2.2.0以降であれば、環境変数でRUBYGEMS_GEMDEPS=-とすることでbundle execを使わなくてもGemfileを読んでくれる。

少し追記

RUBYGEMS_GEMDEPSは"gem dependency file"へのパスを指定する機能。RUBYGEMS_GEMDEPS=MyGemfileであればカレントディレクトリからMyGemfileを読むことになる。カレントディレクトリからの相対パス、絶対パスともに使用可能。存在しないファイルを指定してもエラーは出ないので注意。

"-"だけが特別な指定方法でこれの場合、カレントディレクトリからgem.deps.rb,Gemfile,Isolateのいずれかを探し、見つからなければ親ディレクトリからこの3つを、まだなければ親の親から、と祖先のディレクトリをたどって探す。

またbundlerのGemfileで使えていたすべての記法が使えるわけではない?みたいなのでそこもご注意。

以下蛇足

rvm環境を作り直してて、bundle exec省く設定どうするんだっけとググると、
.rvm/hooks/after_cd_bundlerとbundle install --binstubsを組み合わせる方法が出てくる。
ところがこれやってると、bundlerからhttps://github.com/mpapis/rubygems-bundler 使えって言われた。

早速見に行くと一番上に、

Generally, this gem is not needed on RubyGems >= 2.2.0. Simply set the RUBYGEMS_GEMDEPS environment variable to either the path of your Gemfile or - to auto-discover in parent directories.

とあった。

RUBYGEMS_GEMDEPSをググる。

RubyGems can check for gem dependencies files (gem.deps.rb or Gemfile) when rubygems executables are started and uses the found dependencies. This means rake will work similar to bundle exec rake. To enable this set the RUBYGEMS_GEMDEPS environment variable to the location of your dependencies file.

http://blog.rubygems.org/2013/12/26/2.2.0-released.html

If you set it to be RUBYGEMS_GEMDEPS=- (minus sign), it will look for a gemfile in the current directory (and deeper directories too, I think).

http://www.reddit.com/r/ruby/comments/1trfxf/rubygems_220_released/

2013/12/26あたりに導入された機能らしい。日本語情報はびっくりするほどなかった。

早速試してみる。

gem -v
echo "puts 'hello gemfile.'" > Gemfile
ruby -e '' # なんもでない
RUBYGEMS_GEMDEPS=- ruby -e '' # hello gemfile.てでるから読まれてる
mkdir a
cd a
RUBYGEMS_GEMDEPS=- ruby -e '' # rakeみたいに親からも読まれるのでhello gemfile.がでる

ということで、どうやら読まれているらしいという結論に至る。RubyGemsの機能なのでrvmとかrbenvに依存しない、と思う。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away