WEB+DB PRESS plusシリーズWeb API設計実践入門
──API仕様ファーストによるテスト駆動開発

[表紙]Web API設計実践入門──API仕様ファーストによるテスト駆動開発

紙版発売

A5判/208ページ

定価2,860円(本体2,600円+税10%)

ISBN 978-4-297-14293-3

電子版

→学校・法人一括購入ご検討の皆様へ

書籍の概要

この本の概要

本書は,著者が1993年から約30年間経験してきたAPI仕様の作成,2003年から20年間経験してきたテストファースト開発/テスト駆動開発の知見をまとめたものであり,一般的なソフトウェア開発者が習得することが容易ではない事柄を,本書を通して学び,実践してもらうことを目的としています。

本書が提唱する「API仕様ファースト開発」はWebサービスにおける大域的なテスト駆動開発の実現に必要なものであり,また,API仕様ファースト開発を実現するにはテスト駆動開発が必要です。API仕様ファースト開発とテスト駆動開発は,いわば車の両輪のような関係にあります。

本書では,ソフトウェアテストの変遷とWebサービスにおけるAPI仕様の関連を説明したうえで,API仕様とはどうあるべきか,API仕様に何を書くべきかについて説明します。具体例としてはgRPCを取り上げます。第4章で紹介するAPI仕様ファースト開発という開発プロセスは,筆者が日々実践していることですが,多くのソフトウェアエンジニアが実践できていないことです。そのために必要なE2Eテストフレームワーク,さらには,API仕様がきちんと書かれていないために生まれる技術負債の返済方法なども紹介します。

こんな方におすすめ

  • Webサービス開発者
  • API設計を学びたい方
  • テスト駆動開発に取り組んでいる方
  • より良い開発手法を知りたい方

目次

  • はじめに

第1章 ソフトウェアテストの変遷

  • 1.1 1990年代までと2000年代のソフトウェアテスト
    • 目視確認が普通だった
    • 自動テストの普及
    • 手動によるテストでは,ソフトウェアが腐る
  • 1.2 フィードバックループを短くする
    • テストとフィードバックループ
    • テストとフィードバックループ
    • テストファースト開発
  • 1.3 ビッグバンインテグレーションから継続的インテグレーションへ
    • ビッグバンインテグレーション
    • 夜間ビルド
    • 継続的インテグレーション
  • 1.4 まとめ

第2章 API仕様

  • 2.1 APIとは
    • フレームワークや標準ライブラリのAPI仕様
    • 企業内でのAPI仕様
  • 2.2 優れたAPI仕様とは
    • 理解が容易
    • 変更が容易
    • テストが容易
  • 2.3 API仕様でよくある問題点
    • API仕様が記述されていない
    • エラーの説明が記述されていない
    • API仕様に基づく自動テストコードが存在しない
  • 2.4 API仕様に書くべきこと
    • サービスの概要の説明
    • 個々のエンドポイントの説明
    • エラーの説明
  • 2.5 API仕様とE2Eテスト
  • 2.6 まとめ

第3章 gRPCにおけるAPI仕様の書き方

  • 3.1 gRPCとは
  • 3.2 API仕様をどこに書くか
  • 3.3 サービスの概要の説明
  • 3.4 個々のエンドポイント(RPC)の説明
  • 3.5 エラーの説明
    • パラメータの不正
    • 誤った順序での呼び出し
    • 認証や認可のエラー
    • サービスの概要に書くべきそのほかのエラー
    • 個々のエンドポイントに書くべきそのほかのエラー
    • 書く必要がないエラー
  • 3.6 リストオプションの説明
  • 3.7 まとめ

第4章 API仕様ファースト開発

  • 4.1 開発順序
    • API仕様の記述
    • E2Eテストフレームワークの検討と実装
    • テストコードの作成と機能の実装
    • リファクタリングとカバレッジの確認
    • Pull Requestのレビュー
  • 4.2 不具合の修正順序
    • 再現テストの作成と実装の修正
    • リファクタリングとカバレッジの確認
  • 4.3 既存のエンドポイントの修正と新たなエンドポイントの追加
  • 4.4 API仕様のエンドポイントを呼び出すE2Eテストの利点
  • 4.5 まとめ

第5章 E2Eテストフレームワークの構築

  • 5.1 テストフレームワークの基本的な考え方
    • 本番環境と同じバイナリ
    • カバレッジの取得
  • 5.2 マイクロサービス構成でのテストフレームワーク
    • 書きたいテスト
    • E2Eテストフレームワークのプロセス
    • 依存サービスが外部サービスの場合の解決方法
    • エラーのテストは簡単
  • 5.3 非マイクロサービス構成でのテストフレームワーク
  • 5.4 E2Eテストフレームワークの骨格
    • Test Suiteプロセスの骨格
    • テスト対象マイクロサービスの骨格
    • フェイクマイクロサービスの骨格
    • テストコードの骨格
    • そのほかの考慮項目
  • 5.5 まとめ

