DeNA Testing Blog

Make Testing Fun, Smart, and Delighting End-Users

SWETの2名が執筆に加わった「iOSテスト全書」が一般発売されました

SWETグループ、iOS自動テスト領域チームの平田(tarappo)です。

長いことおまたせしましたが、12/16(月)に「iOSテスト全書」が一般発売されました。 私と同じくSWETの細沼(tobi462)が執筆に加わっています。

f:id:swet-blog:20191216185012j:plain ※12/16(月)に開催されたiOS / Android Test Nightの開始前に写真を撮りました。

本書の一般販売を記念して、本エントリーでは本書全体の概要と見どころについて解説します。 また、併せてすでに発売済みの「iOSアプリ開発自動テストの教科書(以後、教科書本)」との想定読者の違いについても説明します。

本書の企画

本書の企画は、私が相談をして進めさせてもらいました。

昨年(2018年)「Androidテスト全書」の執筆に関わり、周りからの意見もありiOSアプリ開発においても、このようなテストについての本の必要性を強く感じていました。

iOSアプリ開発においては、テスト周りにおいて体系的にまとまった情報はあまりありません。 一歩踏み込んだ情報となると、日本語でのネット情報は少なくその情報自体最新のものなのかわからないといった状況でもありました。

「iOSテスト全書」の企画を立ち上げる前から、私と細沼は「教科書本」の執筆について話が進んでおり執筆がスタートしはじめていました。 この本はその名の通り教科書として最初の一歩として道標になると思ってはいたものの、この本だけでは不足している面もあるだろうとも思っていました。

そこで、「iOSテスト全書」としてさらに一歩の情報まで載せた本を世に出したいと思い、執筆に加わってほしい人たちに声をかけました。

Androidテスト全書が一般発売されたのは2018年11月5日になります。 そこから2週間後、11月19日が執筆者と編集者が揃った「iOSテスト全書」のキックオフの日になります。 そして2019年1月28日にクラウドファンディングがスタートし、このたび一般販売となりました。

思っていたよりも時間がかかってしまいましたが、良いものができたと思います。 ぜひ、手にとっていただければと思います。

本書の概要

本書の目次は次のとおりです。

  • 1章:テスト自動化入門
  • 2章:ユニットテスト(概要)
  • 3章:ユニットテスト(XCTest編)
  • 4章:ユニットテスト(Quick/Nimble編)
  • 5章:BDDによるアプリ開発
  • 6章:UIテスト入門
  • 7章:XCUITestを使ったUIテスト
  • 8章:サードパーティ製ツールとAppium
  • 9章:CI/CD

自動テストに対する話から、ユニットテスト・UIテスト、そしてそれらを実行するCI/CDについてまで触れています。 この中から細沼が2章〜5章(3章共著)、平田が6章と9章を担当しています。

「教科書本」はテストに関するものを幅広く扱い、その名前の通り教科書として最初に活用してもらうことを想定しています。 「iOSテスト全書」では、より一歩進んだところにもいけるよう自動テストやCI/CDについてもう少しふみこんで書いてあります。

このようなiOSアプリ開発におけるテスト周りにフォーカスした本が2019年に2冊も出たということは凄いことだと思っています。 是非ともiOSアプリ開発をおこなっている方は、本書を手にとって頂いて書いてある内容にチャレンジしてみてください。

本書の想定読者

本書の想定読者はPEAKSのページに書いてあるとおり次の方になります。

  • テストについて興味はあるがどうしたらいいかわからない方
  • テストについてもっとよい書き方があるのではないかと悩んでいる方
  • テストにもっと強くなりたい方
  • CI/CDサービスをもっと活用したいと思っている方

iOSアプリ開発に携わる人であれば、なにかしら得られるものがある内容になっています。

各章の見どころについてはそれぞれの執筆者が書いてくださると思っています。 ここでは、我々が執筆した章についての見どころについて次に説明していきたいと思います。

2章〜5章の見どころ(細沼担当)

個人ブログ記事でも書かせていただきましたが、 私が担当した2章、4章、5章はそれぞれ明確なコンセプトをもって執筆をさせていただきました。

