状況
Railsで開発をしていて、Gemを使おうとしたが、期待通りの動きではなかったのでforkして開発した。
そしていざプロダクトに取り込もうとして「あれ?あれ?」となったお話。
Gem
https://github.com/wtnabe/jshint4r
https://github.com/amanattou44/jshint4r
現状と対策
Gemの開発方法がよく分からなかったのでプロダクトにfork元を取り込んだ状態で開発しながら進めていた。
そしていざ、完成して、Gemfileに取り込もうとした時にまず、 rubygems.org に登録する必要があると思って、ずっと奮闘していた。
結論から言うと rubygems.org にforkした物は取り込めない。
こういうエラーが出る。
Pushing gem to https://rubygems.org...
You do not have permission to push to this gem.
rake aborted!
じゃあどうするか、と言えばこうする。
gem 'jshint4r', github: 'amanattou44/jshint4r'
こうする事でGitHubを指定する事が出来る。
そして次に bundle install
するとエラーが出て困った。
jshint4r at /プロダクト/vendor/bundle/ruby/2.1.0/bundler/gems/jshint4r-ee196b6af
cd6 did not have a valid gemspec.
This prevents bundler from installing bins or native extensions, but that may not affect its functionality.
The validation message from Rubygems was:
["vendor/jshint/CHANGELOG", "vendor/jshint/Makefile", "vendor/jshint/README.md", "vendor/jshint/jshint.js"] are not files
???となったが、よくよく考えるとこのfork元はgit submoduleを使っていた為、それらが無いよ、との事だった。
こういうの。
最初、submoduleという単語を忘れていた為に結構どハマりした。
単語を思い出したら即解決したし、bundlerスゲーってなった。
これを解決する為にはどうすればいいかは PR#1935 に書いてあるが、
gem 'jshint4r', github: 'amanattou44/jshint4r', submodules: true
とすれば、 git submodule update --init
してくれる。
以上が、開発してからプロダクトの vendor/bundle
に取り込むまでに苦労しました。
所感
やっぱりRails、便利!
あと、Gemに関しては今後も改良して行きたいし、erb, haml, jadeなどにも対応して行きたい。
inlineのjavascript:配下をただぶっこ抜いてるだけなので、ここら辺もリファクタしたいと思う。
jshintも最新の使うようにしたい。
追記
あ、ちなみにHTMLにcompileしてから jshint --extract=auto target.html
って普通の人はすればいいと思うので、これを使うメリットは無いです!
参考URL