Travis CIでOCamlを使うまでの道のり

Travis CIGithubのhookと連携して、push時に自動的にテストを通す、所謂CI、継続的インテグレーションツールというやつだ。
本記事ではTravis CI自体の詳細な使い方に触れることはしない。公式ドキュメントをたどれば結構親切に説明されている。

Travis CIで使える言語は以下のリンクで見ることが出来る。

Languages - Travis CI

ここでひとつ問題がある。

OCamlのサポートがない。

これは由々しき事態だ。人類の英知と希望であるOCamlが使えない。全人口の半数くらいが自分の書きたいプログラムを赤裸々に表現できないことに苦しみを覚えることだろう。
ということで、本記事ではTravis CIでOCamlを使うにはどうすればよいかを示す。

OCaml公式のTravis CI bindingを入手する

と思ったが、実は公式からbindingが提供されていた。ただし、Webサイトには特に誘導がなく、Githubに無造作にリポジトリが置いてあるだけだった。

github.com

ここに.travis-ocaml.shというのがあるので、これをダウンロードする。

.travis.ymlを用意する

OCaml向けに.travis.ymlで必要なフィールドは3つ。

1. install ... 依存パッケージのインストールコマンド
2. sudo ... sudoを許可するかどうか
3. env ... 環境変数

ざっくり言うと、sudoを許可して環境変数にインストールしたいOCamlのバージョンを指定、そしてインストールコマンド(さっきの.travis-ocaml.shを叩く)を書いておけばAll rightだ。

僕は今回PythonのnoseやMakefileと組み合わせて使っていたのでこんな感じになった。

language: python
python:
  - '2.7'
install: "pip install -r .install.txt; bash -ex .travis-ocaml.sh"
sudo: required
script: make test
env:
  - OCAML_VERSION=4.02

pushする

これでGithubにpushすれば、(Travis CIとの連携を済ませていれば)hookから勝手にTravis CIが走り、build phaseの途中で問題なくOCamlがインストールされるはずだ。

ちなみに、自分でsudo apt-get install ocamlを叩くこともできるのだが、これだとおそらくTravis CIサーバのパッケージリポジトリの関係上、2015年10月時点でOCamlのバージョン3.12がインストールされてしまう。
僕の場合は4.02で追加されたBytesモジュールが使えなくて困ったが、このようにすれば任意のバージョンがインストールできる。