RuboCop Performance 1.5.1 をリリースした

RuboCop Performance 1.5.1 をリリースした。

ユーザー影響のある形で適用しているのは以下の PR で、Performance/StartWith cop と Performance/EndWith cop の偽陰性を解決したもの。

github.com

サッとアップデートすると、これまで当該 cop で見つかっていなかった offense が検出されるかもしれません。

富山Ruby会議01で講演した

主催者のひとりで同僚の kunitoo からのオファーで、富山Ruby会議01で講演した。

イベント自体は富山という地域性のある話からテックトークまで幅広く扱われていて、地域Ruby会議感があって面白かった。

自分の当日のスライドは以下。

話す内容としては config/schema.rb をパースするということを中心軸にすることは固まりつつも、なかなかタイトルが決まらなかったので長らく TBA にしてしまっていた。次に登壇する平成Ruby会議では逆にタイトルは決まっているものの、講演概要はこれから書く予定。

あと pocke さんから AST の解説について褒めてもらえたので良かった。

楽しかったです。ありがとうございました。

Asakusa.rb 第537回

Asakusa.rb 第537回に行った。

ちょうど一昨日あたりに rbenv uninstall 2.7.0-dev からの rbenv install 2.7.0-dev を行なったところ、手元の環境で以下のようなエラーが発生していた。

% rbenv install 2.7.0-dev
ruby-build: using openssl from homebrew
Cloning https://github.com/ruby/ruby.git...
Installing ruby-master...
ruby-build: using readline from homebrew

BUILD FAILED (OS X 10.13.6 using ruby-build 20181018-127-gefd2722)

Inspect or clean up the working tree at /var/folders/6g/n37ypc6554dcgy3fgdj9nkqm0000gn/T/ruby-build.20191029193116.53314
Results logged to /var/folders/6g/n37ypc6554dcgy3fgdj9nkqm0000gn/T/ruby-build.20191029193116.53314.log

Last 10 log lines:
/var/folders/6g/n37ypc6554dcgy3fgdj9nkqm0000gn/T/ruby-build.20191029193116.53314 /tmp
Cloning into 'ruby-master'...
Checking out files: 100% (9363/9363), done.
/var/folders/6g/n37ypc6554dcgy3fgdj9nkqm0000gn/T/ruby-build.20191029193116.53314/ruby-master /var/folders/6g/n37ypc6554dcgy3fgdj9nkqm0000gn/T/ruby-build.20191029193116.53314 /tmp
checking for ruby... /Users/koic/.rbenv/shims/ruby
configure: error: cannot run /bin/sh tool/config.sub
make: *** No targets specified and no makefile found.  Stop.

error: cannot run /bin/sh tool/config.subGoogle 検索したところ、Ruby のビルドに Ruby が必要ということまでも分かりつつも手元の環境に (むしろ複数バージョンの) Ruby はインストールしていたのでどういったことかよく分かっていなかった。rbenv と Ruby のコミッターの hsbt さんに聞いたところ、rbenv global 2.7.0-dev を指定しているのではという即答で、Ruby を指定し直して解決。hsbt さんはすごい人。

アンインストールした Ruby を指定していたらそれは Ruby をビルドするための Ruby は見つからないというわけだった。

あとは RuboCop 1.0 までに入れておきたいと思っている破壊的変更になる以下のパッチを書いていたり、富山Ruby会議への話をしたりしていた。

github.com

年内の講演予定

年内の講演予定です。

富山Ruby会議01

こちらは今週末の 11月3日(日) に開催される富山Ruby会議01での登壇です。

toyamarb.github.io

本編、懇親会ともに残席があるようですので、よければ富山で会いましょう。

平成Ruby会議01

こちらは 12月14日(土) に開催される平成Ruby会議01 でクロージングキーノートをします。会場は目黒のドリコムさん。オープニングキーノートは Ruby コミッターでもある金子さん。

heiseirb.github.io

まもなく募集開始ということもあり、タイトルは概ね決め始めているところ。

あと、登壇ではないのですが勤務先で開催している今月の Rails/OSS パッチ会が 10月31日(木) にあります。こちらは特に募集ページなど設けていませんので、興味のある方は永和システムマネジメントの神田オフィスまでお越し下さい。終わった後は有志で懇親会などあるかもしれません。

