kei-p3’s blog

kei-pによる技術共有と思考整理

Appraisalで依存ライブラリのバージョンごとに開発をする

はじめに

Grape APIのdocumentをrspecから生成するためのライブラリとして、autodoc-grapeというGemを作っていたのですが、 新しく作成したプロジェクトに導入してみたところ、Grapeのバージョンが0.16.xになった際に大幅な変更があったようで、全然機能しないという事態が発生しました。

基本的にGemは、gemspecなどで依存ライブラリのバージョンを指定するのですが、今回のようにGrape (0.16.x)と Grape ( < 0.16.x)の両対応をしたい場合はどうやって開発すればいいんだ?と調べたところ、Appraisalという便利なGemを発見。

今回はその設定と使い方を紹介。

導入と設定

まずは、gemspecに開発用として'appraisal'を追加。

  spec.add_development_dependency 'appraisal'

そして、bundle installをしてライブラリをinstallしたら、Appraisalsというファイルを作成する。 今回は、Grapeのマイナーバージョンの違いごとのテストをしたかったので以下のようなファイルを作成。

appraise 'grape-14' do
  gem 'grape', '~> 0.14.0'
end

appraise 'grape-15' do
  gem 'grape', '~> 0.15.0'
end

appraise 'grape-16' do
  gem 'grape', '~> 0.16.2'
end

そして、appraisal installを呼ぶとそれぞれ指定されたライブラリが別々でinstallされます。

各バージョンごとにrspec実行

あとは、Appraisalsに書いた名前を指定すると定義されたバージョンのライブラリで実行することができます。

appraisal  grape-16 rspec

名前を指定しないと、全パターンを網羅します。

appraisal rspec

これで無事、分岐処理を作成し各Grapeのバージョンごとのspecでの動作確認をできました。

最後に

公開してから、なかなかGrape APIの新規プロジェクトを作ることがなく気づかなかったのですが、バージョンが変わるとがっつりメソッド消える、クラス名が変わるなんてのは結構あるんですね。。。 一度公開したからには、ちゃんと運用管理しなけれいけないし、変更履歴はこまめにチェックしないとなと反省しました。