IT・技術研修ならCTC教育サービス

サイト内検索 企業情報 サイトマップ

研修コース検索

コラム

Ruby on Rails 海外事情コラム

CTC 教育サービス

 [IT研修]注目キーワード   Python  UiPath(RPA)  最新技術動向  Microsoft Azure  Docker  Kubernetes 

第49回 Railsアップグレードのための3つの鍵 (野田貴子) 2019年10月

こんにちはー。野田貴子です。
海外のコラムで面白いものがあったので、意訳してお届けします。
ご参考ください。

Ruby on Railsのバージョン6がリリースされたため、Rails 4のアップデートは、セキュリティ関連も含めてこれ以上行われなくなりましたね。バージョンが古いRailsを使っている多くのチームが、メジャーアップデートの必要性に駆られていることと思います。

こちらのブログに、Railsのアップグレードを生業にしている方からのアドバイスがありましたので、一部をご紹介します。詳しい解説はぜひリンク先の記事をお読みください。

3 keys to upgrading Rails
http://blog.testdouble.com/posts/2019-09-03-3-keys-to-upgrading-rails.html

---

まず、悪いニュースをお伝えしましょう。みなさんのアプリが地球上で最も単純で慣習に準拠したコードでできていない限り、Railsのメジャーアップグレードは時間と労力のかかる作業になります。しかし、良いニュースもあります。適切な量の作業を行いツールを活用することにより、Railsのアップグレードを進行中の機能開発と並行して、段階的かつ予測可能的に実行することができるようになります。

主要なRailsのアップグレードには痛みを伴う傾向がある

Railsのメジャーアップグレードがエラーになりやすく、定期的に、時にはサポートが切れたバージョンのソースをも残しておく必要があるのはなぜでしょうか。Railsが生産的な開発環境であるのと同じ「魔法」が関係あるのかもしれません。Railsではほとんどのアプリケーションの動作は、明確なコントラクトで明示的なAPIを呼び出すのではなく、Railsのデフォルトから目に見えないように継承されます。つまり、Railsが大幅に変更された場合、それらの変更がアプリにどのように影響するかも同様に見えないのです。

アプリが新しいバージョンで動作するかどうかを確認する唯一の確実な方法は、起動して確認することです。運がよければ、テストのエラーや非推奨の警告が表示されます。そうでない場合は、30フレームもの深さのバックトレースと同時期のプルリクエストをあれこれ試してみて、Railsに一見無関係な変更がアプリを壊したことを苦労して発見するために、何時間も要することでしょう。

私たちはどのRailsバージョンでもこのような話を多数のチームから繰り返し見てきた結果、Railsのメジャーアップグレードによくあるフラストレーションが以下であることが分かりました。

- Railsの現在のバージョンとターゲットのバージョンの間で何が壊れるのかを事前に知るのは難しい。
- アップグレードに必要な変更は非常に広範囲に及ぶため、アップグレード作業が完了するまですべての機能開発を停止する必要があると感じることがある。停止しない場合は、長引くブランチに隔離されたアップグレードが、マージの競合がますます厳しくなるにつれて気が重くなる状況に発展する。
- コードを新しいAPIに移行して段階的に前進させると、新しいバージョンのRailsで必要になった新しい方法を実行するのにまだ慣れていない可能性のある他の開発メンバーが、その進捗を簡単に台無しにすることができる。

この投稿では、これら3つの問題点をすべて軽減する戦略をシェアします。ただし、重大なソフトウェアの症状を和らげるためのほとんどの方法と同様に、これらのアプローチはいずれも特効薬ではありません。難しいものは難しいのです。Railsのアップグレードをより達成可能にするだろういくつかのプラクティスをお伝えするのみです。

一度に1つのリリースを
課題

後続のバージョンのRailsのどのような変更によって、アプリケーションのコードの更新が必要になるかを知るのは困難です。

解決策

最終的な目標とするバージョンに直接ジャンプしないでください。代わりに、Railsを一度に1つずつアップグレードしてください。

アプリをデュアルブートする
課題

アプリがRailsの次のバージョンで実行されるには時間がかかりますが、ブランチを長引かせるのも、機能開発を停止するのも有効なアプローチではありません。

解決策

アプリとそのテストスイートをどちらのバージョンのRailsでも起動できるようにして、進行状況を頻繁に問題なくマージできるようにします。

CIを活用してレグレッションを防ぐ
課題

アップグレード関連の変更を頻繁にマージする場合でも、古いバージョンのRailsをターゲットとする他の開発メンバーが新しいコードを書き続ける可能性があり、コードベースを二進一退させてしまいます。

解決策

アップグレードのためにすでに更新されている箇所については、できるだけ早く、新しいRailsバージョンの下でCIが通過するようにします。

---

元の記事にはさらに詳しい説明が書かれていますので、ぜひ参考にしてください。
http://blog.testdouble.com/posts/2019-09-03-3-keys-to-upgrading-rails.html

※本コラムは上記の元の記事を筆者の独自の見解で意訳したものです。

 


 

 [IT研修]注目キーワード   Python  UiPath(RPA)  最新技術動向  Microsoft Azure  Docker  Kubernetes