RubyGemのソースを読む(設定編)


前書き

  • 結構自分は、オープンソースのプロダクトからRubyの書き方を習得していることが多いです。
  • 本とか読むのは三秒で飽きる方でGithubのdefunktも何かのインタビューでそんなこと言ってました。
  • ソースを読む手段もまぁまぁ筋が良いやり方があると思っており、そのRubyの設定を解説します(実践編はまた解説します。)
  • また DHH もソースをガンガン読めと言っています


- リンク

rbenvとbundlerを入れる

ダメな例

  • これはシステムの方のbundlerを読みに言ってしまっています。
$ gem which bundler
/usr/local/ruby/gems/1.9.1/gems/bundler-1.3.5/lib/bundler.rb

良い例

  • rbenv配下(/usr/local/rbenv)にあるので、これはrbenv配下にライブラリがインストールされています。
$ gem which bundler
/usr/local/rbenv/versions/2.2.2/lib/ruby/gems/2.2.0/gems/bundler-1.10.6/lib/bundler.rb
  • また何か変だな、と思ったら、rbenv versions で現状使っているrubyのバージョンを読むことが出来ます(以下では、2.2.2を利用しています)
$ rbenv versions
  system
  2.2.0
* 2.2.2 (set by /usr/local/rbenv/version)

リポジトリ内に gem を落としてくる

  • 以下のコマンドを設定することで、vendor/bundle 配下に
  • 試しに、自分のdjango というリポジトリを適当な所にcloneしてきましょう。
$ git clone [email protected]:r-fujiwara/django.git
$ cd django
  • ここまで出来たら以下のコマンドを実行しましょう
$ bundle install --path vendor/bundle
  • 要は /path/to/django/vendor 配下に全てのGemを落としてくれるというコマンドです。

ここまで出来たら

  • 以下で ls すると、以下のようになっていますが、
$ cd /path/to/django
$ ls 

Gemfile  Gemfile.lock  README.md  config  config.ru  log  tmp  views
  • 次の状態で、bundle install を走らせると、ls した時に結果が変わっています(vendor配下が変わっていますね)。
$ cd /path/to/django
$ ls

Gemfile  Gemfile.lock  README.md  config  config.ru  log  tmp  vendor  views

export EDITOR の設定

何故これを行うか?

  • bundle open コマンドでリポジトリ内のgemを探しに言ってくれます(別記事に具体的なやり方を説明します)

手順

  • bashなりの
$ vim $HOME/.bashrc
  • 以下を追記します。
$HOME/.bashrc
export EDITOR='vim'
$ source $HOME/.bashrc
$ cd /path/to/django
$ bundle open unicorn
  • すると、以下のようにunicornが開かれるはずです

  • このようにunicornのソースを見たりすることが出来ます。

今回の諸々の設定のメリット

  • 何かloggerとか挟んで動かなくなった時にガンガンrm vendorして、bundle install してガンガンソースを読むことが出来ます。

See Also

あくまで今回はコードリーディングの手段としてのbundlerの使い方を解説しましたが、正攻法のbundlerは以下のようなものかな、と思っています。

Ruby書くならBundler使え
http://shokai.org/blog/archives/7262