rubygems-test で rubygems インストール時にテストを行う

Ruby のパッケージングマネージャの rubygems と Perl の CPAN と比較して、rubygems の残念なところの一つに『インストール時にテストを行わない』ことが挙げられます。rubygems は gem install package で一発で入れられる事は便利なんですが、インストール時にテストが行われないため、実際にその環境で正しい挙動をするとは限りません。また、rubygems で入れたパッケージのテスト方法もコマンド一発で簡単にできるわけではないのでめんどくさかったりします。なにより問題なのが、インストール時にテストが行われないため『開発者がテストをさぼりがち』になってしまいます*1。
最近 rubygems でも CPAN と同じように、インストール時にテスト可能なパッケージはテストを行い、失敗したら基本的にインストールできない(設定で変えられます)仕組みを持ったライブラリ、rubygems-test が登場しました。

インストールは簡単で

gem install rubygems-test

して、~/.gemrc の設定に以下の感じで設定を追加します。(詳しくは https://github.com/rubygems/rubygems-test とか読んでください)

test_options:
  auto_test_on_install: true # package のインストール時に自動でテストを行うか
  test_on_install: true # package のインストール時にテストを行うか(Y/n)で尋ねられる
  install_development_dependencies: true # add_development_dependency なパッケージもインストールするか
  test_development_dependencies: false # add_development_dependency なパッケージもテストするか(たぶん)
  upload_results: false # テスト結果を test.rubygems.org にアップロードするか
  force_install: false # テストに失敗しても強制的にインストールするか
  force_uninstall_on_failure: false #  テストに失敗したらアンインストールするか(たぶん)

これで"テストの設定が適切にされている"ライブラリの場合、自動でテストが実行されます。"テストの設定が適切にされている"ライブラリというのは以下の条件を満たしてるライブラリです。

  • パッケージに .gemtest が含まれている
  • rake の test タスクがある

Jeweler などでパッケージのひな形を作ってる場合、Gemfile から勝手に依存ライブラリ周りの設定は生成されるので、.gemtest を作って git add して、rake spec なタスクしかなかったら、rake test なタスクで spec が実行される(ちょっと微妙ですが…)タスクを用意すればそれだけで終わりで簡単ですので、gem ライブラリの作者は用意すると良いと思います!
また、rubygems-test を入れると gem test package 名でテストを実行でき、結果のレポートを test.rubygems.org にアップロードすることもできます。

というわけで、最近は rubygems も徐々に CPAN に近づいてきた感があります。まだ rubygems-test プロジェクトは始まって4ヶ月ぐらいしかたっておらず、rubygems によりテスト文化を根付かせるためにも、是非みなさん使ってみましょう。特に gem の作者は是非 .gemtest を設置して、インストール時にテスト可能なパッケージを作っていきましょう :D

*1:CPAN ならテストが無かったりテストが適当なパッケージはクオリティが低いライブラリと認定しますよね