Rubyで開発するときに入れておきたい三種のRubyGems

「つくるための三種の神器」というテーマで続けている「777ブログウェイ」! 9日目となる本日は「Rubyで開発するときに入れておきたい三種のRubyGems」と題して、定番の RubyGems を3つご紹介します。


1. bundler

「bundler」は、アプリケーションが依存するgemを管理するツールです。今やgem管理のデファクトスタンダードです。

「gem install hoge」のようにコマンドで gem をインストールしていくと、あれよあれよとグローバルな領域にどんどん色んなgemが…それも複数バージョン混在していきます。
そして、いずれは、このアプリケーションで必要なgemはどれだっけ…バージョンはいくつだっけ…といった具合に、どんどん依存関係が分からなくなってきます。ここで活躍するのが「bundler」です。

使い方はいたって簡単。
1) bundler のインストール
gem install bundler
2) アプリケーションのルートディレクトリ直下にGemfileを作成し、依存するgemを記述。
# 例
source 'https://rubygems.org'
gem "sinatra"
gem "mysql2"
gem "activerecord", "3.1.1", :require => 'active_record'

group :development do
  gem "shotgun"
end
3) 依存するgemをインストール
bundle install --path=./vendor/bundler
※ 「--path」オプションをつけると「--path=./vendor/bundler」のようにgemのインストール先ディレクトリを指定できます。



2. ruby-debug

とても使いやすい debugger です。

さっそく、Gemfile に追加して、「bundle install」しちゃいましょう。
gem 'ruby-debug19', :require => 'ruby-debug'

使い方はいたって簡単。
アプリケーション内でブレークポイントを入れたい場所に
debugger
と記述するだけだけで、とっても手軽に使い始めることができます。

あとは、そのブレークポイントを通るように処理を実行すると、そこで処理が停止するので、
p 変数名
でその時点の変数の中身を参照してみたり、
list
で前後のソースコードを参照してみたり、
step
で順番に実行していってみたりと、これがないとデバッグする気にならなと言ってもいいほどです。


3. pry


RailsCastMOONGIFT で紹介されたことで一気に人気が出た「pry」。ひと言で言うと、すごい、チョーすごい irb です。

gem install pry

パッと見、ただただirbに色がついただけに見えますが(それだけでもだいぶ有難いのですが)、
tabでメソッド名を補完をしてくれたり、
pry(main)> {'hoge' => 'fuga'}.to_
}.to_a                }.to_enum             }.to_hash             }.to_json           
}.to_options          }.to_options!         }.to_proc             }.to_s              
}.to_set              }.to_xml              }.to_yaml             }.to_yaml_properties
シェルコマンドをその場でサクッと実行できたり、
pry(main)> .ls -la
# 出力結果は省略
オブジェクトの中に潜り込んでいけたり、
pry(main)> hoge = 'fuga'
pry(main)> cd hoge
pry("fuga"):1> ls
# 出力結果は省略
と痒いところに手が届くところが素敵です。
pryの機能は他にも数多くありますが、その中でも便利なのが、「show-method」。
指定したメソッドのソースコードをサクッと確認できるので、例えば、gemでインストールしたパッケージの中身を確認したいときなどには手間がかからず便利です。

pry(main)> show-method ActiveRecord::Base.scope

From: /Users/fujita/.rbenv/versions/1.9.3-p0/lib/ruby/gems/1.9.1/gems/activerecord-3.2.3/lib/active_record/scoping/named.rb @ line 174:
Number of lines: 16
Owner: ActiveRecord::Scoping::Named::ClassMethods
Visibility: public

def scope(name, scope_options = {})

### 省略 ###

end

加えて、この「show-method」がすごいのは、「gem install pry-doc」をインストールしておくと、C言語で書かれたソースコードまで深く潜れること...これは...ヤバい楽しい!

pry(main)> show-method String#to_i

From: string.c in Ruby Core (C Method):
Number of lines: 17
Owner: String
Visibility: public

static VALUE
rb_str_to_i(int argc, VALUE *argv, VALUE str)
{
    int base;

    if (argc == 0) base = 10;
    else {
    VALUE b;

    rb_scan_args(argc, argv, "01", &b);
    base = NUM2INT(b);
    }
    if (base < 0) {
    rb_raise(rb_eArgError, "invalid radix %d", base);
    }
    return rb_str_to_inum(str, base, FALSE);
}

おわりに

いかがでしたでしょうか。この記事を通して少しでもRubyに興味をいただけたり、やり始めてみようかなという気になっていただければ幸いです。

この記事は面白法人カヤックの七夕のイベント「777」に向けたリレーブログです。
技術系のアドベントカレンダー(*)になぞり、777イベントが開催される7月7日までの期間に、4つの職能ブログ ( エンジニア、デザイナー、フロントエンドエンジニア、ディレクター ) を横断し、更新します。
テーマは「つくるための三種の神器」。
カヤック有志による、それぞれの切り口で記事を投稿していきます。

次回の「777ブログウェイ」は、引き続き TECH.KAYAC.COM で掲載されます。お楽しみに!

カヤックでは、ぼくと一緒に細々とRubyを楽しむ仲間を募集しています!