こんにちは、SWETの細沼(@tobi462)です。
iOSアプリ開発における自動テストをテーマとしたiOSアプリ開発自動テストの教科書が6/27(木)に発売されました! 私と同じくSWETの平田(@tarappo)の2名で共著しています。
iOSアプリ開発自動テストの教科書〜XCTestによる単体テスト・UIテストから、CI/CD、デバッグ技術まで
- 作者: 平田敏之,細沼祐介
- 出版社/メーカー: 技術評論社
- 発売日: 2019/06/27
- メディア: 単行本(ソフトカバー)
- この商品を含むブログを見る
発売を記念して、本書が生まれた背景や各章の見どころについて、かんたんに紹介させていただきます。
企画の立ち上がり
本書の企画が持ち上がったのは2017年6月と、今からおよそ2年前のことになります。
SWETでは「iOS Test Night」という勉強会を以前から開催していましたが、 それに参加された技術評論社の方から「iOSテスト本を執筆しませんか?」という提案を受けたのがきっかけでした。
その当時(および現在でも)、iOSアプリ開発についての入門書は多く出版されていたものの、 テストやCI/CD・デバッグテクニックといった少し進んだテーマを扱った書籍はありませんでした。
iOS Test Nightでは、テストについてのナレッジ共有を主目的としており、それは一定数の成果を収めていたと思います。 しかし、あくまで断片的な情報にとどまっており、体系化されたナレッジとしては整っていないという課題感を持ち続けていました。
それが書籍という形で体系化され世の多くのエンジニアに知ってもらえることには十分な価値があると考え、本書の執筆を決めました。
本書の構成
本書は、5パートで構成されています。
- 第1部:自動テストについて
- 第2部:単体テスト
- 第3部:UIテスト
- 第4部:CI/CD
- 第5部:デバッギング
執筆の開始当初は、テストにまつわるTIPSをまとめた、いわゆる「TIPS本」のようなものを考えていました。 しかし執筆作業が進むにつれ、それでは体系化された知識を提供するのは難しいという判断に至り、 一から体系的に学べるような構成に大幅に変更となった経緯があります。
執筆途中での構成変更はとても大変な作業でしたが、 結果としてよりよい書籍に仕上がったと感じています。
本書の対象読者
本書籍では、自動テストについて初歩から体系的に学べるような内容となっており、主に以下のような読者を対象としています。
- 自動テストをほとんど(あるいは全く)書いたことがない方
- CI/CDサービスをこれから導入したいと思っている方
一言でいえば「初心者」を主な対象読者としていることになりますが、 一部では進んだテクニックについても解説を試みており、 「中級者」以上の方でも何かしら得られる内容に仕上がっているかと思います。
実際に購入すべきかの判断については、ぜひ書店などで立ち読みして判断いただければ幸いです!
各パートの見どころ
ここからは各パートの見どころについて紹介していきます。
第1部:自動テストについて
第1部では、自動テストを実装・運用するにあたり知っておいたほうが良いことについて記載しています。
- 1章:自動テストをはじめる前に
- 2章:自動テストにおける落とし穴を避ける
1章では、自動テストをはじめる前に知っておくと良い「自動テストを実装する目的」や「自動テストを実装する際に意識するべきこと」などについて説明をしています。
また、2章では「テストケース名の話」から、「実行時間をどうするかといった話」といった自動テストを利用していく上で落とし穴になりえるであろうことについて説明をしています。
事前にこれらのことを知っておくことで、より自動テストを活用できると思います。
第2部:単体テスト
第2部では、XCTestの基本から実践的なテクニック、およびOSS活用について記載しています。
- 3章:XCTestを利用した単体テスト
- 4章:単体テストに役立つOSSを活用する
3章のXCTestでは基本的な利用方法から始まり、標準のAPIをほぼ網羅するように解説しています。 その上で、独自アサーションの書き方や非同期APIのテストについて、初心者でもわかりやすいように丁寧な説明を心がけました。 また、テストが書きづらい場合の対処など、より実践的なケースについても軽く触れています。
4章では、以下の4つのOSSについて解説を行っています。
- Quick/Nimble(BDDフレームワーク)
- Mockingjay(HTTP通信のモック)
- Cuckoo(モック用のコードの自動生成)
- SwiftCheck(Property-based Testing)
考え方が異なるOSSの解説を通じて、様々なテストテクニックを学んでもらえることを狙いとしました。 これらの軸を知ることで、流行などに振り回されないOSS選定ができるようになれば幸いです。
第3部:UIテスト
第3部では、XCUITestを利用したUIテストについて記載しています。
- 5章:XCTestを利用したUIテストの基本
- 6章:XCUITestのAPIを理解する
- 7章:UIテストの一歩進んだテクニック
XCUITestを用いたUIテストの基本から、提供されているAPIの使い方についてある程度網羅的に解説しています。 また、より実践的なテストコードの書き方についても軽く触れています。
これらの章を通じて、XCUITestでどのようなことができるのか分かって貰えればと思います。
第4部:CI/CD
第4部では、CI/CDについて記載しています。
- 8章:CI/CDの基本を押さえる
- 9章:fastlaneを利用したタスクの自動化
- 10章:アプリ配信サービスとデバイスファームの活用
- 11章:BitriseとCircleCIによるパイプラインの自動化
本パートでは、CI/CDとはという説明にはじまり、実際のサービスの利用例を中心に紹介しています。
デバイスファームについてはまだ利用されてない方も多いと思います。 本パートの情報により、実際に触ってみる一助になれば幸いです。
第5部:デバッギング
第5部では、iOSアプリ開発における様々なデバッグテクニックを紹介しています。
- 12章:デバッグのテクニック
デバッグツールは使いこなせば強力なものですが、なかなか学ぶ機会がありません。 本書ではブレークポイントやLLDB、Xcodeに用意されたデバッグ機能などについて、初心者でも分かりやすいような解説を心がけました。
明日から使えるテクニックばかりなので、日々の生産性向上につながればとても幸いです。
おわりに
今回は、SWETにおける「テスト自動領域」のiOSを担当する「細沼」と「平田」で共著した iOSアプリ開発自動テストの教科書について、 執筆することになったきっかけや見どころについて解説させていただきました。
今後、社内でiOSのテストに関するハンズオンなどを開催していく予定ですが、それの教材や題材作成の元ネタとして、我々自身もこの書籍を活用していく予定です!
iOSアプリ開発は、Androidアプリ開発と違い、公式ドキュメント・サンプルコードが少なく苦労することも多いと思います。 とくに自動テストについてのドキュメントは少なく、簡素なAPIドキュメントをもとに試行錯誤する現状も多いはずです。
本書がそうした現状を改善する、ひとつのきっかけとなれば幸いです!