Tatehitoの技術メモ

ソフトウェアエンジニアです。いろいろ書きます。

【Rails】bundle install で「--path vendor/bundle」するかしないか問題

今日、こちらのQiita記事を読みました。

qiita.com

--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 オプションはとりあえず付けとけ」という認識が広まっているのだと思います。

qiita.com