テストツールの基本まとめ

2025年9月15日

テストコードはどこから書くべき?優先順位の判断基準と種類の使い分け

開発現場において「すべてのコードにテストを書く」のが理想的ですが、現実には納期やリソースの制約があり、全てをカバーするのは難しい場合があります。

では、エンジニアは一般的にどのような基準でテストを書く優先順位を決めているのでしょうか。

テストを書くべき箇所の判断基準

まず最優先されるのは、「ビジネスロジック」

具体的には決済処理、料金計算、ユーザーの権限チェックなどが該当します。何よりも先にテストで保護する必要があります。

「よく使われる機能」

ログイン・ログアウト機能や、投稿の作成・編集・削除といったメイン機能は、ユーザーが頻繁に利用します。

これらが動かなくなるとサービス全体の価値が損なわれるため、優先的にテストを記述します。

「複雑なロジック」や「過去にバグが出た箇所」

条件分岐が激しい計算処理やデータ変換は人間がミスをしやすいため、機械的に検証する価値が高まります

一度バグが出た箇所は、改修時に再び壊れる(デグレ)可能性が高いため、再発防止策としてテストを残すのが定石です。

目的に応じたテスト種類の使い分け

テストを書く箇所が決まったら、目的に応じて手法を選びます。代表的なのが「Feature Test(機能テスト)」と「Unit Test(単体テスト)」です。

Feature Test

APIへのリクエストからレスポンスまでを検証する手法です。

実際にデータベースへの保存や読み出しを行い、コントローラーからモデルまで複数の層を貫通してテストします。「ユーザー視点」で機能全体が正しく動くかを確認したい場合に適しており、ログイン機能やデータ登録の検証によく使われます。

Unit Test

特定のメソッドやクラス単体の動作を検証する手法です。

データベースアクセスやHTTPリクエストを伴わず、純粋に「計算ロジックが正しいか」「データ変換が期待通りか」を確認します。外部要因に依存しないため実行速度が非常に速いのが特徴です。

JUnit

Java向けの代表的なテストフレームワークです。
単体テストを書くときに広く使われており、多くのJavaプロジェクトに標準で導入されています。
特徴としては、シンプルなアノテーション記法(@Test など)でテストを記述でき、テストの自動化・実行がしやすい点があります。


PyTest

Pythonで最も人気のあるテストフレームワークです。
複雑な設定をしなくても簡単に始められるのが特徴で、テスト関数を test_ で始めるだけで動きます。
テストの失敗時に見やすいエラーメッセージが出たり、プラグインを追加して機能を拡張できるのも強みです。


Jest

JavaScriptやTypeScript向けのテストフレームワークです。
Reactの公式推奨でもあり、フロントエンド開発で特によく利用されます。
モック機能やスナップショットテストなどが標準で揃っていて、UIの動作確認も効率よく行えます。

セットアップ手順

パッケージ導入

npm i -D jest @types/jest jest-environment-jsdom \
  @testing-library/react @testing-library/jest-dom @testing-library/user-event

TypeScript の設定ファイルの場合

npm i -D ts-node @types/node

プロジェクトのルートにjest.config.tsを作成

// Next.js プロジェクト用の Jest 設定を簡単に作るための関数を読み込む
import nextJest from 'next/jest.js';

// Next.js のルートディレクトリを指定
// ここを "./" にしておけば通常の Next.js プロジェクト全体を対象にする
const createJestConfig = nextJest({ dir: './' });

// Jest の基本設定を定義
const config = {
  // ブラウザのような DOM API を使える環境を指定
  // React コンポーネントのテストには必須
  testEnvironment: 'jsdom',

  // すべてのテストの実行前に必ず読み込むファイルを指定
  // 今回は jest.setup.ts を読み込む
  setupFilesAfterEnv: ['<rootDir>/jest.setup.ts'],
};

// Next.js 用に調整された Jest 設定をエクスポート
export default createJestConfig(config);

プロジェクトのルートにjest.setup.tsを作成

// Testing Library の DOM 用マッチャを使えるようにする
// 例: expect(element).toBeInTheDocument();
//     expect(button).toBeDisabled();
//     expect(div).toHaveTextContent("Hello");
import '@testing-library/jest-dom';

package.jsonに下記を追加

  "scripts": {
    "test": "jest"
  },

GitHub - idw-coder/paiza

Contribute to idw-coder/paiza developmen…
github.com


Selenium

ブラウザを自動で操作するためのテストツールです。
「人がクリックや入力をする操作」を自動で再現できるため、WebアプリのE2Eテスト(実際の操作に近いテスト)に使われます。
ただし動作が重くなりがちで、最近ではCypressなどの新しいツールに置き換わる場面も増えています。


Postman

APIのテストや確認に使うツールです。
GUIベースで操作できるのでコードを書かなくてもAPIリクエストを送れます。
個人の検証からチームでの自動テスト・ドキュメント共有まで幅広く対応できます。


Cypress

比較的新しいE2Eテストツールです。
Seleniumより軽快で、モダンなフロントエンド開発(ReactやVueなど)との相性が良いのが特徴です。
ブラウザ内で直接テストが走るため、結果の確認が分かりやすく、テストのデバッグもしやすいです。

laravelでテスト

PHPUnit を使用します

Laravel に最初から組み込まれているテストツールです。

Javaのテスティングフレームワークである「JUnit」をモデルに作られており、PHPで開発を行う現場ではほぼ必ず採用されています。

入力と出力の検証: 「Aというデータを渡したら、Bという結果が返ってくるか?」を確認します。

アサーション(断定): 「結果は200であるべき」「配列の数は3つであるべき」といった判定メソッド(assertEqualsassertTrue など)が大量に用意されています。

リグレッションテスト: プログラムを修正した際、他の場所が壊れていないかを一瞬で確認できます。

GitHub - idw-coder/laravel-rds

Contribute to idw-coder/laravel-rds deve…
github.com