blog.agile.esm.co.jp

Parser gem のリリース権とコミット権をもらった

Ruby 2.7 での kwargs 警告が起因して RuboCop の Ruby 2.7 マトリックスが落ちていて、それを直そうとすると Parser gem の修正とリリースが必要だったので、そのあたりのイシューを立てていた。

github.com

結果として Parser gem チームが動けない時に、RuboCop core チームでも動けると良いということでリリース権とコミット権をもらった (現在のメインメンテナーは Opal チームの人でもある) 。リリースタスクがうまく動いていないのでそのあたりは後続の相談と調査という形であるものの、そのあたりを解決して今後必要に応じて動いていく気持ち。

ちょうど Ruby の parse.y の変更から Parser gem にフォワーディングするものがないか見始めた頃合いだったので、そのあたり捗っていくかもしれない。

Asakusa.rb 第 531 回

勤務先が会場だったので参加できる時間でサッと参加していた。

サッとRuboCop とその周辺イシューを見ていた。

github.com

rubocop-rails_config のサポートバージョンについて、toshimaru さんからメンションがあったので自分の見解を伝えた。特にメンテナンスコストが上がるわけではないので、サポートできる分の Ruby バージョンをサポートすると良さそうというのと、オフトピックとして CI マトリックスのコストは気になるかもだけれど sue445 先生がエントリに記した GitHub Actions のリポジトリあたりジョブ 20 並列で解決できる時代が近づいて来ている気がしている。

github.com

RuboCop に false positive のレポートが上がってきたので見た所、Ruby の結合順序の仕様の話で false positive ではないものだった。だいたいこういうときは Ruby のコードを ruby-parse コマンドを使って S 式で AST を見るのを初手に動作比較して、念のため Parser gem に問題がないか確認してみている。今回もそんな感じで見ていた。

github.com

Parser gem へのイシューで先週末にやろうと思っていて手が動いていなかったもの。Ruby 2.7 での kwargs まわりの警告で RuboCop の CI の Ruby 2.7 マトリックス が落ちていて、その解決に Parser gem のリリースが欲しかったのでイシューを立てた。

Faker 2.2.2 がリリースされた

Faker 2.2.2 がリリースされた。含まれている自分のパッチは以下。

github.com

先日実装した RuboCop Faker を使った auto-correct で Faker 2 スタイルに移行するためのコマンドをコピペで実施できるようにしている。これは FactoryBot から得たアイデア

% cat example.rb
require 'faker'

Faker::Lorem.words(10000, true)

% bundle exec ruby example.rb
example.rb:3: Passing `number` with the 1st argument of `words` is
deprecated. Use keyword argument like `words(number: ...)` instead.
example.rb:3: Passing `supplemental` with the 2nd argument of `words` is
deprecated. Use keyword argument like `words(supplemental: ...)`
instead.

To automatically update from positional arguments to keyword arguments,
install rubocop-faker and run:

rubocop \
  --require rubocop-faker \
  --only Faker/DeprecatedArguments \
  --auto-correct

bundle update したら Faker 2.0 の破壊的変更によるエラーに遭遇して、それを upstream で緩和できないかと思ってからの一連のサーガは以下。

  1. Faker 2 実行時に古い positional arguments スタイルを使っている時に動的に警告を出すようパッチを書いた http://koic.hatenablog.com/archive/2019/08/28
  2. Faker 2 の keyword arguments スタイルに auto-correct する RuboCop Faker を実装してリリースした http://koic.hatenablog.com/entry/rubocop-faker-has-been-released
  3. Faker 2 実行時の警告に RuboCop Faker を使った auto-correct を示すようパッチにして打診して取り込まれた (今回)

こういったパッチを送ったりコードを書いたりして Faker の org メンバーに招待されたのが昨日のパッチ会の最中だった。

現在、Faker 2.2.2 ではこれらのパッチが適用されているので、Faker 2 への一連の動きとしては落ち着いたと思う。今後はもしかすると Faker 3 でインターフェースが変わる可能性がなくはないので、そのときはアップグレードしやすい仕組みを導入しておけるマイルストーンをあとで提案しようと思っている。