GW にやったこと (2020年)

GW にやったことについて、GitHub から辿れることを中心に書き残しておく。

.rubocop.yml で ERB を書けるようになるパッチをレビューしてマージした。

こんな書き方ができるようになる。

AllCops:
  Exclude:
  <% `git status --ignored --porcelain`.lines.grep(/^!! /).each do |path| %>
    - <%= path.sub(/^!! /, '') %>
  <% end %>

github.com

Active Record Oracle enhanced adapter に対する upstream の日次動向チェックで動きがあったので追随した。

github.com

以前から気にはなっていた Active Record Oracle enhanced adapter のテスト時の警告を抑制した。

github.com

.rubocop.yml で無効になっている部署に対して、一部の cop を有効にできるようにするパッチをレビューしてマージした。べんり。

github.com

Layout/ConditionPosition cop の auto-correct を実装した。

github.com

以下のようにマルチバイト文字への振る舞いが等価でないため Performance/Casecmp cop を unsafe にした。

'äöü'.casecmp('ÄÖÜ').zero? #=> false
'äöü'.casecmp?('ÄÖÜ')      #=> true

github.com

レガシー APIcontent_tagtag にする Rails/ContentTag cop をレビューしてマージした。PR の根拠となるリソースなど示されているためレビューの手間が少なくなっていたのでよかった。

ドッグフーディングとして実 Rails アプリケーションに適用してみて良い感じだった。

2020年5月7日追記

偽陽性がありそうだったので、調べるつもり。

github.com

Style/GuardClause cop の誤ったメッセージを修正した。

github.com

Lint/EnsureReturn cop の auto-correct を実装した。

github.com

RailsConf 2020.2 COUCH EDITION の視聴をはじめた。往年の Kent Beck ファンとして濃密な 15min の講演がよかった。

railsconf.com

rubocop-hq/rubocop#7925 が複合要因のイシューで未解決部分があった Style/GuardClause cop の偽陽性を修正した。

github.com

Performance/DeletePrefix cop と Performance/DeleteSuffix cop を実装した。

bad ケースと good ケースは以下。

# bad
str.gsub(/\Aprefix/, '')
str.gsub!(/\Aprefix/, '')
str.gsub(/^prefix/, '')
str.gsub!(/^prefix/, '')

# good
str.delete_prefix('prefix')
str.delete_prefix!('prefix')

ベンチマークは以下。

% ruby -v
ruby 2.5.8p224 (2020-03-31 revision 67882) [x86_64-darwin17]

% cat bench.rb
require 'benchmark/ips'

Benchmark.ips do |x|
  str = 'foobar'

  x.report('gsub')           { str.gsub(/bar\z/, '') }
  x.report('gsub!')          { str.gsub(/bar\z/, '') }
  x.report('delete_suffix')  { str.delete_suffix('bar') }
  x.report('delete_suffix!') { str.delete_suffix('bar') }
  x.compare!
end

% ruby bench.rb
Warming up --------------------------------------
                gsub    46.814k i/100ms
               gsub!    46.896k i/100ms
       delete_suffix   211.337k i/100ms
      delete_suffix!   208.332k i/100ms
Calculating -------------------------------------
                gsub    546.500k (± 1.3%) i/s -      2.762M in 5.054918s
               gsub!    551.054k (± 1.2%) i/s -      2.767M in 5.021747s
       delete_suffix      4.780M (± 1.1%) i/s -     24.092M in 5.040850s
      delete_suffix!      4.770M (± 1.1%) i/s -     23.958M in 5.022823s

Comparison:
       delete_suffix:  4780060.8 i/s
      delete_suffix!:  4770419.3 i/s - same-ish: difference falls within error
               gsub!:   551054.2 i/s - 8.67x  slower
                gsub:   546500.1 i/s - 8.75x  slower

ドッグフーディングとして rails/rails リポジトリと、実 Rails アプリケーションで実行してみて良い感じの首尾だった。

github.com

Rails 6.0.3 がリリースされたので、ホームページを更新した。

github.com

GitHub 社の Codespaces のベータの waitlist にならんだ。

github.com

まだ PR にしていないセルフレビュー中のパッチや、仕掛かりや手戻りのパッチなど手元にあるので、それらは今後引き続きといった感じ。

カンファレンスとしては、去年のゴールデンウィークは RailsConf 2019 のためミネアポリスに行っていたけれど、RailsConf 2020 はオンラインで聞くゴールデンウィークだった。