『Railsアップグレード百景』という題で発表した
2019年3月22日にRails Developers Meetup 2019というイベントで発表してきました。SpeakerDeckで当日利用した発表資料を公開しています。
https://speakerdeck.com/r7kamura/railsatupuguredobai-jing
当日あまり時間が無くて省略した部分について書きます。
依存Gemのアップグレードの話
Railsのアップグレードと同じくらい、依存しているGemのアップグレードは大変です。当日も少し触れましたが、例えば Rails 4 では 2.x でしか動かず、Rails 5 では 3.x でしか動かない、というような Gem が幾つかあり、この手の Gem は Rails と同時にアップグレードしないといけないため、影響範囲が大きくなり検証も大変です。
他にアップグレードに重なると大変なものとして、RDB や KVS にデータをシリアライズして保存するタイプの Gem で、バージョン変更によってシリアライズ形式が変わるようなものへの対応も大変でした。例えば resque_mailer がその一例で、保存するデータの形式が配列からハッシュに変更されるため、データが保存されている状態でアップグレードすると、格納されたデータがデシリアライズされず失われてしまう…というような問題があります。
この手の知見が幾つかあるので発表資料に含めようかと思ったのですが、個々の Gem の話をしても一般化しにくいだろうなと思い、当日はあまり突っ込んだ話はできませんでした。興味がある人は何かのタイミングで尋ねてください。
Railsアップグレード担当者の話
自分のところに仕事が来るときのケースで多いのは、「Railsアップグレード等の開発基盤の改善はビジネス的な指標に直接表れにくいため、人事評価の点で困ってなかなか社員に担当してもらいにくい」というケースです。大きくサービスごとに部が分かれていて、技術を横断的に見ているのは基本的にはCTOだけ (実働部隊は特別設けられていない)、という人員配置の組織では発生しがちな背景だと思います。
こういった背景から、Railsアップグレードは業務委託で依頼するとわりと上手く回ることが多いですねということが言いたかったんですが、当日はこの辺りで残り10秒ぐらいしか時間が無く、単純にRailsアップグレードの仕事募集してるのでくださいという感じの話になってしまいました…。
Contributing to Railsの話
RailsにIssueやPull Requestを出すときのガイドが公開されていて、Railsアップグレードをやるときにも一度読んでおくと良いですよという話をしたかったんですが、これも時間が無くて当日はスキップしてしまいました。
ActionControllerやActiveRecordを動かすための最低限のコード例がテンプレートとして紹介されているので、これが特に役に立つことが多いです。rails newして試さなくても、例えば1ファイルの簡単なスクリプトでControllerなどの挙動を試せます。Railsアップグレードをやっていると、これはRailsの不具合か?という箇所を見つけがちなので、自分の場合はこういうときに問題を切り分ける手段として利用しています。Railsアップグレードを期にRailsにPull Requestを出せると良いですね。
https://edgeguides.rubyonrails.org/contributing_to_ruby_on_rails.html
Rails 6への期待
Railsアップグレードの文脈で言うと、個人的にRails 6には複数データベースへの対応に期待しています。というのも、各社独自の複数データベース対応用Gemやパッチを利用していることが多く、これがActiveRecordの内部的な実装を色々と利用しているため、アップグレードのたびにその実装が変わって壊れるんですね。なので、Rails側で公式に対応してくれるのであればこの辺りが安定すると思うので期待しています。