Claude Code × テスト自動化:手動テストをゼロにした話【pytest・C#・2026年版】

PR本記事はアフィリエイト広告を含みます。リンク経由でのご購入により運営者に成果報酬が支払われることがありますが、読者への価格や条件は変わりません。

「テストを書く時間がない」「テストを書くのが面倒」——その悩み、Claude Codeが解決します。

筆者はC#のフルリモート案件に参画していますが、Claude Codeを使ったテスト自動化で手動テストの時間が週10時間以上削減できました。この記事では、pytest(Python)とxUnit(C#)を例に、Claude Codeを使ったテスト自動化の具体的なやり方を解説します。

pytest(Python)でのテスト自動化

基本的な使い方

以下のようなPython関数があるとします:

def calculate_discount(price: float, member_rank: str) -> float:
    """
    会員ランクに応じた割引後の価格を返す。
    ランク: 'bronze'=5%, 'silver'=10%, 'gold'=20%
    """
    discounts = {'bronze': 0.05, 'silver': 0.10, 'gold': 0.20}
    if price < 0:
        raise ValueError("価格は0以上である必要があります")
    discount = discounts.get(member_rank, 0)
    return price * (1 - discount)

Claude Codeへの指示:

以下のPython関数のpytestテストを書いてください。
- 正常系(各ランクごと)
- 異常系(負の価格、未知のランク、価格が0)
- 境界値テスト
fixtureを適切に使い、テスト名は日本語コメントで意図を明記してください。

[関数コードを貼り付け]

Claude Codeが生成するテストコード:

import pytest
from discount import calculate_discount


class TestCalculateDiscount:
    """calculate_discount関数のテストスイート"""

    # --- 正常系 ---
    def test_bronze_member_gets_5_percent_discount(self):
        """ブロンズ会員は5%引きになる"""
        assert calculate_discount(1000, 'bronze') == pytest.approx(950.0)

    def test_silver_member_gets_10_percent_discount(self):
        """シルバー会員は10%引きになる"""
        assert calculate_discount(1000, 'silver') == pytest.approx(900.0)

    def test_gold_member_gets_20_percent_discount(self):
        """ゴールド会員は20%引きになる"""
        assert calculate_discount(1000, 'gold') == pytest.approx(800.0)

    def test_unknown_rank_gets_no_discount(self):
        """未定義ランクは割引なし"""
        assert calculate_discount(1000, 'platinum') == pytest.approx(1000.0)

    # --- 境界値 ---
    def test_zero_price_returns_zero(self):
        """価格0円の場合は0円を返す"""
        assert calculate_discount(0, 'gold') == pytest.approx(0.0)

    # --- 異常系 ---
    def test_negative_price_raises_value_error(self):
        """負の価格はValueErrorを発生させる"""
        with pytest.raises(ValueError, match="価格は0以上"):
            calculate_discount(-100, 'bronze')

これをClaude Codeが数秒で生成します。


C#(xUnit)でのテスト自動化

ASP.NET Core APIのテスト例

// Claude Codeへの指示
// 「このServiceクラスのxUnitテストを書いて。
//  Moqでリポジトリをモックして、
//  正常系・異常系・エッジケースを網羅してください。」

Claude Codeはコードベース全体を把握しているため、既存のDI設定・インターフェース定義・テストのフォルダ構造を考慮した上でテストコードを生成します。

特に有効なケース:

  • リポジトリのモック(Mock<IUserRepository>)の自動生成
  • ILoggerIConfigurationのモック設定
  • 非同期メソッド(async/await)のテスト
  • カスタム例外クラスの検証

Claude Codeを使ったテスト駆動開発(TDD)フロー

筆者が実践しているTDDフロー:

1. 仕様をClaudeに伝える
   「〇〇する機能を実装したい。先にテストを書いて」

2. Claudeがテストコードを生成する
   → この時点では当然テストは失敗する

3. テストを実行して失敗を確認する
   pytest test_xxx.py → FAILED

4. Claudeに実装を依頼する
   「上のテストが全部通るように実装して」

5. テストを実行して成功を確認する
   pytest test_xxx.py → PASSED

6. 必要なら追加テスト・リファクタリングをClaudeに依頼する

このフローにより、「動くコードを作る」と「テストを書く」を分離せずに並行して進められます。


既存コードへのテスト追加

レガシーコードにテストがない場合、Claude Codeへの指示:

このファイルにはテストがありません。
カバレッジを上げるためのpytestテストを追加してください。
既存の動作を壊さないことを前提に、
最も重要な関数から優先的にテストを書いてください。

Claude Codeはコードを読んで「どこにリスクがあるか」を判断し、優先度の高い関数から順にテストを生成します。


テスト自動化で得られた実際の効果

筆者の経験値:

  • 新機能のテスト作成時間:1〜2時間 → 15〜30分
  • レグレッションテストの発見率:向上(Claude Codeがエッジケースを網羅するため)
  • テストを書く心理的ハードル:ほぼゼロ(「Claudeに頼めばいい」という安心感)

よくある質問

Claudeが生成したテストをそのまま使っていいですか?

A. 動作確認は必ず自分でしてください。Claudeが生成したテストがコンパイルエラーを起こしたり、ロジックを誤解している場合があります。「生成→確認→修正」のサイクルを回すことが重要です。

テストコードの保守はどうしますか?

A. 仕様変更でテストが壊れたときも「このテストが失敗しています。仕様変更内容は〇〇です。テストを修正してください」とClaudeに依頼できます。

CI/CDに組み込む方法は?

A. pytestであればpytest --covでカバレッジ計測も同時にできます。GitHub ActionsへのCI設定もClaudeに「GitHub Actionsのワークフローファイルを作って」と頼むだけで生成されます。

関連ツールを見る

この記事で紹介したツール・サービスをまとめてチェック。

おすすめ

エックスサーバー

国内シェアNo.1のレンタルサーバー。WordPressブログをすぐに始められる。このブログも実際にXserverで運営しています。

Xserverを見てみる →

ムカイ
この記事を書いた人

ムカイ

個人事業主エンジニア。C#フルリモート案件に参画しながら、Claude Codeを使ってAI×副業の自動化・コンテンツ制作を実践中。「稼ぐ仕組みを作るのが好き」がモットー。

コメントを残す