• それ知りたい!が本になる、技術書クラウドファンディング - PEAKS
  • それ知りたい!が本になる、技術書クラウドファンディング
  • ユーザー登録・ログイン
伊藤 貴之, 椎葉 光行 - Jestではじめるテスト入門

テスト未経験から中上級者へのガイドライン!「Jestではじめるテスト入門」出版プロジェクト!

プランを見る

プロジェクト成立! 執筆が決定しました!

811人が応援しています
プロジェクト成立締切日
2022年03月01日 10:00

書籍が完成!ただいま販売中です!!

書籍を購入

プロジェクト概要

なぜ執筆プロジェクトを立ち上げたのか?

 2020年の年末から年明けに開催された技術書典10で「はじめてのJest入門」を執筆しました。私自身はIT業界に約10年いますが、受託案件やR&Dのようなプロジェクトに参加することが多く、テストについての経験があまり得られないまま過ごしてきました。そんな中で社内のメンター&メンティープログラムでTDD(Test-Driven Development:テスト駆動開発)について学ぶ機会があり、セッションを通して学んだことを記憶に残す意味でも、この本を書くことに至りました。しかし、前回の書籍ではTDDやテスト自体の概念についてはあまり触れず、セッションで利用したJestの基本的な機能や使い方についてフォーカスしました。

 前回の技術書典10のイベントを通じて、同じような悩みや課題感を持った方多くがいることを知ることができました。JavaScriptは元々フロントエンドで主に利用されていた言語であり、フロントエンド周りのプロジェクトは設計にそこまで時間を要さなくてもある程度開発ができてしまう点や問題の重要度がバックエンドの開発に比べ低いことから、あまりテストコードを書くことに対してモチベーションが高くなく、後回しになりがちである場合があります。しかしフロントエンドではReactやVueなどのフレームワークが登場し、前よりも複雑性を持つようになった現状でも、過去の私のいたプロジェクトでもそうであったように、未だにユニットテストがないプロジェクトもあるのではないかと考えています。

 そのため、今回のプロジェクトでは前回のJestの基本的な利用方法に加え、以下の項目を追加したいと考えています。このアップデートでより体系的かつ実践的にJestを利用したテストを学ぶことができるようになると考えています。

  • 基本的なテストの種類や概念の説明
  • Testing Pyramid・Testing Trophyといったテストに関わるコストについての考え方
  • Storybookを活用したUIテスト
  • Datadogを利用した本番環境でのテスト
  • サンプルのアプリを利用したAPIとフロントエンドAPPのテスト
  • サンプルをすべてTypeScriptへ移行
  • ESLintやPrettierなどの静的解析ツールの導入
  • CIツールの導入例にCircleCIに加え、Github Actionsの追加

 また、監修としてテストに詳しい和田卓人氏にも協力をお願いし、テストに悩める多くの方々に届く一冊として洗練させる予定です。

本書の特徴

  • 実際のプロジェクトへテストを導入できるよう、テストの全体感からテストが活用されるための準備についてまでまとめてあります
  • 手を動かしながらJestを利用したテストの書き方を網羅的に学ぶことができます
  • 豊富なコード例があり、またサンプルは課題にフォーカスし、小さくまとまっているため、他のプロジェクトへも簡単に転用することができます

