Railsでbowerを使う場合は、必ずしもbower_componentsをgitignoreしなくて良いと思う

Railsでbowerを使う場合は、必ずしもbower_componentsをgitignoreしなくて良いと思う、という話。

To be or not to be, this is the problem

RailsでJavaScriptのライブラリを利用するとき、Gemになっていないとvendor以下にファイルをコピーしてくるしかないですよね。それだと適切にJavaScriptのライブラリのバージョンを管理できなくなってしまうので、今時だとbower-railsを利用するのが良いと思うのですが、さてここでbower installでコピーされてきたJavaScriptのファイル、つまりbower_componentsの中身をGitの管理下に入れるべきか入れるべきでないか?という問題が発生します。

node.jsのプロジェクトではbower_componentsをgitignoreするのが普通です。それにならってRailsのプロジェクトでもbower_componentsをgitignoreしておき、デプロイ時にはデプロイ先のサーバでbower installを実行した後にrake assets:precompileするという方法もあります。

しかしbowerを使うためにはデプロイ先のサーバでnode.jsが実行でき、更にbowerがセットアップされている必要があるので、bowerを使うためだけにnode.jsを用意するというのも何だか大げさな感じがします。例えばHerokuなら標準のRuby用ビルドパックではもちろんnode.jsはセットアップされないので、カスタムしたビルドパックを用意する必要があります。

そもそもbower_componentsをgitignoreする理由として、

  • bower installすれば必ず同じファイルを取得できるのにバージョン管理下に置くのは不自然。
  • ライブラリをバージョン管理してしまうことで、誰かが編集してしまうリスクが発生する。

といった理由があるのかなと思うのですが、そもそも誰もライブラリのファイルに手を出さなければ問題なさそうな気がします。

  • そもそもnode.jsが本番サーバに配備されている
  • デプロイ用サーバでbower installしたりrake assets:precompileしたものを各サーバにコピーでデプロイしている

といった場合はgitignoreしていても別に問題ないかなと思うのですが、それ以外の場合はただただ話が面倒くさくなるので、別にbower_componentsをgitignoreしなくても良いんじゃないかなと思いました。