こんにちは、SUZURI事業部エンジニアのなかたです。
SUZURIではRuby(2.6.3)を使用しており、フレームワークとしてRuby on Rails(5.2.3)(以下、Railsと呼ぶ)を使用しています。(なお、バージョンについては執筆時点のものです。)
先日、業務中に発見したRailsのバグに対してパッチを送ったところ、初めてマージされました。ここでは、バグの詳細とパッチがマージされるまでの経緯をお伝えします。
バグの詳細
マージされたパッチはこちらです。
Fix relation.exists?
with giving distinct
, offset
and order
for joined table
relation.exists?
をdiscinct
とoffset
およびJOINするテーブルに対するorder
と同時に使った場合に、PostgreSQLでPG::InvalidColumnReference
のエラーが発生してしまいます。しかし、もしdistinct
かoffset
のどちらか一方がない場合にはこのエラーは発生せず、この挙動は紛らわしく見えるため、これを修正するという内容です。
パッチが取り込まれるまでの経緯
まずIssueを作成しました。再現手順の記述ミスやPostgreSQLでしか発生しないことの見落としなどがあったため何度かIssueの内容を更新しました。なお、RailsではIssue作成時のテンプレートがあるため、これに沿って内容を書いていけばよかったです。
The error happens when Relation#any? used with distinct() + offset() + order() for joined table in PostgreSQL
1日経って特に進展がなかったことと、今回のバグについては容易に修正箇所を特定できたため、翌日には該当箇所の修正とテストを書いたPull Requestを作成しました。今回のPull Requestは、修正箇所も多くなかったこともあったのか、特に指摘事項もなく翌日にはマージされました。
なお、こちらの修正が反映されるまでには時間がかかるので、relation.any?
をrelation.present?
とすることでバグを回避していました。
余談ですが、RailsにコントリビュートするとRails Contributorsというサイトに自分の名前が載ります。自慢できます。
まとめ
業務で使用しているOSSをメンテナンスするのは業務の延長線上にあると思うので、今後も可能な範囲でメンテナンスに参加していきたいです。また、この可能な範囲でのメンテナンスを継続するために、GitHubからRailsレポジトリのアクティビティを全て受け取るようにしたり、masterブランチに入ったコミットを毎朝git log
でチェックしたりしています。
今回とは別件ではありますが、執筆時点ではRails6がリリースされてすぐということもあってか、業務中にドキュメントを読んでいたらいくつか不備を見つけました。こちらもパッチを送ってマージされました。