RubyKaigi 2017 3日目

RuboCop の発表を聞いた後に久しぶりに t-wada と話したり、Bundler 2 の発表を聞いた後にそのあたりの話を話したりしていた。

以前 ぎんざRuby会議01 で発表したくらいに Bundler 2 は追っていた経緯があり、たびたび挙った Gemfile から gems.rb への変更が推奨されて行くといった話題について、Rails アプリケーションや自作 Gem の一部では既に gems.rb に変えているといった話をしたりしていた (リポジトリの Issue などで見ている計画として本格的な対応が必要になるのは Bundler 2 から Bundler 3 へのタイミングになるので、まだ少し先の話として先送りできなくはない) 。

実はずいぶん以前から Bundler の Gemfile は gems.rb でも動くようになっていて、今後はファイルを探索する優先順位が変わったりするものの gems.rb でも動く。

ただこれは単純にファイル名を変更すれば良いといったものではなく binstub には Gemfile の文字列パスを含んだコードが生成されるので、そのファイルへの変更が必要だったりする。そういった決め打ちがあるものはライブラリやミドルウェア含めて軒並み要対応だと思う。

% bundle binstub rubocop
% cat bin/rubocop
#!/usr/bin/env ruby
# frozen_string_literal: true
#
# This file was generated by Bundler.
#
# The application 'rubocop' is installed as part of a gem, and
# this file is here to facilitate running it.
#

require "pathname"
ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../../Gemfile", # ★これ
  Pathname.new(__FILE__).realpath)

require "rubygems"
require "bundler/setup"

load Gem.bin_path("rubocop", "rubocop")

この変更についてのとあるコメントで、依存ライブラリを束ねる重要なファイルを *.rb といったただの 1 Ruby ファイルに見えるような名前に変えるのはどうかといった所感は面白かった。Rails 方面から何か動きがあるかもしれないし、今後どうなっていくかウォッチしてみて良いと思う。

デカ外人パークでは Ruby 2.5 について、バックトレースの出力順序が変わるのは結構大きな変更になるのではといったのを話していたりもした (でも今回の RubyKaigi で話題に挙っていなかったようなといった感じで) 。

% ruby -ve 'def a; b; end; def b; raise "hi"; end; a'
ruby 2.4.2p198 (2017-09-14 revision 59899) [x86_64-darwin13]
-e:1:in `b': hi (RuntimeError)
        from -e:1:in `a'
        from -e:1:in `<main>'
% ruby -ve 'def a; b; end; def b; raise "hi"; end; a'
ruby 2.5.0dev (2017-09-18 trunk 59955) [x86_64-darwin13]
Traceback (most recent call last):
        2: from -e:1:in `<main>'
        1: from -e:1:in `a'
-e:1:in `b': hi (RuntimeError)

Ruby 2.5 といえば Ruby 2.5.0-preview1 のリリースは RubyKaigi 2017 会期中になかったので、もう少しだけ先になるのかなと思っている。

github.com

他には pycall の話を聞いたり、RuboCop のとある cop をどうするか問題を話したり、OSS Gate に関する話をしたりと、多くの話を聞いたり自分が Edge で見ている分のフィードバックを共有したりと、次回の RubyKaigi までにどういったコードを書いて行こうか考えるきっかけになる 3日間を過ごすことができた。