今日、こちらのQiita記事を読みました。
--path vendor/bundle
は、gem のインストール先をプロジェクト固有のローカルに指定するbundle install
コマンドのオプションです。
読んだQiita記事は
--path vendor/bundleのオプションは、付けたい人が付ければよいだけで、開発者全員に強制するようなルールではない
という主張のもと書かれていました。この記事を受けて僕の考えをまとめてみました。
記事の内容を受けた僕の考え
「特別困ったことが無い限り、--path vendor/bundle
オプションは付けない」です。
理由
- 単純にオプションをつけるのが面倒
- vendor/bundleをgitignore書くのが面倒
- RSpecを使ったプログラミング問題を解くときなど、その度にgemをインストールするのは面倒
- bundle installだと既にインストール済のgemはスキップされるので、(たぶん)早い
- つまり、問題が起きないなら
--path vendor/bundle
オプションを付けないに越したことはない
なんとなく安心だからオプション付けてた
Rubyの学習初めのころは--path vendor/bundle
オプションの存在を知らず、 オプションを付けずにbundle install
していました。
しかしある日「異なるgemを必要とする別のプロジェクトを、同じ開発マシンで同時に扱ったらどうなるのか?問題無いのか?」という疑問が湧き、そこで調べて出会ったのが--path vendor/bundle
オプションでした。
- グローバルにインストールすると開発マシンの状態がぐちゃぐちゃになる気がする
- プロジェクトごとにgemを分けておけば、とりあえず変な問題が起こることはないだろう
という理由から、「特別問題は起きてないけど、とりあえず--path vendor/bundle
オプションを付けとこ!」という習慣ができました。
しかし、今回のQiita記事を読んで
- 扱うプロジェクトが変わったら、そのたびに必要なgemを
bundle install
すれば良いだけじゃない?(そのためのGemfile) - Ruby開発経験の豊富なプログラマーの方でも、コマンドの衝突といった問題はほとんど起きていない
- じゃあ、(前述した「理由」の通り、)
--path vendor/bundle
オプション付けないほうが良くない?
と考えるようになりました。
あとがき
誰に強要されたわけでもないし、必ず--path vendor/bundle
しないといけないと思っていたわけでもないし、--path vendor/bundle
のデメリットもある程度理解していました。しかし「なんとなくプロジェクトごとにインストールした方が安心」という理由で使っていました。
Qiitaの技術記事などを読んでいると、当たり前のように--path vendor/bundle
オプションを付けてbundle install
していることが多いです。
それほど「--path vendor/bundle
オプションはとりあえず付けとけ」という認識が広まっているのだと思います。