「つくるための三種の神器」というテーマで続けている「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
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 hogepry("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: 16Owner: ActiveRecord::Scoping::Named::ClassMethodsVisibility: public
def scope(name, scope_options = {})
### 省略 ###
end
加えて、この「show-method」がすごいのは、「gem install pry-doc」をインストールしておくと、C言語で書かれたソースコードまで深く潜れること...これは...ヤバい楽しい!
pry(main)> show-method String#to_iFrom: string.c in Ruby Core (C Method):Number of lines: 17Owner: StringVisibility: publicstatic VALUErb_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を楽しむ仲間を募集しています!