Ruby
Rails
Gem
versionup

Rubyバージョンアップに伴うGem Update手順

はじめに

 Rubyバージョンアップや、古いGemのバージョンアップなどを行う中で、自分なりの手順というものができてきたので、その手順をここに書きたいと思います1。古くから使用されていたGemは、メンテナンスされていなかったり、バージョンアップしたRubyで動くかが不明でした。そのため、Gemのテストコード実行なども行ったので合わせて書いていきます。

Gem情報の確認

Githubのリポジトリにアクセスして下記の情報を中心にアップデート情報を確認していきます。
確認する部分は下記のとおりです。

  • Gemのバージョンの差異が、大きくサービスに影響を及ぼすか?
    • READEME
    • CHANGELOG/CommitLog
    • MIGRATING.md/UPGRADING.md
  • 対象のRubyバージョンが対応している・テストコードが実行されているか?
    • gemspec
    • circle.yml/.travis.yml
  • リポジトリがメンテナンスされていなかったり、Gemが他のGemにマージされていないか?
    • README

これらの情報を確認して、現在のGemのバージョンアップ、代替Gemの導入、使用Gemの廃止などを行います。

README.md

基本中の基本。こちらをざっと眺めて、気になる情報があるかを確認します。
リポジトリによりますが大きな変更がある場合は、下記に記載するMIGRATING.md/UPGRADING.md
などへのリンクが貼ってあったり、ここにそのままバージョンアップに関する注意点が書いてあったりします。

CHANGELOG.md

変更履歴です。リポジトリによってはReleases部分に変更履歴が記載されている場合があります。
GemによってはCHANGELOGがない場合もあります。その場合は、、、面倒ですがCommitLog
を確認して履歴を追ったりします。

MIGRATING.md/UPGRADING.md

バージョンアップによって使用するメソッドのインターフェースが大きく変わる場合は、
MIGRATING/UPGRADINGなどの名前でガイドが作成されていたりします。それに従って
使用するメソッド名や引数を変えます。ただ、ここに書かれていない変更などもあるので
実際は、irb/rails consoleで動かしてみたり、サービスのテストコードを実行して動作確認を行いました。

gemspec

Gemに関する依存関係、バージョン情報が記載されています。
Gemによりますが、記載されている情報がマチマチ(Rubyのバージョンなどが未記載)なので、
これ以外にも他の情報をチェックするようにしました。

circle.yml/.travis.yml

継続的インテグレーション(CI)ツールの設定ファイルです。

  • CircleCI
  • TravisCI

CIツールで、どのRubyバージョンでテストコードが実行されているかを確認します。
全面的に信頼できるわけではありませんが、対象のRubyバージョンがここに書かれていているようであれば、ある程度安心です。

Wiki/専用Webページ

大きなリポジトリだとWikiや専用Webページに様々な情報が記載されています。
リポジトリによっては上記で書かれている情報がそのままWiki/専用Webページに書かれていたりするので、必ずチェックします。

Gemのテストコードの実行

情報が少なく、アップデート後のRubyバージョンで動くか微妙だったGemもありました。いくつかのGemはGem自身のテストコードを実行しました。

  1. ローカル環境に対象のRubyバージョンをインストール
  2. Githubのリポジトリからダウンロード
  3. テスト対象のGemを動かすためのGemをインストール
  4. テスト対象のGemのテストコードを実行

CONTRIBUTING.mdなど、開発者向けの情報を確認しつつ実施しました。ただ、リポジトリによってはCONTRIBUTINGなどの開発情報ないものもあるので、その場合は、、、まあなるようになります。

動作確認ができたら、対象のRailsプロジェクト内で

$ gem update [gem名]

これをひたすら繰り返します。

さいごに

まめなGemアップデートは大事です。一気にやるもんじゃないです。しっかりとテストコードを書いておけば楽ですが、テストコードだけでチェックしきれない部分もあるので、細かくチェックしたいときはやはり手を動かす必要があるかと思います。チーム内で持ち回りして、まめにアップデートしましょう。


  1. 自分なりの手順なので、これが正解というものではないです。