ファイルパスを指定して irb と reline を起動したい

はじめに

私は irb をよく使うので、せっかくなら常に最新版を使ってバグを見つけたいなと思いました。 irbrelinegit clone しておおむね master に追従しているので、ファイルパスを指定して irb を起動することにしました。

ruby -I <path>

Ruby 起動時に -I オプションをつけると、探索先を追加で指定することができます。 追加された探索先は $: で確認できます。

i.rb

puts $:

-I オプションをつけずに実行してみます。

~/sandbox
❯ ruby i.rb             
/usr/local/Cellar/rbenv/1.1.2/rbenv.d/exec/gem-rehash
/Users/mi/.rbenv/versions/3.0.0/lib/ruby/site_ruby/3.0.0
/Users/mi/.rbenv/versions/3.0.0/lib/ruby/site_ruby/3.0.0/x86_64-darwin18
/Users/mi/.rbenv/versions/3.0.0/lib/ruby/site_ruby
/Users/mi/.rbenv/versions/3.0.0/lib/ruby/vendor_ruby/3.0.0
/Users/mi/.rbenv/versions/3.0.0/lib/ruby/vendor_ruby/3.0.0/x86_64-darwin18
/Users/mi/.rbenv/versions/3.0.0/lib/ruby/vendor_ruby
/Users/mi/.rbenv/versions/3.0.0/lib/ruby/3.0.0
/Users/mi/.rbenv/versions/3.0.0/lib/ruby/3.0.0/x86_64-darwin18

-I オプションをつけて実行してみます。

❯ ruby -I ~/sandbox i.rb
/Users/mi/sandbox
/usr/local/Cellar/rbenv/1.1.2/rbenv.d/exec/gem-rehash
/Users/mi/.rbenv/versions/3.0.0/lib/ruby/site_ruby/3.0.0
/Users/mi/.rbenv/versions/3.0.0/lib/ruby/site_ruby/3.0.0/x86_64-darwin18
/Users/mi/.rbenv/versions/3.0.0/lib/ruby/site_ruby
/Users/mi/.rbenv/versions/3.0.0/lib/ruby/vendor_ruby/3.0.0
/Users/mi/.rbenv/versions/3.0.0/lib/ruby/vendor_ruby/3.0.0/x86_64-darwin18
/Users/mi/.rbenv/versions/3.0.0/lib/ruby/vendor_ruby
/Users/mi/.rbenv/versions/3.0.0/lib/ruby/3.0.0
/Users/mi/.rbenv/versions/3.0.0/lib/ruby/3.0.0/x86_64-darwin18

指定したパスが探索先に増えました!

注意点

複数のパスを指定する場合は複数の -I オプションを付ける必要があるようです。

~/sandbox
❯ ruby -I ~/sandbox ~/sandbox/ruby i.rb
ruby: Is a directory -- /Users/mi/sandbox/ruby (LoadError)

~/sandbox
❯ ruby -I ~/sandbox -I ~/sandbox/ruby i.rb
/Users/mi/sandbox
/Users/mi/sandbox/ruby
/usr/local/Cellar/rbenv/1.1.2/rbenv.d/exec/gem-rehash
/Users/mi/.rbenv/versions/3.0.0/lib/ruby/site_ruby/3.0.0
/Users/mi/.rbenv/versions/3.0.0/lib/ruby/site_ruby/3.0.0/x86_64-darwin18
/Users/mi/.rbenv/versions/3.0.0/lib/ruby/site_ruby
/Users/mi/.rbenv/versions/3.0.0/lib/ruby/vendor_ruby/3.0.0
/Users/mi/.rbenv/versions/3.0.0/lib/ruby/vendor_ruby/3.0.0/x86_64-darwin18
/Users/mi/.rbenv/versions/3.0.0/lib/ruby/vendor_ruby
/Users/mi/.rbenv/versions/3.0.0/lib/ruby/3.0.0
/Users/mi/.rbenv/versions/3.0.0/lib/ruby/3.0.0/x86_64-darwin18

