gemパッケージを作ってみた。〜 RubyGems.org へのpushまでの道のり 〜
gemパッケージを作るのに非常に苦労したので忘れない内にメモです。
gemパッケージの作り方なんて全く知らない状態から始めたので、間違っている箇所があるかもしれません。
もし見つけたらツッコミよろしくです。
gemを作るのに便利なツール
gemspecファイルというのが重要で面倒なファイルらしい。
一々自分で書くのは結構大変らしく、雛形を作ってくれるgemパッケージが存在する。
下記した二つが有名所らしい。
二つを併用する事もあるみたい。
jeweler
gemパッケージの雛形を作ってくれる。
しかも
$sudo jeweler --rspec --create-repo projectname
この--create-repoオプションで、GitHub上のリポジトリも作ってくれる。
凄い!
その前に、
$git --global github.name "UserName" $git --global github.token "123123123123123123123123123123"
としておかないと怒られます。
しかし、jewelerを実行しようとすると
Permission denied (publickey).
なんて怒られる。
GitHub上にリポジトリを作ろうとするとキレるらしい、DV反対!
jewelerでなく、普通にやった場合は問題ないんだが、、、
ググった結果、新しいssh鍵を登録し直したら良いらしい。
・・・そんな簡単に鍵作り直せっかよ!
と、いう訳で今回はjewelerは見送りました。
newgem
今回の本命、これでgemパッケージを作りました。
こちらも雛形を作ってくれます。
とりあえず、次に進みましょー!
まずこれやろう!
gem のヴァージョンアップ
RubyGems.orgの長所は
$gem push projectname-version.gem
これだけでgemパッケージを登録できる点です。
しかし、このpushが現在、gemのversionが1.3.6以降でないと駄目の様です。
自分は1.3.5だったのでversionUPしました。
1.3.6以降の方は読み飛ばしてください。
注意してください!
versionあげるとインストールしたパッケージが空になります!
$sudo gem install rubygems-update $rubygems-update =>Pathが通っていないので、フルバスで実行。 $sudo /var/lib/gems/1.8/bin/update_rubygems sudo: unable to resolve host vivienne RubyGems 1.3.7 installed === 1.3.7 / 2010-05-13 NOTE: http://rubygems.org is now the default source for downloading gems. You may have sources set via ~/.gemrc, so you should replace http://gems.rubyforge.org with http://rubygems.org http://gems.rubyforge.org will continue to work for the forseeable future. New features: `gem` commands `gem install` and `gem fetch` now report alternate platforms when a matching one couldn't be found. `gem contents` --prefix is now the default as specified in --help. Bug #27211 by Mamoru Tasaka. `gem fetch` can fetch of old versions again. Bug #27960 by Eric Hankins. `gem query` and friends output now lists platforms. Bug #27856 by Greg Hazel. `gem server` now allows specification of multiple gem dirs for documentation. Bug #27573 by Yuki Sonoda. `gem unpack` can unpack gems again. Bug #27872 by Timothy Jones. `gem unpack` now unpacks remote gems. --user-install is no longer the default. If you really liked it, see Gem::ConfigFile to learn how to set it by default. (This change was made in 1.3.6) RubyGems now has platform support for IronRuby. Patch #27951 by Will Green. Bug fixes: Require rubygems/custom_require if --disable-gem was set. Bug #27700 by Roger Pack. RubyGems now protects against exceptions being raised by plugins. rubygems/builder now requires user_interaction. Ruby Bug #1040 by Phillip Toland. Gem::Dependency support #version_requirements= with a warning. Fix for old Rails versions. Bug #27868 by Wei Jen Lu. Gem::PackageTask depends on the package dir like the other rake package tasks so dependencies can be hooked up correctly.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- -
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
作ってみよう!
$newgem hoge だけでも作れるけど、
$newgem projectname -s -b projectname -T rspec -e "author@email.com" -a "author"
こうしておけば、色々と楽。
Rakefileにauthor(我々の名前)やmailを書いておいてくれます。
んで、今回は雛形のままpushします。
$cd projectname $rake package
errorでます、はい。
Rakefileの23行目を
Dir['tasks/**/*.rake'].each { |t| load t } から Dir['tasks//*.rake'].each { |t| load t }
にします。
んで、もう一個。
tasks/rspec.rakeの20行目を
t.spec_files = FileList['spec/**/*_spec.rb'] を t.spec_files = FileList['spec/*_spec.rb']
とします。
これで
$rake package
が成功します。
んで、
pkgディレクトリと、ディレクトリないに
projectname-0.0.1
projectname-0.0.1.tgz
projectname-0.0.1.gem
が、出来ます。
んで
$gem push pkg/projectname-0.0.1.gem $sudo gem install projectname
これで終わり!
段々疲れて、gdgdになっててすいません。
ちなみに、gemパッケージの名前の付け方
The Ruby Way
第16章 コードのパッケージ化と配布
16.2.2 RubyGmes一般的なgemファイルには、短くてわかりやすい一意な名前、ハイフン(-)、標準のバージョン番号からなる名前が付いています。
バージョン番号は、ほぼ世界共通となった「. . 」形式となっています。