2章は『iOSに限定されないユニットテストの知識』をテーマにして、 ユニットテストにおいて一般的に利用できるテクニックを紹介しています。

個人的な見どころは『テストコードの保守性を上げる』のトピックです。 XCTestを使った愚直なテストコードの例からはじめ、 テストコードを徐々にリファクタリングしながら保守性を上げる過程がわかるようになっています。

3章は共著として一部のみを担当しました。 具体的には『テスト実行の単位を管理する方法』として、 これまで利用されてきた『スキーム』を使った方法に加え、 Xcode 11から追加された『テストプラン』の利用方法について記載しています。

このあたりは中々分かりづらい機能ですが、 個人的にわかりやすく解説できているのではと感じます。

4章は『日本語における最強のQuick/Nimbleリソース』をテーマとして執筆しました。

Quick/Nimbleは公式でもドキュメントが整備されているOSSですが、 知識を体系的に積んで学ぶという点においては、個人的に不足を感じていました。

そこで知識を一から積んでいけるように構成を工夫し、 分かりづらい機能についても、できるだけ丁寧な解説を心がけています。

5章は『私が今まで得てきた知恵や経験を、書籍を通して読者に』をテーマにし、 Quick/NimbleとBDD(振舞駆動開発)を利用してサンプルアプリを開発する内容になっています。

2章〜4章で解説してきた静的なテクニックをつなぎ合わせ、 動的なストーリーとして理解を深められる構成になっています。 そういった意味で、2章〜4章で学んできた内容を締めくくる、ユニットテストにおけるまとめ的な章になっています。

6章、9章の見どころ(平田担当)

6章の「UIテスト入門」については、UIテストをおこなっていく上で、次のようなフェーズ単位で気にすべきことをまとめました。

  • 導入前に検討したほうがいいこと
  • 実装中に考慮すべきこと
  • 運用時に注意するべきこと

UIテストは実装して、動いているのを見ると「なんか凄い!」と実装者自身やチームメンバーが感じやすいです。 その結果、闇雲にテストコードを追加し、その結果として負債となるコードが生まれることもあります。

一旦落ち着いて何をするべきかを考えることが重要です。 そこで筆者の経験などを元に、UIテストが実際に現場で活用できるように、それぞれのフェーズで気にすべきことをある程度まとめました。

9章の「CI/CD」では、「CI/CDとはなにか」について厚めに述べています。 本来は、この話だけで1冊になってしまうぐらいの話ですが、次のようなトピックに注力し説明をしています。

  • CIとはなにか?
  • CDとはなにか?
  • どのようなワークフローを組むか

このような内容は、特定のサービスに限らず他でも汎用的に利用できるものです。

しかし、実際に利用した形も見ないとイメージが分かりづらいのも事実です。 そこで、述べたワークフローの例をもとにiOSアプリ開発で人気のCI/CDサービスであるBitriseを用いて説明をしています。

本章の内容により、自社のプロダクトにおいてどのようなワークフローを用意するのが良いかを考える一助になってくれると筆者としては嬉しい限りです。

おわりに

今回は、一般発売がはじまった「iOSテスト全書」について解説させていただきました。 この本が何かしら皆さんにとってプラスとなり、そして今後テストに関する情報がいろいろな媒体を通して世に出てもらえれば筆者としては嬉しい限りです。

また、我々SWETとしては今後「教科書本」や「iOSテスト全書」を社内で活用するよういろいろとおこなっていく予定です。 まだ何かしら具体的な活動はそこまで行えておらず、世へのアウトプット出来ていませんが、今後のアウトプットをお待ちいただければと思います。

そして、これらの活動に興味がある方はぜひとも次から書かれている内容を元に仲間となっていただけると嬉しい限りです。

仲間を募集中

SWETチームでは自動テストやCI/CDを活用する仕事に興味を持った方を募集しています。

以下のエントリフォームから応募できるほか、 私や他のSWETメンバーに声をかけて頂くかたちでも大丈夫です。

是非ともお気軽にご連絡ください!