Elixir
Coveralls
ElixirDay 19

excoveralls で Elixir プロジェクトのカバレッジレポートを取る

More than 1 year has passed since last update.

coveralls.io とは?

カバレッジレポートを登録しておける Web サービスです。
最初のころは Rails とかだけ対応だったと思うのですが(うろ覚え)、今は python, Node.js, Scala などなども簡単に使うことができるようです。とにかく便利です。GitHub の public repo なら無料!

excoveralls

では、他の言語はどうなっているのか?というと、特定のフォーマットで json ファイルを送ると、それをもとにカバレッジレポートを登録できます。詳しくはこちら
この辺りの面倒なところを実装してくれているのが、excoveralls というわけです。

コマンドライン実行もできるし、coveralls と直接やり取りもできるし、travis 連携もできて便利。
coverex ってのもあるみたいだけど、ここでは取り上げないです。

excoveralls の作者

parroty さんが作っています。Elixir のライブラリを多く作られていて、extwitter などもこの方の作成したライブラリです。extwitter の日本語情報は、こちらの記事に詳しくありますね。

excoveralls 何してるの?

基本的には、カバレッジ情報取得 -> フォーマット整える -> 出力(コンソール、coveralls.io へ POST)を実行します。

カバレッジ情報の取得には Erlang の cover というライブラリを使用しています(あまり詳しくない)。

カバレッジ部分を任せているところを考えると、フォーマットを整えているところ、サービスとの連携部分が excoveralls のメインなところですかね。コンソールに色付きで表示するための細かい部分、coveralls.io へ送信する json ファイルの生成などです。

ざっくりですが、こんなことをしています。

coveralls.io に送信してみる

あとは excoveralls の README 見れば使うことはできると思うのですが、タイトル通り coveralls.io への送信方法について書きます。

下準備

プロジェクトに excoveralls の依存関係と設定を追加します。

def project do
  [ app: :ltsv,
...
    test_coverage: [tool: ExCoveralls]      # ここと
  ]
end

defp deps do
  [{:excoveralls, "~> 0.3", only: :dev}]    # ここ
end

後はいつも通り mix deps.get && mix test とかすると下回りの準備は完了です。

coveralls.io のアカウント、TOKEN

coveralls.io でアカウントを作って、試したいリポジトリを追加してみてください。

TOKEN は coveralls.io の自分のリポジトリ画面にあります。見つけにくいですが、リポジトリのページ右下に REPO TOKEN という欄が確認できると思います。ちなみにリポジトリごとに TOKEN は別なので注意。

coveralls..png

coveralls.io へ送信する

ここまでできたら準備完了しているので、mix coveralls.post YOUR_REPO_TOKEN を実行してください。
上手くいけば結果も coveralls.io 上で見れます。

余談

ちょっと前まで curl コマンドに送信部分が依存していたのですが、今は hackney 使うようになってます。README に TODO として書かれてたのを見つけて、pull request してみたらマージされたためです。

https://github.com/parroty/excoveralls/pull/12

でも今思うと、hackney じゃなくてもっとデフォルトのものに依存させた方がよいような気が。。。依存関係とか大丈夫かしら。。。

Pro tip: バッジ

上の画像にもありますが、BADGE URLS にバッジの URL があるので、GitHub リポジトリ上でいい感じに表示できるのでオススメです。

Coverage Status

最後に

簡単にですが excoveralls について紹介してみました。

Erlang の cover 使っているので、もしかしたら上手くいかないところあるのかなと思っているのですが、私の使っているレベルだとあまり気にしなくてもよさそうです。

明日は @k1complete さんです。

Resources