背景
- Rails のアプリ開発で gem の更新を日々行っています。
- バグフィックスやセキュリティ対応は取り込み必須です。
- 多数の gem を利用していると gem 更新なしの日の方が少なかったりします。
- ルーチンワーク的な部分を極力自動化したい。
gem更新の検知と取り込み
- 定期的に
bundle updateを実行してgem更新を検出する。- バージョン固定している gem もあるので
bundle outdatedの結果も参考にする。
- バージョン固定している gem もあるので
- 更新に対しては通常の開発と同じく ci test に投入する。
- ci test の成功は判断材料になる。
- 更新の検知から ci test が成功するかどうかまでの手続きを定期的に実行し、gem 更新の取り込み判断の助けになっている。
変更内容調査方法
- (ここからが本題) 上で書いた通り、自動で ci test を行うことでかなり省力化できたが、ci test が失敗する場合、あるいは、gem のバージョンが大きく変わった場合など、変更内容を把握したい場合がある。
- 変更内容の把握のために参照する場所は、全ての gem で同じとはいかないため、最終的にはケースバイケースの調査となる。
- これまでの見たもので変更内容の把握に役立った場所を挙げてみる。
- 調べた gem は、全て github に置かれていた。
変更内容の記載場所(例)
- 変更履歴記録用のファイルがある場合 CHANGELOG.md, Changelog.markdown,History.md,...(ファイル名は色々、バージョン番号の先頭に'v'があったりなかったり)
- aws-sdk-ruby(2.7.15 -> 2.7.16)
v2.7.16/CHANGELOG.md - fabrication(2.16.0 -> 2.16.1) 2.16.1/Changelog.markdown
- childprocess(0.6.1 -> 0.6.2) v0.6.2/CHANGELOG.md
- hashie(3.5.4 -> 3.5.5) v3.5.5/CHANGELOG.md
- cucumber-rails(1.4.4 -> 1.4.5) v1.4.5/History.md
- releases に変更内容が記載してある場合
- faraday(0.10.1 -> 0.11.0) tag/v0.11.0
- minimagick(4.5.1 -> 4.6.0) tag/v4.6.0
- rb-fsevent(0.9.7 -> 0.9.8) tag/v0.9.8
- will_paginate(3.1.3 -> 3.1.5) tag/v3.1.5
- 変更履歴が見つけられず、コード差分を見るしかない場合
- ffi(1.9.17 -> 1.9.18) 差分(1.9.17...1.9.18)
- .travis.ymlの変更内容 から ruby-2.4.0 対応が含まれることが分かります
- oauth2(1.3.0 -> 1.3.1) 差分(v1.3.0...v1.3.1)
- .travis.ymlの変更内容 から ruby-2.4.0 対応が含まれることが分かります
- CHANGELOG.mdの変更内容 から、履歴の更新が都度行われてないことが分かります
- fb_graph2(0.8.0 -> 0.9.0) 差分(v0.8.0...v0.9.0)
- API v2.8対応、ruby-2.4.0 対応されていることが分かります
- ffi(1.9.17 -> 1.9.18) 差分(1.9.17...1.9.18)
以上、役に立つレベルまでまとめられず、作業の現状記録といった内容ですが、書いてみました。
定期的に gem 更新をする場合、みなさんどんなやり方(工夫)されているんでしょうか。
追記:
gemnasium なるものの存在をおしえて頂きました。