Ginza.rb 第63回

『Ginza.rb 第63回 非常識な速さ dev.to の秘密を探れ』に行った。会場は銀座のメドピアさん。

ginzarb.doorkeeper.jp

当日は y-yagi さん謹製の Gist をベースに進んだ。

https://gist.github.com/y-yagi/d166b23a5f652c7826d9c47f3a49b858

印象に残ったのは、Fastly といった CDN の活用や、速度至上っぽく CSS をレイアウトを埋め込みにしている点、InstantClick で相当量の裏の非同期でのリソース読み込みというあたりだった。最後のは y-yagi さんのデモで「なるほど?」感が上がってたりしていた。

自分の場合はすぐ明日からの活用といった感じではないが、話題になっていた速度を出すためのアプリケーションの裏側を垣間見れて良かった。

`Layout/EmptyLineAfterGuardClause` cop のヒアドキュメントまわりの偽陽性を直した

RuboCop 0.59.1 でのリグレッションのフィードバックをもらった。

github.com

以下のような後置でない条件でヒアドキュメントを含むケースについて offense を発生させる偽陽性を含んでいた。

def method
  if truthy
    raise <<-MSG
      This is an error.
    MSG
  end

  value
end

RuboCop 0.59.0 で修正したパッチについて、今度は逆に別のリグレッションを引き起こす要因にしてしまっていた。

逆に以下のケースは end の後ろに空行を空けることを期待しているため、そのあたりのテストケースと実装を含めて PR を開いた。

def method
  if truthy
    raise <<-MSG
      This is an error.
    MSG
  end
  value
end

ヒアドキュメントまわりはユースケースが複雑なため、その AST を扱う処理がなかなか難しい。

RuboCop 0.59.1 がリリースされた

RuboCop 0.59.1 がリリースされた。今回はパッチバージョンということで、RuboCop 0.59.0 を使っているユーザーは上げておくのがおすすめ。

github.com

ざっくりと今回の変更履歴の内容を取り上げる。

Bug fixes

#6267: Fix undefined method 'method_name' for Rails/FindEach. (@Knack)

Rails/FindEach cop でエラーが発生する際のバグフィックス

#6278: Fix false positive for Naming/FileName when investigating gemspecs. (@kddeisz)

RuboCop 0.59.0 のバグフィックスで有効になった Naming/FileName へのパッチ。拡張子が .gemspec のファイルのファイル名について取り締まらないようにしている。

#6256: Fix false positive for Naming/FileName when investigating dotfiles. (@sinsoku)

同じく、RuboCop 0.59.0 のバグフィックスで有効になった Naming/FileName へのパッチ。. (ドット) で始まる隠しファイルのファイル名について取り締まらないようにしている。

#6242: Fix Style/EmptyCaseConditionauto-correction removes comment between case and first when. (@koic)

Style/EmptyCaseCondition cop へのパッチ。以下のように最初の when の上にあるコメントが auto-correct で消えるバグを直している。

def foo
  case
  # when bar ...
  when bar
    2
  end
end

#6261: Fix undefined method error for Style/RedundantBegin when calling super with a block. (@eitoball)

Style/RedundantBegin cop について、以下のような super でブロックを使ったコードに対してエラーが起きる問題が直されている。

def a_method
  super do |arg|
    foo
  rescue => e
    bar
  end
end

#6263: Fix an error Layout/EmptyLineAfterGuardClause when guard clause is after heredoc including string interpolation. (@koic)

Layout/EmptyLineAfterGuardClause cop の修正。以下のように式展開を含むヒアドックの後にガード条件があるときにエラーが起きる問題が直されている。

raise(<<-FAIL) unless true
  #{1 + 1}
FAIL
1

#6281: Fix false negative in Style/MultilineMethodSignature. (@drenmi)

Style/MultilineMethodSignature cop で行の長さの計算に起因した偽陰性に関して修正されている。

#6264: Fix an incorrect autocorrect for Layout/EmptyLineAfterGuardClause cop when if condition is after heredoc. (@koic)

Layout/EmptyLineAfterGuardClause cop の修正。ヒアドックが関わる auto-correct した際に Range を求めるための方法が考慮されていなかった不具合と、後置 if への考慮漏れの複数要因で、auto-correct による空行位置が間違っていた不具合が直されている。

Changes

#6272: Make Lint/UnreachableCode detect exit, exit! and abort. (@hoshinotsuyoshi)

Lint/UnreachableCode cop が対象とするメソッドに exit!, exit!, abort が加えられている。

#6295: Exclude#=== from Naming/BinaryOperatorParameterName. (@zverok)

Naming/BinaryOperatorParameterName cop が取り締まらない対象に === を含めている。

Add + to allowed file names of Naming/FileName. (@yensaki)

Naming/FileName への変更。Action Pack Variants のように、some_file.xlsx+mobile.axlsx といった + を含んだファイル名について許容するように変更された。

5xRubyの竜堂さんたちと食事した

来日されていた 5xRuby の竜堂さんたちと晩御飯をご一緒した。テックトークから、台湾での流行りの技術から今期の推しアニメまで歓談しつつ過ごしたりしていた。コミュニケーションを取る際に、英語のターンで聞き取りが課題だなあと人生何度目かの意識の高まりが良い副作用であったりもしたのだった。

あと、Emacs 談義で Helm ではなく Ivy を使うという選択肢について勉強になった。

Rails/OSS パッチ会 (2018年9月)

Rails / OSS パッチ会だった。

ちょうど RuboCop の CI が Travis CI から CircleCI に移行したタイミングで、ruby-head のデイリービルドイメージがなくてどうしたものか mtsmfm に相談したところ自前で用意しているとのことだった。Official Docker image を使っている RuboCop の CI には別手法の提案を考える必要がありそうだが、自前のものであればなるほどだった。

https://hub.docker.com/r/mtsmfm/ruby-trunk/tags/

あとは前日の Asakusa.rb から引き続き見ていたパッチを PR の形にして送ったりしていた。

github.com

一見、引数にヒアドックを使ったケースのガード条件での不具合報告の対応だったが、ガード条件に if を使っているケースにも問題があったという複合要因のバグというので問題特定に時間がかかったものだった。

あとは RuboCop 0.59.0 で修正して、現状の期待する振る舞いで動くようになった Naming/FileName cop ついてサキさんが見てくれるパッチの内容について話したり、y-yagi さんと yahonda さんが見ていた rails/railsPostgreSQL に対するの CI マトリックスに関する問題を小耳に挟んだりしながらパッチを書いていた。

今回は特にいろいろとパッチやイシューが出ていて面白かった。次回は 2018年10月26日(金) の開催です。

blog.agile.esm.co.jp