rbenv のバージョンを指定する

環境変数 RBENV_VERSION でバージョンを指定することができます。

~/sandbox
❯ RBENV_VERSION=2.7.2 ruby -v                                                                                                                            
ruby 2.7.2p137 (2020-10-01 revision 5445e04352) [x86_64-darwin18]

~/sandbox
❯ RBENV_VERSION=3.0.0 ruby -v
ruby 3.0.0p0 (2020-12-25 revision 95aff21468) [x86_64-darwin18]

irb をファイルパス指定で起動する

irb/exe/irb から起動できます。

コマンド

RBENV_VERSION でバージョンを固定し、-I オプションで探索先を追加し、irb/exe/irbirb を起動するコマンドです。

$ RBENV_VERSION=3.0.0 ruby -I /Users/mi/ghq/github.com/ruby/reline/lib -I /Users/mi/ghq/github.com/ruby/irb/lib /Users/mi/ghq/github.com/ruby/irb/exe/irb

実際に使ってみました。最新版の irbreline を参照できていることがわかりました。

$ RBENV_VERSION=3.0.0 ruby -I /Users/mi/ghq/github.com/ruby/reline/lib -I /Users/mi/ghq/github.com/ruby/irb/lib /Users/mi/ghq/github.com/ruby/irb/exe/irb
irb(main):001:0> irb_info
=> 
Ruby version: 3.0.0
IRB version: irb 1.3.1 (2021-01-12)
InputMethod: ReidlineInputMethod with Reline 0.2.1 and /Users/mi/.inputrc
.irbrc path: /Users/mi/.irbrc

irb(main):002:0> Reline::VERSION
=> "0.2.1"
irb(main):003:0> $:
=> 
["/Users/mi/ghq/github.com/ruby/reline/lib",
 "/Users/mi/ghq/github.com/ruby/irb/lib",
 "/usr/local/Cellar/rbenv/1.1.2/rbenv.d/exec/gem-rehash",
 "/Users/mi/.rbenv/versions/3.0.0/lib/ruby/gems/3.0.0/gems/byebug-11.1.3/lib",
 "/Users/mi/.rbenv/versions/3.0.0/lib/ruby/gems/3.0.0/extensions/x86_64-darwin-18/3.0.0/byebug-11.1.3",
 "/Users/mi/.rbenv/versions/3.0.0/lib/ruby/gems/3.0.0/gems/coderay-1.1.3/lib",
 "/Users/mi/.rbenv/versions/3.0.0/lib/ruby/gems/3.0.0/gems/method_source-1.0.0/lib",
 "/Users/mi/.rbenv/versions/3.0.0/lib/ruby/gems/3.0.0/gems/pry-0.13.1/lib",
 "/Users/mi/.rbenv/versions/3.0.0/lib/ruby/gems/3.0.0/gems/pry-byebug-3.9.0/lib",
 "/Users/mi/.rbenv/versions/3.0.0/lib/ruby/site_ruby/3.0.0",
 "/Users/mi/.rbenv/versions/3.0.0/lib/ruby/site_ruby/3.0.0/x86_64-darwin18",
 "/Users/mi/.rbenv/versions/3.0.0/lib/ruby/site_ruby",
 "/Users/mi/.rbenv/versions/3.0.0/lib/ruby/vendor_ruby/3.0.0",
 "/Users/mi/.rbenv/versions/3.0.0/lib/ruby/vendor_ruby/3.0.0/x86_64-darwin18",
 "/Users/mi/.rbenv/versions/3.0.0/lib/ruby/vendor_ruby",
 "/Users/mi/.rbenv/versions/3.0.0/lib/ruby/3.0.0",
 "/Users/mi/.rbenv/versions/3.0.0/lib/ruby/3.0.0/x86_64-darwin18"]