第6章 API仕様の技術的負債の返済

  • 6.1 APIの技術的負債とは
    • E2Eテストフレームワークの構築が重要
    • ソフトウェアエンジニアとしても重要
    • ソフトウェア開発組織としての強い目標
  • 6.2 API仕様の負債の返済
    • 既存のエンドポイントを修正するケース
    • 新たなエンドポイントを追加するケース
    • 既存のエンドポイントの不具合を修正するケース
  • 6.3 返済順序のまとめ
  • 6.4 E2Eテストのもう1つの利点:リファクタリング
  • 6.5 E2Eテストと単体テスト
    • E2Eテストは必須
    • テストデータの準備
    • データの準備でつまずく
  • 6.6 API仕様ファースト開発が定着した組織
  • 6.7 まとめ

第7章 Go言語によるE2Eテストフレームワークの実装

  • 7.1 E2Eテストの基本的な流れ
    • Test Suiteプロセスの流れ
  • 7.2 courierライブラリの構成とインストール
    • インストールと動作確認
  • 7.3 サンプルサービスの構成と定義
    • サンプルサービスの構成
    • Shopサービスの.protoファイル
    • .protoファイルのコンパイル
    • サンプルサービスで実現したいテスト
  • 7.4 E2Eテストコードの例
    • InvalidArgumentエラーのテストコード
    • newShopClient()関数の実装
    • テストの実行
  • 7.5 E2Eテストフレームワークの流れ
    • フェイクサービスの実行
    • テスト対象サービスの起動
    • テスト対象サービスの準備待ち
    • テストの実行
    • テスト対象サービスの終了
  • 7.6 フェイクサービスの構築
    • フェイクサービスの自動生成
    • 自動生成されたフェイクサービスのコード
  • 7.7 テスト実行までの流れとテストコードの実装
    • TestMain関数
    • テスト対象サービスが依存する環境変数
    • テスト対象サービスの呼び出しとテストの実行
    • Makefile
    • テスト関数の実行
    • テスト終了の通知
    • カバレッジの表示
  • 7.8 テストの並列化サポート
    • TIDの伝搬
  • 7.9 ほかのテスト関数の例
    • DeadlineExceededエラー/Canceledエラー
    • 正常ケース
    • SetListProductInventoriesResponseCreator
  • 7.10 テスト関数に合格するサーバ実装
  • 7.11 外部サービスのフェイクサービス
    • Google PubSubのPublisherサービス
    • REST APIのサービス
  • 7.12 E2Eテストでのデータの準備
    • エンドポイント経由でのデータ準備の利点
  • 7.13 ステージング環境や本番環境に対するE2Eテスト
  • 7.14 まとめ

付録A Goのテストの並列化

  • 複数パッケージのテストを並列に実行する
  • t.Parallel()メソッド
  • 並列化での注意点
  • まとめ

付録B 長時間夜間ランニングテスト

  • 過去の経験
  • 長時間ランニングテスト
  • まとめ

付録C 防御的プログラミング

  • 防御的プログラミングとは
  • 防御的プログラミングとAPI仕様

著者プロフィール

柴田芳樹(しばたよしき)

1959年生。九州工業大学および大学院で情報工学を専攻。1984年4月に富士ゼロックスに就職し,その後さまざまな会社でソフトウェア開発に従事。2024年4月より個人事業主として活動。2018年6月に,メルペイ(メルカリ子会社)でWebサービスのバックエンドサービス開発に従事してからは,「API仕様ファースト開発」によるGoおよびTypeScriptを用いたバックエンドサービス開発に従事している。

著書に『プログラマー“まだまだ”現役続行』(2010年,技術評論社),『ソフトウェア開発の名著を読む【第二版】』(2009年,技術評論社),『Java 2 Standard Edition 5.0 Tiger──拡張された言語仕様について』(2005年,ピアソンエデュケーション)。

訳書に『Effective Java 第3版』(2018年,丸善出版),『プログラミング言語Go』(2016年,丸善出版),『ベタープログラマ』(2017年,オライリー・ジャパン)『スーパーユーザーなら知っておくべきLinuxシステムの仕組み』(2022年,インプレス),『Go言語100Tips』(2023年8月,インプレス)ほか多数。

ブログhttps://yshibata.blog.ss-blog.jp
Twitter@yoshiki_shibata