@kyanny's blog

My thoughts, my life. Views/opinions are my own.

gem ソムリエになる方法

http://d.hatena.ne.jp/tokuhirom/20080520/1211292598の Ruby 版があるといいなと思ったので、自分で書いてみます。「もっといいやり方があるよ」という方からのフィードバックをお待ちしています。

ruby-toolbox.com をみる

僕の知る限り、 rubygems には search.cpan.org のような配布されているパッケージを Web 上で閲覧できるインターフェースがありません。 CPAN Ratings や CPAN Testers に相当するサイトもありません。 rubygems.org 上でパッケージを閲覧・検索できるとコメントをいただきました。また、 CPAN モジュールに比較してパッケージの名前を自由につける気風があるようなので (例: Web::Scraper vs scrAPI, Nokogiri, earthquake, etc.) 探しづらい気がします。

そこで役に立つのが ruby-toolbox.com というサイトです。ここは人気のある gem がカテゴリ別に分類されているカタログサイトで、ダウンロード数や GitHub 上での watch/fork 数などを指標にした人気度でランキング化されています。

例えば、非同期処理を行いたいので良い gem がないかなと思ったら Queueing カテゴリをみにいくと、 resquedelayed_job が人気なんだなということがわかります。

ここで上位に挙がっているものは選ぶ価値があるといえるでしょう。逆に、あまり人気がないものはそれなりの理由があるので避けたほうが無難でしょう (例: backgroundrb)

GitHub のレポジトリをみる

多くの gem は GitHub 上にレポジトリがあり、最終更新日や開発の活発さはそこをみれば把握できます。 GitHub の場合、 watch/fork 数などによって、その gem がどれくらいコミュニティから注目されているかがわかり、注目されているものは選ぶ価値が高いといえます。

また、どういう仕組みになっているのか僕は知らないのですが、(ほぼ) 同名の gem というものが存在しています (例: tobi/delayed_job & collectiveidea/delayed_job) gem install foo としたときにどのレポジトリのものがインストールされているかがちょっと分かりづらいですが (先述の ruby-toolbox.com はレポジトリにリンクしてあるのでその点でも有用です) GitHub の Network タブをみると fork されている様子を一望できるので、偶然みつけた gem の本家レポジトリがあまり活発にコミットされていなくても、実は誰かが fork した先で開発が継続していた、なんてこともあります (例: zencoder/rvideo vs newbamboo/rvideo) Network タブの見方や操作方法は割愛します。

必ずしも一番最近コミットされた fork が良いというわけではないので無条件に選ぶのはお薦めしませんが、開発の活発さをはかる指標としては役に立ちますし、いくつか見比べてみればどれが中心的なレポジトリなのかもわかってきます。

gem install するときに指定するパッケージ名を変更すれば fork されたほうの gem をシステムにインストールすることができます (例: gem install newbamboo-rvideo) どんなパッケージ名が指定できるのかは gem search -r rvideo のようにするとわかります。

なお、テストのない gem が人気を博するということは Ruby コミュニティではありえないと思うので、あえてテストコードの充実度をチェックしろとはいいません :P

コミュニティにたずねる

先述のような方法でいくつか良さそうな gem をピックアップすることができますが、それだけではわからない部分もあります。トレンドや使い勝手のような数値化しづらい指標については、 Rubyist の集まるコミュニティに参加して使ったことがあるひとに感想を聞くとよいでしょう。

factory_girl よりも fabrication のほうが新しいけど、まだ使っているひとが少ないみたいだから、しばらくはノウハウが共有されている factory_girl を使うことにしよう」とか「delayed_job よりも resque のほうが人気がありそうだけど、 Rails アプリケーションへの組み込み方はどっちのほうが簡単なんだろう、あと Redis の運用って大変なんだろうか」のような疑問は経験者に直接ぶつけてみると、生の声が聞けてとても参考になります。

例えば僕の場合、Rails勉強会@東京のような場でそういった情報交換をしています。この記事の内容もそこで見聞きしたやり方がもとになっています。もちろん、 IRC チャンネルやメーリングリストに参加したり、 Twitter でつぶやいてみるなど、オンラインの場を活用するのもよいですね。