ykamezの技術ブログ

日々学んだことをアウトプットしていきます。Ruby/Rails/グロース/分析/施策提案

OSSのスピード感を体感した話

概要

今回Railsのバージョンアップデートをする過程で、simple_enumというGemの不備に気がつき、issueを立てたら、すぐにPRが出され解決されて、OSSのスピード感を自分の身をもって体感しました。

不具合に気がつくまでの流れ

Rails 5.1で、ActiveRecord::Dirtyのメソッドの一部が非推奨になり、Warningが出るようになりました。 取り組んでいるプロジェクトで、非推奨になっているメソッドを書き換える必要があったので、以下のような書き換えを行なっていました。

Userモデルのenumの値を保持するstete_cdというカラムに関して、メソッドのRenameを行なっていました。

state_was → state_before_last_save
state_changed? → saved_change_to_state?

すると、以下のようなエラーにあたりました。

     NoMethodError:
            undefined method `saved_change_to_state?’ for #<User:0x00005xxa>

Userモデルのstate_cdというカラムは、Railsデフォルトのenumではなく、外部のlwe/simple_enumというgemを使用していたため、RailsActiveRecordのメソッド名の変更に追従していなかったのです。

※該当のメソッドは2016年ごろに非推奨になったようです。

Deprecate the behavior of AR::Dirty inside of after_(create|update|save) callbacks by sgrif · Pull Request #25337 · rails/rails · GitHub

その場では、そこまで書き換えの数も多くなかったので、メソッド名を_cdを書き足す形で修正を行いました。

state_changed? → saved_change_to_state_cd?

自分以外にも同じようなことに引っかかる人がいると思ったので、simple_enumのissueを立てました。

github.com

すると翌々日には、

@ykamez I will try and find some time to look into this and get back to you

と返信がきて、その後すぐに変更のPRが作成されました。

そして、CIが落ちてたので、それを直したりし、少しやりとりがあった後、最終的に、

👍will merge and release this weekend. Thanks y’all

と返信がきて、無事にリリースされるようです🎉

自分自身はこの不具合を踏み、コード側を変更することで、回避したので、この変更自体からは、恩恵を受けることはできないのですが、このような形で、自分が踏んだエラーを潰していくことでOSSの世界は維持されているのだなという気づきを得ることができました。

まとめ

  • OSSの世界はスピードが速い。しっかりと問題を報告すれば、解決してくれる。もちろん、自分で解決できたら、もっとベター。

(番外編)Railsのバージョンアップデートをやって思ったこと

  • ライブラリの切り替えコストはかなり高いので気をつける必要がある。

Rails4系から、デフォルトでEnumが追加されたため、simple_enumを使うユーザーは減り、そのためにメンテが滞っていたとも考えられます。 ライブラリの切り替えコストは高いのはもちろんですが、適切なタイミングで最新のデファクトスタンダートに追従していかないと、いつの間にか負債化していく危険性もあるので、Rails側の動向などにキャッチアップする重要性を再認識しました。

今週のRailsに関する有益な情報を得るには、以下のサイトが良さそうです。