トップ «前の日記(2017/06/22 (木) ) 最新 次の日記(2017/06/24 (土) )» 編集 RSS feed

HsbtDiary


2017/06/23 (金) [長年日記]

幹部合宿2日目

前日に続いて某所地下で議論を続けてました。夕方の手前くらいには終わったので、京浜東北線にのってシュッと帰宅。お疲れさまでした。

Ruby 2.5.0 の rubygems イマココ

@hsbt は Ruby 2.5 で Gemification 以外にも継続的に upstream が ruby/ruby 以外にあるやつのマージをやってるんで、rubygems 周りで今どうなってんの、というお知らせです。

まずは 5 月に 2.6.12 をマージしていた。

https://github.com/ruby/ruby/commit/708a10d35bf7d34da574ca3f2ae6be4bfffd5267#diff-d0025c89dbe0577be56358e4a356131b

rubygems 2.6.12 のリリースノートは https://github.com/rubygems/rubygems/blob/009080040279282d7b8ddd09acab41719cb4ba00/History.txt#L3 にあります。このマージの後に ruby/ruby で加えられた変更をポチポチと rubygems/rubygems に backport したり、今年リリースされる予定、という 2.7.0 のマージ計画を考えたり、関係者にネゴったりというのも継続してやってます。

2.7.0 の大きい変更点としてテストの実行に bundler を git submodule として追加しなくてはいけない、という必要条件が追加されていて、これを ruby/ruby にマージするためには、svn な ruby core に、どう bundler な submodule を統合するか、というのが大きな課題なわけですが

  • test/lib に rubygems が指定した revision で bundler をディープコピーする
  • せっかくなので lib/bundler として bundler を stdlib にしてしまう
  • rubygems のテスト実行時だけ bundler を何かしらの方法で取得して LOAD_PATH に突っ込む、bundler を bundled gem にしたうえで rubygems 実行時だけそれをダウンロードして参照する、とか。

というような方法を取ることができる。個人的には bundler が stdlib になれば、毎回 gem i bundler という不毛なことをやらなくて一デベロッパーとしては最高便利なんですが、ここにも課題があって bundler のテストスイートは rspec なので ruby/ruby では素朴には実行することができないという大きい課題があります。なので、これを解決するために選択可能な手としては

  • テストとか知らねー、という態度で何も考えないでどんどんマージする、ruby/ruby の HEAD で動き続けることを祈る
  • rspec を minitest/spec に書き直してもらうよう bundler team にネゴる(これはすでに聞いたら無理筋って感じだった、そりゃそう思う。bundler にメリットはなにもない)
  • ruby/ruby のテストスイート内で rspec を実行できる基盤を用意する(つらい、つらい)
  • 今の ruby/ruby のテストスイートとは独立した isolated な環境で bundler のテストを実行できるような仕組みを作る

という感じかなあ。と今のところ分解してどれが一番 Ruby という言語にとって幸せかというのを考えてます。ひとまずテスト無視して雑に stdlib にするならこんな感じというのはこちら。

https://github.com/ruby/ruby/pull/1536

rubygems のテストは通っている。引き続き、rubygems/bundler/ruby の開発チームにネゴりながら進めていくんで、何か神アイデアある人は教えてください。