【iOS/Xcode】Slatherでテストカバレッジレポートの生成方法!
この記事からわかること
- iOS/XcodeでSlatherを使ったカバレッジレポートのアーティファクト化
- テスト実行やカバレッジ計測の実装
index
[open]
\ アプリをリリースしました /
環境
- Xcode:26.0.1
- iOS:26
- Swift:6
- macOS:Tahoe 26.0.1
Slatherとは?
「Slather」はXcodeプロジェクトのコードカバレッジを解析して可視化するツール です。Ruby製のコマンドラインツールで、CI環境との連携も簡単に行うことができるので最終的なアーティファクト(※)生成に活用することが可能です。
※ ソフトウェア開発における、成果物(=アーティファクト)として扱えるように明確な形にまとめること
テストカバレッジレポートを生成するためには当たり前ですがテストコードの記載が必要になります。Xcodeでは「XCTest」と「Swift Testing」の2つの方法がありますが「Swift Testing」の方が新しく使い勝手も良いためおすすめです。テストコードの実装方法は以下の記事を参考にしてください。
インストール方法
SlatherはBundlerを使用してインストールしていきます。「GemFile」に以下のように追加してbundle installを実行してください。
# frozen_string_literal: true
source "https://rubygems.org"
gem "slather"
$ bundle install
テストカバレッジレポートの生成
テストカバレッジレポートを生成するためには事前にテストを実行しカバレッジデータが生成されている必要があります。テストの実行はGUIでもCLIでもどちらでも大丈夫ですが成功しないとカバレッジデータが生成されないので注意してください。
また例えばCLIから$ clean testで行う際は-enableCodeCoverage YESを付与しなとカバレッジデータ(.xccovreport / .xccovarchive)を生成しないので注意してください。GUIの場合はこちらの記事を参考にしてください。
実際に生成するにはslather coverageコマンドを実行します。引数では出力形式や対象プロジェクトファイルなどを指定します。
$ bundle exec slather coverage \
--html \ # 出力形式
--output-directory coverage-report \ # 出力先
--scheme スキーム名 \ # スキーム名
--workspace プロジェクト名.xcworkspace \ # Cocoa Podsならxcworkspaceファイル
プロジェクト名.xcodeproj \ # ここはCocoa Podsありでも.xcodeprojも指定
実行するとoutput-directoryで指定したディレクトリが生成されその中にHTML形式のカバレッジレポートがSwiftファイルごとに生成されます。
中身は以下のように対象のファイルの網羅できている箇所が緑色に、網羅できていない箇所が赤色にハイライトされ全体のパーセンテージなどがまとめて表示されるようになっています。
.slather.ymlを活用する
いちいちbundle exec slather coverageを実行する際にオプションをつけるのは大変なのでプロジェクトルートに.slather.ymlを用意することで設定を定義することが可能です。
ignoreでレポートに含めたくないファイルやディレクトリを定義することも可能です。
coverage_service: cobertura_xml
xcodeproj: プロジェクト名.xcodeproj
workspace: プロジェクト名.xcworkspace
scheme: スキーム名
source_directory: プロジェクトのルート
output_directory: coverage-report
ignore:
- Pods/*
- Carthage/*
- "**/AppDelegate.swift"
- "**/SceneDelegate.swift"
- "**/Generated/*"
- SourcePackages/*
GitHub Actions(CIツール)と連携してアーティファクト化する
SlatherはCIツールとも連携できるようになっています。Circle CIやCodeCovなどいろいろありますが、今回はパブリックリポジトリなら無料で使えるGitHub ActionsでCIを構築する想定で進めます。
といっても方法はすごく簡単でGitHub Actionsからテストを実行しその後カバレッジレポートを作成、アーティファクト化を行うだけです。
.github/workflows/main.yml
// 〜〜〜〜〜〜割愛
# Xcodeビルド
- name: Run Xcode Test
run: |
set -o pipefail
xcodebuild \
-sdk iphonesimulator \
-destination "platform=iOS Simulator,name=iPhone 16 Pro Max,OS=18.6,arch=arm64" \
-configuration Debug \
-workspace プロジェクト名.xcworkspace \
-scheme スキーム名 \
-enableCodeCoverage YES \
clean test \
ENABLE_PREVIEWS=NO \
| bundle exec xcpretty --test --color
# カバレッジレポートの作成
- name: Generate Coverage Report
run: |
bundle exec slather coverage
# カバレッジレポートのアーティファクト化
- name: Upload coverage report
uses: actions/upload-artifact@v4
with:
name: coverage-report
path: coverage-report
実際に動作させてみるとGitHub Actionsの結果のArtifactsに「coverage-report」が表示されるようになります。
実装詳細は以下の記事を参考にしてください。
まだまだ勉強中ですので間違っている点や至らぬ点がありましたら教えていただけると助かります。
ご覧いただきありがとうございました。







