さんさろ

さんさろ

プロダクトエンジニアの雑記&技術、たまにドイツ

bundle installでプロジェクトのvendor以下にgemを入れる

やっぱvendor下に入れたいなぁ

以前記事で、 http://binthec.hatenablog.com/entry/2018/01/27/230500binthec.hatenablog.com

spina というgemになってる?CMSを入れたのですが、vendor 下にあると思ったら無くて、色々探してみたらどうやら rbenv 配下に入っているらしくて。

/user/local/rbenv/versions/2.4.3/lib/ruby/gems/2.4.0/gems

なんでそんな所に……?と思ってTwitterでぼやいていたら、親切な方がプロジェクトの vendor 下に入れる方法があるんだよーと教えてくれたので、そっちの方法で入れてみることにしました。

ついでに、rbenv は /user/local の下にあったんですが、結局ホームディレクトリの /home/vagrant 以下に入れ直しました。


vendor 下に入れてみる

--path vendor/bundle を指定し、railsアプリケーション用のディレクトリ配下のvendor/bundleディレクトリにgemをインストール

これにより、gemをrailsプロジェクト毎に管理できる!!

--jobs=4 を指定するとbundle installを並列処理で実行できる

参考 rails newの先輩オススメ手順 - まえとうしろ

とのことなので、

$ bundle install --path vendor/bundle --jobs=4

を Gemfile がある所で叩いてみます。

$ pwd
/home/vagrant/common/hoge_project/vendor

$ ls -la
合計 0
...
-rw-r--r--. 1 vagrant vagrant   0  1月  6 21:34 2018 .keep

空っぽだった中身が……

$ ls -al
合計 0
...
-rw-r--r--. 1 vagrant vagrant   0  1月  6 21:34 2018 .keep
drwxr-xr-x. 1 vagrant vagrant  96  2月  7 22:07 2018 bundle

あ、なんか出来てる。

もりもり下の方まで下っていくと……

$ pwd
/home/vagrant/common/introduction/vendor/bundle/ruby/2.4.0/gems

$ ls -la
合計 0
drwxr-xr-x. 1 vagrant vagrant 2432  2月  7 22:13 2018 .
drwxr-xr-x. 1 vagrant vagrant  288  2月  7 22:13 2018 ..
drwxr-xr-x. 1 vagrant vagrant  192  2月  7 22:12 2018 actioncable-5.1.4
drwxr-xr-x. 1 vagrant vagrant  192  2月  7 22:12 2018 actionmailer-5.1.4
drwxr-xr-x. 1 vagrant vagrant  192  2月  7 22:12 2018 actionpack-5.1.4
drwxr-xr-x. 1 vagrant vagrant  192  2月  7 22:12 2018 actionview-5.1.4
.
.

おーめっちゃ増えた。階層はやっぱ深いけど、でもプロジェクト内にある方がなんか馴染みがある。それに合理的だと思う。

この辺はもう、Rails やってる人達にしてみたら「何を当たり前の事を今更…」レベルなんだろうな……先は長い。


余談

gem というのが composer のようなものと思っていたら、どうやら若干ハズレていて、bundler というのが互換性などを見ながら gem を管理してくれているものみたい。

bundler本体以外のgemは基本的にbundler経由でインストールを行うのがおすすめです

とのこと。

ふーん、なるほど。了解です。

参考: Bundlerの使い方 - Qiita