Edited at

bowerパッケージをbundlerで管理するRails Assetsを使ってみた

More than 5 years have passed since last update.

最近、Rails Assetsというサイトが話題になりました。

Rails Assetsは、Gemfileにsource 'https://rails-assets.org'を追記することで、bowerで管理しているパッケージをgemにラップしたものをbundlerでインストールできるサービスです。しかもbower.jsonの依存関係をパースして解釈してくれます。

Railsで利用するJSのライブラリをどうやって管理して更新していくのか、という悩ましい問題に対する一つの解決策になるかもしれません。

RailsでJSのライブラリを扱う方法として、今まで以下のようなやり方を試したことがあります。


  • vendor/assets/javascripts以下にそのまま配置する

  • vendor/assets/javascripts以下にsubmoduleをcloneしてくる

  • gem化されているrails-backboneのようなものを利用する

  • bowerでインストールしてassets_pathを設定する

概ね、これらの組み合わせでなんとかしてる、というのがほとんどではないかと思います。

vendor以下に直接配置するのは、バージョンアップが非常に面倒臭くなるので、gistレベルのちょっとしたスニペットぐらいならアリかなと思います。

submoduleはgithubで管理されているものなら行けそうな感じですが、依存関係の自動解決ができないこと、submodule自体が若干運用し辛いことが少し難点です。

gem化されているものはassetsのパスも面倒見てくれるので、利用はしやすいのですがgemのメンテに縛られて、JSライブラリ自体のバージョンに追い付いていない場合があります。

forkして何とかすると、それはそれで追従が面倒です。

bowerはnode.js製のJSパッケージ管理システムです。これでプロジェクトで利用するJavaScriptをまとめてインストールする方法は、JSのライブラリ自体の管理はやりやすくなるのですが、Railsで使う際のパス設定が煩雑になることと、余計なファイルが混じるのが難点です。後、nodeの環境が無い場合、困ります。

gruntと組み合わせるとかすれば、いい感じにやれそうな気はするけど、あんま分からない…。

という感じで、私は中々良い方法が見つかってません。

そこにやってきたrails-assets.orgです

今、現在bowerでインストールしているJSのライブラリがいくつかあるので、それを利用できるか試してみました。

手順としては、sourceの定義を追加して、サイトの説明通りにgemの定義を書けば良いだけです。

gem 'rails-assets-backbone.collectionView'

ただ、今現在はこれだけでは上手くいかない時があります。

サイトの説明によると、Gemfileに書かれたものを自動でgemにコンバートするのは無理のようです。

またbowerで検索できるパッケージ全てを網羅しているわけではありません。

そこでどうするかというと、手動で変換処理を依頼することができるようになっています。

サイトに右上にあるComponent listという所から、rails-assets.orgが提供しているbowerパッケージのリストが検索できます。

ここで検索して存在しないbowerパッケージはフォーム下部にあるConvertボタンをクリックする事で変換処理を依頼できます。

変換にはしばらくかかりますが、数分ぐらいで反映されました。

反映された後は、説明書き通りにgemとしてインストールできます。

読み込みの際の注意点としては、一部JSライブラリ側のパッケージ定義が古いままだったり充分でない場合、サイトの案内通りのパスではrequireできない事があります。

もし、上手くrequireできない時は、インストールされたgemのディレクトリを開いてどういう配置になっているか確認してみましょう。

使ってみた感想としては、bowerを使った半手動より大分良さそうだし、rails-なんたらというgemに縛られなくて済むので、結構良い感じです。しかも、node.jsの実行環境が必要無い。

まあ、そもそもbowerパッケージだけで全部完結するような世界にはなってないのが多少残念ですがw

とりあえず、しばらくrails-assets.orgを利用して運用してみたいと思います。