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にない場合はいつでも失敗します。