Railsのアップグレードに際して作ったGem

Ginza.rb 第49回の最後のトピックで時間の都合で話さなかった持ち寄りネタ帳として、Railsのアップグレードに際して作った Gem とその背景という形でざっくり記す。

activerecord-oracle_enhanced-adapter-monky_patch_755

https://rubygems.org/gems/activerecord-oracle_enhanced-adapter-monky_patch_755

もともとは、たしか Oracle アダプタ利用での Rails 4.2.0 から 4.2.1 にアップグレードする際に AR の find_by や where でタイムゾーンの時差ずれが起きる問題に対応するパッチを集めた Gem だった。その後、Rails 5 でタイムスタンプ型の変更が入った際に、スキーマの変更を行なうことなく Oracle アダプタを使うことをできるようにという Feature まで持たせて元々の目的を越えた Gem にしてしまった例となる。

例えば、Rails 5.1 でプライマリキーのデフォルトを integer から bigint にみたな話もそうだけれど、アップグレードに際して既存の永続スキーマを変更するのはなかなか重い話になることがあるので、その問題とは切り離してまずはスキーマを除いたアップグレードをできるようにした Gem となる (と書くといい話っぽい) 。

Everlasting

https://rubygems.org/gems/everlasting

Rails 5 で AC::Parameters が HWIDA を継承しなくなったことによるエラーを回避するために作った Gem となる。Rails 4.2 までの Hash として備えていたメソッド呼び出しが残ったまま運用で呼び出された場合に障害となってしまうため、そういった呼び出しの証跡をログに残すに留めて Rails 4.2 までの振る舞いをするようになる。

Screamers

https://rubygems.org/gems/screamers

Rails のアップグレードで RDBMS 型の変換が必要になった際の変換コマンドを提供する Gem で、自分的には activerecord-oracle_enhanced-adapter-monky_patch_755 を消すために作った Gem となる (Rails 5 で RDBMS のタイムスタンプ型の変更に追随する目的) 。特定の RDBMS 型の変換量が多い場合に、手作業で間違えなく行なうことが面倒なため、それ用のマイグレーションファイルを生成するコマンドを追加する Gem として作成した。


これらは主にワークアラウンドを切り出しただけの Gem になるため、これらの Gem すべてが Gemfile から不要になった Rails アプリケーションを目指して行くことになる。