対象読者

  • JavaScriptもしくはTypeScriptを利用したプロジェクトへテストを導入したいと考えている方
  • テストは必要だと思っているが、何から始めればいいのかよくわかっていない方
  • レガシーなプロジェクトの運用している、もしくは改善を予定している方
    • 完成イメージ

    • 製本版はロゴマーク入りの箱入り
      ゆうパケットでお届け
      発送の際には追跡番号をお知らせします

    Jestではじめるテスト入門
    • 伊藤 貴之伊藤 貴之
    • 椎葉 光行椎葉 光行
      リリース予定日
      2023年03月01日
      フォーマット
      PDF(200ページ〜300ページ)
    • 本プロジェクトは紙版+電子版の提供となります。

    プラン選択・購入

    • 電子版 + 製本版 プラン

      電子版 + 製本版

      電子版書籍/製本版書籍×1冊/アーリーアクセス権

      4,200円

      • 購入期間は終了しました
      152 人が購入
    • 電子版プラン

      電子版

      電子版がダウンロードできるプランです。

      2,900円

      • 購入期間は終了しました
      259 人が購入
    • 【数量限定】アーリーバードプラン

      電子版 + 製本版

      いち早くご購入いただける方に、お得な早割りプラン。
      電子版書籍/製本版書籍×1冊/アーリーアクセス権

      3,600円

      600円 OFF!
      • 購入期間は終了しました
      400 人が購入(残り:0)
    • ツイートプラン

      PEAKSを応援

      プロジェクトを成功させるには、たくさんの応援が必要です。 プロジェクトのシェアをお願いいたします!

      0円

      • Tweetで応援

    電子版書籍
    PDF形式の書籍がダウンロードできます。
    製本版と同様のフォーマットをご利用いただけます。
    製本版書籍
    製本版を1冊、指定のご住所まで配送します。
    執筆完了後、ご住所を伺います(海外発送はいたしません)。
    アーリーアクセス権
    執筆完了前の書籍を、書き上がった章からPEAKSのホームページで閲覧いただけます。
    また、リリース前のベータ版をPDFで配布いたします。

    目次

    はじめに

    第1章 なぜテストを書くのか?

    この章ではテストに関わる基本的な用語や考え方を紹介します。ここでテストに関する全体感を知ることで、あなたが担当しているプロジェクトでどのようなテストが必要なのか、何からはじめればいいのかをご自身で判断できるようになることができます。

    1.1 テストがないと何が問題なのか?

    テストの役割を紹介します。最初に思いつくものとしては「プログラムの動作を確認する・保証する」ことが考えられます。しかしテストを書くことの理由はそれだけではありません。例となる状況を過程し、テストを書く目的やメリットを紹介します。

    1.2 何をテストするのか、どのくらいテストすればいいのか? - Testing PyramidとTesting Trophy

    テストの手法として、代表的なものとして「ユニットテスト」、「インテグレーションテスト」、「エンドツーエンドテスト」が挙げられます。これらのテストの役割の違いとそれぞれのテストのコスト(作業量)についても説明します。それぞれのテストで導入する際のコストが異なります、そのため「Testing Pyramid」と「Testing Trophy」フレームワークを紹介します。どれくらいテストをするかについて「カバレッジ」を一つの基準として採用する場合があります。しかしカバレッジを気にするあまりテストが複雑になる、テストの作成に時間がかかるなどの問題もあります。そのためカバレッジをどう扱うかについても紹介します。

    1.3 どうやってテストを始めればいいのか?

    プロジェクトの状況やプロジェクトの種類によって、どのようなテストから導入すればいいのか異なります。例えば、これからプロジェクトを開発する場合は「ユニットテスト」から、既存プロダクトがすでに運用されいてる場合、「インテグレーション」もしくは「エンドツーエンドテスト」を導入するなど、プロジェクトの状況によってはじめに導入するテストが異なります。また、そもそもテストを導入できる下地があるかどうかも重要です。テストを導入したが、チームメンバー間でテストに対する認識が異なる、テストの粒度がことなる、テストが実行されていないコードがdefaultブランチに直接pushされているなど、さまざまな問題によってテストが活用されない場合もあります。そのため、プロジェクトの状況を踏まえ、どうやってテストを導入するかのステップを紹介します。

    第2章 Jest入門

    Jestの基本的な構文をTypeScriptを利用して紹介します。JestやTypeScriptのセットアップを1から行うため、はじめてJestやTypeScriptを利用する場合でも進めることができます。今回TypeScriptを利用するため、型が導入されます。型を導入することのメリットについても確認します。また、E2Eテスト実践例を追加したことにより、DBを利用する場合の初期化やより実践に近い形式でのE2Eテストを行います。

    • 2.1 Jestとは?
    • 2.2 TypeScriptとは?
    • 2.3 セットアップとはじめてのテスト
    • 2.4 テストのグループとテストの前後処理
    • 2.5 テストの実行方法
    • 2.6 テスト結果の評価(アサーション:Matcherマッチャー)
    • 2.7 モックを利用したテスト
    • 2.8 UIテスト
    • 2.9 E2E(エンドツーエンド)テスト
    • 2.10 実践例

    第3章 リファクタリングとテストの改善

    実際にテストを導入する段階で既存のコードをリファクタリングする機会が出てきます。またせっかく導入したテスト自体に問題があるケースもあります。いくつかの例を通じてコードのリファクタリングやテストの改善を紹介します。

    • 3.1 関数外の変数の参照
    • 3.2 関数の共通化
    • 3.3 テストケースが曖昧
    • 3.4 過剰なアサーション
    • 3.5 過剰なMock
    • 3.6 Unhandled Rejectionsで失敗したテストがPassしている

    第4章 テストを開発フローの一部へ

    テストを導入しただけでは、テストの実行やテスト結果の共有は開発者の判断に委ねられた状態となるため、適切に運用されない場合があります。テストが開発フローの一部として活用されることではじめて、プロジェクトの改善に活かすことができます。この章ではテストではカバーできていない部分を評価する静的解析ツールの紹介やCIツールの導入を紹介します。

    • 4.1 Githubフローの導入
    • 4.2 静的解析ツール(EsLint, Prettier, カバレッジ)の導入
    • 4.3 CIツールを導入しテストを自動化

    おわりに

    著者

    • 伊藤 貴之
      伊藤 貴之
      Twitter GitHub

    • プロフィール

      大手のSIer、シード期のベンチャーで新規プロダクトの開発をメインで従事。2014年に地元の岩手で起業し、クラウドソーシング上でスマートフォン向けのアプリ開発などを行い、「Lancer of the Year 2015」にて「地域を元気にするランサー賞」を受賞。2018年からCircleCIでテクニカルサポートとして従事し、2021年から現在までインフラエンジニアに転向。CI/CDちょっとできます。

    • 著者からのメッセージ

      本書は、 JavaScriptのテストフレームワークであるJestの基本的な使い方を紹介するために、技術書典10で執筆した『はじめてのJest入門』がベースとなっています。JavaScriptのテストについてネット上に情報は増えてきていますが、断片的な情報が多く、今からテストについて学ぶ人にとっては大変な時代だと感じています。ただでさえReactやTypeScript、Docker、CIツールなど学ぶことが多く、開発者でありながらもテストに対するコンプレックスを抱えている方が多いのではと感じています。現在はCircleCIでインフラエンジニアをしており(最近テクニカルサポートから内部転向しました。)、CIツールに関する問題はもちろんですが、CI以前の開発フローに関する問題やテストに関する問題について数多くサポートしてきました。本書では、なるべく具体的なサンプルや表現を利用し、読んで頂いた方が少しでも現場で活用できるよう執筆したいと思っています。

    • 椎葉 光行
      椎葉 光行
      Twitter GitHub

    • プロフィール

      大学在学中にアルバイトでプログラミングを覚え、卒業後はベンチャーで開発に携わる。2010年より楽天グループ株式会社に勤務。Javaのウェブアプリケーション開発に取り組む中で、テスト駆動開発に興味を持ちTDDBC大阪を開催。アジャイル開発や組織改善にも取り組み、スクラムフェス大阪2021ではキーノートを務める。2021年10月から翌2022年12月までCircleCIでシニアフルスタックエンジニアとして楽しくコードを書いて過ごした。休みの日は家族でぼーっと過ごすのが好き。

    • 著者からのメッセージ

      本書はJestの基本的な使い方に留まらず、Jestを取り巻く技術、なぜテストを書くのか、失敗談、CI、そして自動テストを使ってどのように開発を進めるかという実践編まで幅広くカバーしています。そのため、初心者の方にはテストを書き始めるガイドとして、中上級者の方にはご自身の考え方や進め方を再確認する機会として活用していただけます。気軽に本書を手にとって、著者らとお話をしながら自動テストについて考える気分で楽しんでください。みなさんが次の一歩を踏み出すときに、本書が少しでもそのお役に立てるととても嬉しいです。

    • ユーザー登録・ログイン
    • リクエスト
    • お問い合わせ
    • 利用規約
    • アフィリエイト規約
    • 特定商取引に関する表記
    • プライバシーポリシー
    • Copyright テックベース合同会社 All Rights Reserved.