XcodeのコードカバレッジをCircleCIでCoverallsに飛ばし可視化する方法
こんにちは。
CyberAgentAdventCalendar13日目を担当するsskです。
タップル誕生のiOSアプリを作っています。
先日、「普段の開発でなかなかできないことで、ユーザーにメリットがあるものならなんでもOK」っという目的で1泊2日の開発合宿に行ってきました。
iOSチームでやりたいことリストを作成し、自分は『テスト書く』にしました。
本当はFaceIDを使ったログインとかやりたかったけどね...
やりたいことリスト
- テスト書く - FaceIDを使ったログイン - 3Dタッチ - Cloud Firestore - etc...
開発合宿で、自分は以下のことをしました
この記事では、カバレッジを可視化する方法について書きたいと思います。
カバレッジを可視化する方法
① CoverallsにGithubのリポジトリを連携
CoverallsにGithubのリポジトリを連携させるとSWFT SET UP FOR COVERALLSという画面になります。
TravisCIを使っていれば、設定が簡単そうです。
今のプロジェクトではCircleCIを使っているので、spec_helper.rbに設定を書けばCoverallsにカバレッジを飛ばすことができそうです!
...正直、何を書けば良いかわかりません。
DOCSを見るとCommunity developed Swift supportがありました。
realm/SwiftCovを見ると、もう終了していました....
② 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を回したら、コードカバレッジが飛ばすことができました。
ん?テスト書いてないのにすでに5%あるぞ!?
Xcodeのコードカバレッジは、『アプリ起動時に呼ばれるコードは、カバレッジに含まれる』ようです
詳しくはこちらの記事に書きました。
おわりに
最終的にGtihubのREADMEにバッジを貼りました。
テストを書かないでプルリクを出すとカバレッジが下がってSome checks were not successfulになるので、チームメンバーがテストをいつも意識するようになりました。みんな嫌がっています。笑
タップル誕生では、少しのバグによって発生する機会損失が大きく、カバレッジを意識する仕組みを導入し、テストの土台を作ることで、「ここはバグが出そうだからテストを書いておくか」という意識に(少しは)なったと思います。
また、t_wadaさんにTDDワークショップを受けて、テストを書くことでコードが綺麗になることは身を持って実感したので、テストは積極的に書いていきたいです。
ちなみに開発合宿では、コードカバレッジを可視化したあと、テストをひたすら書いてましたが、1%くらいしかカバレッジは上げることができませんでした!
以上!