ruby

Ruby 3.1 での each_cons と each_slice の (コーナーケース?) 非互換変更

先日、RuboCop の ruby-head CI が落ちていたので、bugs.ruby-lang.org にフィードバックしていたイシューが以下。 bugs.ruby-lang.org osyo さんがコメントで教えてくれた PR が以下で、each_cons と each_slice の戻り値が nil から self に変わっていると…

`String#split`と`String#chars`の小咄

最近、String#split と String#chars まわりの Cop をメンテナンスしたり実装した際の、それらメソッドに関する知見を書き残しておきます。 String#split の小咄 RuboCop Performance に string.split(/re/) より string.split('re') の方が速いので、Cop に…

irbでオートハイライトやオートインデントがされないときに見直す設定

Ruby 2.7 で大幅に強化された irb でオートハイライトやオートインデント、マルチライン編集ができていない場合、~/.irbrc に以下のような設定が残っている可能性があります。 IRB.conf[:USE_READLINE] = true IRB.conf[:USE_READLINE] に true が設定されて…

RuboCop の Ruby 3.0 対応

構文解析まわりは Ruby 3.0 リリース以前に概ね対応されていると思うので、うまく解析できなかったらバグの可能性があります。その場合の初手としては Parser gem を 3.0.0.0 以上にすると解決するかもしれないので、bundle update parser をしても再現する…

Nokogiriが1.11.0からプリコンパイル済みで配布される

Nokogiri が 1.11.0 からプリコンパイル済みで配布される (らしい) 。 このエントリを書いている時点での Nokogiri のプレリリースバージョンは 1.11.0.rc3 なので、大きな問題がなければ近日リリースの Nokogiri からという少し先取りの話になる。 おや?と…

Parser gem のバージョニングと RuboCop の TargetRubyVersion

Ruby 2.7.2 にあわせた Parser 2.7.2.0 がリリースされた。 Parser と RuboCop の繋がりは大きいので、この機会に RuboCop で解析する Ruby のバージョン指定との関係も書いておく。 Parser のバージョニング Parser のバージョニングは、最新の安定版 Ruby …

不正なバイトを置換文字で置き換えるCSV.openオプション

CSV 3.1.6 がリリースされました。 github.com CSV 3.1.6 には、CSV.open に不正なバイトを置換文字で置き換えるオプションを追加するのに送ったパッチが取り込まれているのでその紹介です。 ユースケースとして、MS Excel 向けのエンコーディング (有名な C…

Ruby 2.7 と Rails 6.0 / Rails 5.2 への展望と懸念

Ruby 3.0 に向けた Ruby 2.7 と Rails の状況がめまぐるしく変わっているようなので、現在持っている知識のスナップショットを書き残しておきます。 Rails 6.0 系と Ruby 2.7 系 昨日、Matz によって今後リリースされる Ruby 2.7.2 でキーワード引数の分離へ…

Ruby 2.8.0-devビルドのためclangを更新した

TL;DR としては手元の macOS の clang のバージョン更新を怠っていたので、Ruby の head (2.8.0-dev) でコンパイルエラーが起きていた。久しぶりの Ruby 2.8.0-dev でコンパイルエラーが出たら clang を更新してみましょう。 以下ログ込みで記しておく。 Rub…

キーワード引数の分離への対応にRuby 2.8.0-devを使う

先日のパッチ会で kamipo さんにもらったアドバイスを書き残しておく。 TL;DR としては表題そのまま。キーワード引数の分離への対応にRuby 2.8.0-devを使うというもの。 2.8.0-devを使えばイージーモードだけど2.7.0縛りプレイだと常人にはクリア不能のむず…

Ruby 2.7.0 で導入された Arguments Forwarding

Ruby 2.7.0 で導入された Arguments Forwarding について、RuboCop でスタイル部署の新たな Cop として開発中なので、Cop 開発の過程で得ている知見やらを進捗を記しておきます。 Arguments Forwarding とは def foo(...) といった形で引数への構文拡張がさ…

RailsアプリケーションのRuby 3.0への展望

パッチ会や地域 Ruby コミュニティなどで集めた知見を元に、勤務先の永和システムマネジメントなんかで度々話している表題についてテキスト化しておく。 TL;DR Ruby 2.8.0 の開発が始まっているが、それは 2020 年のどこかで Ruby 3.0 になるらしい Ruby 3.0…

GemifyされたCSVを使う

RubyKaigi 2019 で kou さんと秒速さんが話されたプレゼンで得た今日から使える tips 紹介。 https://slide.rabbit-shocker.org/authors/kou/rubykaigi-2019/ Ruby にデフォルトでバンドルされている CSV ではなく、Gemify されて独立してリリースされている…

第34回 西日暮里.rb

第34回 西日暮里.rb オブジェクト指向設計実践ガイド読書会 まとめ回だった。 nishinipporirb.doorkeeper.jp 最終的には全9章のなかで印象に残ったことや、参加できなかった会でどんな話があったか聞いてみたいといったトピックに絞って話をしていた。そして…

第33回 西日暮里.rb オブジェクト指向設計実践ガイド読書会 (9章)

第33回 西日暮里.rb オブジェクト指向設計実践ガイド読書会 (9章) だった。 nishinipporirb.doorkeeper.jp 今回を持って本編をとおしたことになり題材の一冊としては終了。 9章はオブジェクト指向設計を背景にしたいわゆるデベロッパーテスティングの話にな…

第32回 西日暮里.rb

オブジェクト指向設計実践ガイド読書会の第7章と第8章を読み進めた。次回、第9章を読んで読書会としては終了の予定。

第31回 西日暮里.rb オブジェクト指向設計実践ガイド読書会

第31回 西日暮里.rb オブジェクト指向設計実践ガイド読書会に参加した。今回は訳者の高山さん登場の回だった。 nishinipporirb.doorkeeper.jp 今回は、第5章のダックタイピングと第6章の継承を対象に行なわれた。 第5章でメインの題材となっていたい「ダック…

第30回 西日暮里.rb オブジェクト指向設計実践ガイド読書会

第30回 西日暮里.rbだった。 nishinipporirb.doorkeeper.jp 前回に引き続きオーガナイザーの高山さんが訳した『オブジェクト指向設計実践ガイド』の読書会という形式。 オーガナイザーで訳者の高山さんはリモート参加という形で3章と4章が題材となった。 オ…

第29回 西日暮里.rb オブジェクト指向設計実践ガイド読書会

第29回 西日暮里.rbだった。 nishinipporirb.doorkeeper.jp 今回はオーガナイザーの高山さんが訳した『オブジェクト指向設計実践ガイド』の読書会という形式。 オブジェクト指向設計実践ガイド ~Rubyでわかる 進化しつづける柔軟なアプリケーションの育て方…