しめ鯖日記

swift, iPhoneアプリ開発, ruby on rails等のTipsや入門記事書いてます

bundle exec について詳しく調べてみた

会社でrake db:migrateの前にbundle exec使うと動くよー、って教わったけどなんで動くようになるか良く分からなかったので調べてみました。

bundle execってそもそもなんなのか

調べた所 bundle exec は現在のGemfileを見て最適なGemを使ってくれるオプションらしい。 要するにrakeとかが複数バージョン入ってるとrake db:migrateの時にどのバージョン使えばいいか分からなくて困る。 けど bundle exec を付けるとGemfileを見て最適なrakeを選んでくる。って物みたいです。

実際に試してみた結果

実際に複数バージョンのrakeが入ってる場合はどうなるか試してみました。 結論から言うと普通にインストールした場合はbundle exec使わなくても大丈夫でした。 環境はrakeの10.4.2と10.4.0が入ってる状態。 その時にGemfileでrake10.4.2を指定しているrailsアプリでrake -Vを打ったら10.4.2と表示、10.4.0を指定しているrailsアプリでrake -Vを打ったら10.4.0と表示してくれました。 要するに普通に開発してれば bundle exec はなくても大丈夫そうでした。

特定パスにgemを入れた場合

上のようなケースでは大丈夫なのですが、bundle installでパスを指定した場合はbundle execが必要になってました。 bundle installをする際に、bundle install --path local_gemsと言ったように特定パスにgemを入れる場合は自動で見てくれません。 その際は bundle exec が必要になってくるみたいです。

まとめ

今回はbundle周りの挙動を少し追いかけました。 パス指定のinstallとか全く知らなかったので勉強になりました。 機会あればbundle execを省略する方法を調べてみます。