ssk blog

バンコクで働くエンジニアのメモ

XcodeのコードカバレッジをCircleCIでCoverallsに飛ばし可視化する方法

こんにちは。
CyberAgentAdventCalendar13日目を担当するsskです。
タップル誕生のiOSアプリを作っています。

先日、「普段の開発でなかなかできないことで、ユーザーにメリットがあるものならなんでもOK」っという目的で1泊2日の開発合宿に行ってきました。

iOSチームでやりたいことリストを作成し、自分は『テスト書く』にしました。
本当はFaceIDを使ったログインとかやりたかったけどね...

やりたいことリスト

- テスト書く
- FaceIDを使ったログイン
- 3Dタッチ
- Cloud Firestore
- etc...


開発合宿で、自分は以下のことをしました


この記事では、カバレッジを可視化する方法について書きたいと思います。

カバレッジを可視化する方法

① CoverallsにGithubリポジトリを連携

カバレッジの取得には、Coverallsを使いました。

CoverallsにGithubリポジトリを連携させるとSWFT SET UP FOR COVERALLSという画面になります。
TravisCIを使っていれば、設定が簡単そうです。
今のプロジェクトではCircleCIを使っているので、spec_helper.rbに設定を書けばCoverallsにカバレッジを飛ばすことができそうです!

...正直、何を書けば良いかわかりません。

f:id:ssktm:20171211203704p:plain


DOCSを見るとCommunity developed Swift supportがありました。


f:id:ssktm:20171211204523p:plain



realm/SwiftCovを見ると、もう終了していました....

f:id:ssktm:20171211204826p:plain


② slatherを使ってCoverallsにカバレッジを飛ばす

SwiftCovは終わってたので、似たようなライブラリであるslatherを使いました。
https://github.com/SlatherOrg/slather
github.com


設定することは3つだけです。

Gemfileに gem 'slather'を追加
 gem 'slather'
circle.ymlに bundle exec slather を追加
 post:
   - bundle exec slather
.slather.ymlを作成
 ci_service: circleci
 coverage_service: coveralls
 coverage_access_token: Coverallsに書いてあるrepo_token
 xcodeproj: 〇〇.xcodeproj
 workspace: 〇〇.xcworkspace
 scheme: 〇〇


これでCircleCIを回したら、コードカバレッジが飛ばすことができました。

f:id:ssktm:20171211211007p:plain


ん?テスト書いてないのにすでに5%あるぞ!?


Xcodeのコードカバレッジは、『アプリ起動時に呼ばれるコードは、カバレッジに含まれる』ようです
詳しくはこちらの記事に書きました。

補足: slatherとfastlaneについて

slatherは、fastlaneのActionにあるので、設定をすればターミナルからコマンドを叩いてテストを実行してカバレッジを送ることができます。
(ちょっと試してみましたが、上手くいかず...早くテストを書きたかったので断念しました)

f:id:ssktm:20171212213513p:plain


おわりに


最終的にGtihubのREADMEにバッジを貼りました。

f:id:ssktm:20171211212813p:plain


テストを書かないでプルリクを出すとカバレッジが下がってSome checks were not successfulになるので、チームメンバーがテストをいつも意識するようになりました。みんな嫌がっています。笑

f:id:ssktm:20171211213127p:plain


タップル誕生では、少しのバグによって発生する機会損失が大きく、カバレッジを意識する仕組みを導入し、テストの土台を作ることで、「ここはバグが出そうだからテストを書いておくか」という意識に(少しは)なったと思います。
また、t_wadaさんにTDDワークショップを受けて、テストを書くことでコードが綺麗になることは身を持って実感したので、テストは積極的に書いていきたいです。


ちなみに開発合宿では、コードカバレッジを可視化したあと、テストをひたすら書いてましたが、1%くらいしかカバレッジは上げることができませんでした!
以上!