このエントリは「Ruby Advent Calendar jp: 2010」の19日目です。前日の記事はno6vさんの「Time#strftime / Time.at」でした。明日はm_kawatoさんの予定です。


というわけで今年は2つAevent Calendarに参加していて、その2番目の記事。Emacsで書いた記事も細かすぎるネタで恐縮したものだが、こっちは一転して大それた提案になっている。それはそれで恐縮なのだが、おつきあいいただければ幸いである。

hoeとrubygems.org

以前「hoeでrubygemを作り「zenra」を公開する」という記事を書いた。hoeを使ってrubygemsを作り、rubyforgeとrubugems.orgで公開しちゃおうぜ、という内容。しかし、今時はもうrubyforge使わなくてもいいんじゃね?ということで、hoeから直接rubygems.orgにpushする方法を調べてみた。

…と言っても、rakeタスクの中にgem pushしてくれるタスクがあるのでコマンドをひとつ叩くだけ。あらかじめrubygems.orgのアカウントを取得していれば、初回のpush時に登録したメールアドレスとパスワードを入力すればおしまい。

ここでは「pebbles」というgemをpushしてみる。

% rake release_to_gemcutter VERSION=0.1.0
(snip)
mv pebbles-0.1.0.gem pkg/pebbles-0.1.0.gem
/path/to/ruby -S gem push pkg/pebbles-0.1.0.gem
Enter your RubyGems.org credentials.
Don't have an account yet? Create one at http://rubygems.org/sign_up
   Email:   your_email@example.com
Password:
Signed in.
Pushing gem to RubyGems.org...
Successfully registered gem: pebbles (0.1.0)

これだけ。ちょっと待つと…

% gem search -r pebbles

*** REMOTE GEMS ***

pebbles (0.1.0)
pebbles_audio_files (1.0.5)

これで、gem install pebblesでインストールできるようになる。

先日のRubyConfで、Rails開発者のEric HodelさんがLTをした(らしい)。rubygemsのネーミングルールについての提言で、その内容がblogにまとまっていたのを読んだ。

ざっくり言うと「単語の連結は_(アンダースコア)で、機能の連結は-(ハイフン)でやりましょう」ということ。

例えば「my_gem」という名前のrubygemsは「reruire ‘my_gem’」として使う。一方「net-http-persistent」という名前のrubygemsは「require ‘net/http/peristent’」として使う。

rubygemsには名前空間の機能がないので、無秩序に作るとトップレベル(?)にいろんなgemが存在してしまう。そこで、ハイフン区切りのプレフィクスを決めることで「rubygemsの名前空間」的な使い方をしませんか?というお話。

pebbles : rubygems版JOKE namespaceの提案

で、早速だけど。ジョークで作ったrubygemsは、「pebbles」というプレフィクスをつけませんか?という提案をしたい。

これはperlの「Acme::」的なもの、つまりジョーク専用の名前空間を実現したくて考えたことである。以前の記事ではzenraをそのままpushしてしまったので、gem install zenraでインストールできてしまうし、require ‘zenra’で使えてしまう。これはちょっと気が引けるな…と思ったのである。

名前を「pebbles-zenra」とし、使うときは「require ‘pebbles/zenra’」とすることで、名前空間を汚している後ろめたさから解放されたい!というのが狙いである。

ちなみにpebbleは「石ころ」とか「小石」の意味。役に立つ「gem」とは区別したかったので、この名前にしてみた。

作ってみた

rootとなる名前空間は当然「pebbles」。

pebbles | RubyGems.org | your community gem host

https://rubygems.org/gems/pebbles

zenraも引っ越して「pebbles-zenra」を作ってみた。

pebbles-zenra | RubyGems.org | your community gem host

https://rubygems.org/gems/pebbles-zenra

「pebbles」単体には今のところまともな機能を持たせていない。

まとめ

なんか大それた提案をしてしまって大変気が引けるのだが、賛同していただける方は情報の拡散にご協力いただければと思う。また、rubygems作成歴が浅いので、おかしなところはどんどんツッコミを入れていただけるとありがたい。

ちなみにこのネタも@lchin先生に先ほどのblogを紹介してもらったのがきっかけ。いつもありがとうございます。

Ruby Advent Calendar jp: 2010 : ATND

http://atnd.org/events/10430

Time#strftime / Time.at – Nov’s daily? report(2010-12-18)

http://nov.tdiary.net/20101218.html#p01

hoeでrubygemを作り「zenra」を公開する: Kwappa開発室

http://kwappa.txt-nifty.com/blog/2010/11/hoerubygemzenra.html

How to Name Gems

http://blog.segment7.net/articles/2010/11/15/how-to-name-gems

pebbles | RubyGems.org | your community gem host

https://rubygems.org/gems/pebbles

kwappa/pebbles – GitHub

https://github.com/kwappa/pebbles

pebbles-zenra | RubyGems.org | your community gem host

https://rubygems.org/gems/pebbles-zenra

kwappa/pebbles-zenra – GitHub

https://github.com/kwappa/pebbles-zenra