rosrubyのテスト実行環境が欲しかったので、
Travis CIを使って見ました。
Travis CIは継続的インテグレーションをクラウド上で行うサービスです。
継続的インテグレーションというのは、ソフトを少しでも書き換えるたびに
すべてのテストを自動でやり直す仕組みだと思います。
普通は
Jenkinsとか使うんだと思いますが、個人だとサーバーとかないし、
オープンソースならTravis CIを使うのがナウいみたいです。
Travis CIは様々な言語に対応しており、例えば、rubyの1.8, 1.9, jruby1.8など、同じ言語でも異なるヴァージョンでテストできたりします。
基本的にGitHubとの連携で使うみたいです。
ここの解説が詳しくていいです。
http://mochizblog.heroku.com/21
.travis.ymlというYAMLファイルに設定を記述します。
私の環境だと↓のような感じ。
language: ruby
rvm:
- 1.8.7
- 1.9.3
- jruby-18mode # JRuby in 1.8 mode
env:
- ROS_MASTER_URI=http://localhost:11311 ROS_PACKAGE_PATH=$HOME RUBYLIB=$HOME/builds/OTL/rosruby/rosruby/lib
- rvm rubyの実行環境の切り替えの設定
- env 環境変数の切り替えの設定。複数ある場合は横にならべる。
rubyで、version1.8.7, 1.9.3, jrubyの1.8モードでビルドします。
envに複数書くと、それとversionの掛け算の数だけタスクが生成されます。
つまり、
- 1.8.7 & ENV1
- 1.9.3 & ENV1
- jruby & ENV1
- 1.8.7 & ENV2
- 1.9.3 & ENV2
- jruby & ENV2
の6回テストしてくれる。
なお、実行されるコマンドは言語ごとに違いますが、rubyの場合は、リポジトリのルートで
$ bundle exec rake
が実行されます。
なので、Gemfileに必要なgemを入れて(rakeを含む)、rakeでテストが走るようにしておけばOK。 rake testではないのがポイント。
Gemfileは以下のようにしてみました。rakeもいれないといけないって書いてありました。
source 'https://rubygems.org'
gem 'rosruby_msgs'
gem 'rake'
gem 'yard'
# ここからはROS情報
なお、rosrubyはテストの実行にroscoreとROSのメッセージファイルを必要とします。
Travis CIではaptで必要なソフトを入れられるんですが、本家とlaunchpadのみ。
で、ROSは独自なので困りました。
そこで、ノリで
- ruby版のroscoreの作成
- gemでrosruby_msgs(rosruby用コンパイル済みメッセージ)を公開
という2つをやりました。
gem install rosruby_msgsでrosrubyであらかたコンパイルしたメッセージがインストールできるようにしました。(ほとんど意味ないです。)
ruby版roscoreは簡単かと思いましたが案外難しかった。仕様が明らかじゃないし。