Bundlerを扱うために、次のようなことを行う必要があるでしょう
Rubygemsリポジトリをフォークし、フォークしたものをマシンにクローンします。(リポジトリのフォークに関する手順についてはこちらのチュートリアルを参照してください)。
パッケージマネージャーを使用してgraphviz
パッケージをインストールします
sudo apt-get install graphviz -y
OS X(brewがインストールされている場合)
brew install graphviz
rubygemsルートディレクトリから開発依存関係とBundlerのテスト依存関係をインストールします
bin/rake setup spec:parallel_deps
bundlerディレクトリを変更します
cd bundler
これでテストスイートを並列で実行できます
bin/parallel_rspec
クローンからBundlerを実行するためのシェルエイリアスを設定します。たとえば、Bashエイリアス(~/.bashrc
プロファイルへのエイリアスの追加に関する手順についてはこちらの説明を参照してください)
alias dbundle='ruby /path/to/bundler/repo/spec/support/bundle.rb'
RubyGemsで変更が必要なBundlerの機能またはバグ修正を開発する場合、次のようにRGV
環境変数を設定することで、Bundlerのテストスイートでそれらの変更が反映されるようにできます
RGV=.. bin/parallel_rspec
常に最新のRubyGemsに対して変更が機能するようにしたほうが良いので、この変数を永続的に設定するのは良い考えかもしれません。direnvを使用できます。
RGV
環境変数は任意のRubyGemsバージョンに設定でき、Bundlerの変更がそれらのバージョンで正常に機能することを確認できます。たとえば、
RGV=v3.2.33 bin/parallel_rspec
pry
を使用したデバッグPryでコードを詳しく調べるには:RUBYOPT=-rpry dbundle
を使用してpryを必要とし、コマンドを実行します。
背景情報: Rubyインタープリタの動作を制御するために、Rubyで環境変数を操作できます。RubyはRUBYOPT
環境変数を使用して、Rubyの起動オプションを指定します。
RUBYOPT
の引数は、ruby
の後にフラグとして入力した場合と同様に適用されます。-r
フラグは「require」を意味します。つまり、-rpry
はrequire 'pry'
を意味します。たとえば、ruby -rpry /path/to/bundle
はRUBYOPT=-rpry ruby /path/to/bundle
と同じです。
そのため、RUBYOPT=-rpry dbundle
は「pryを必要とし、このパスをBundlerに必要とする」ことを意味し、つまり開発環境をpry
とローカルbundlerを使用して開始することを意味します。
なぜこれが必要なのですか?require 'pry'; binding.pry
だけでは十分ではないのはなぜですか?
RUBYOPT
をdbundle
と組み合わせる理由は、Bundlerが使用可能なジェムを引き継ぐためです。マシンにpry
がインストールされているが、Gemfileに含まれていない場合、Bundler自体がpry
を必要とするジェムのリストから削除します。RUBYOPT=-rpry
を設定すると、Bundlerが引き継いでpry
をリストから削除する前に、pry
を必要とする方法です。そうすることで、後でbinding.pry
を活用して機能させることができます。残念ながら、binding.pry
の時点でrequire 'pry'
を待っていた場合、pry
がGemfileにない場合はいつでも失敗します。