開発ワークフロー

Claude駆動のTDDでよりクリーンなコードを書く

Red、Green、Refactor、テストはAIが書く

Claude CodeはTDDが非常に得意です。欲しい振る舞いを説明すると、まず失敗するテストを書き、それを通すコードを実装します。これはTDDの従来の痛点を逆転させます。テストを書くことはもはや遅い作業ではありません。あなたは平易な言葉で振る舞いを指定することに集中し、Claude Codeがテストセットアップ、アサーション、モックといった定型作業を処理します。結果として、テストカバレッジが上がり、より良い設計のコードができ、開発が速くなります。

Claude Codeによるテスト駆動開発はRed-Green-Refactorサイクルに従います。欲しい振る舞いを説明し、Claudeに失敗するテストを書かせ、それを通すコードを実装するよう頼みます。明確な仕様を与えれば、Claude Codeはこのサイクル全体を自律的に処理します。

サイクル

Claude Codeによるこのサイクル

R
Red、失敗するテストを書く

実装したい振る舞いを説明します。「ユーザーはメールでパスワードをリセットできるようにする。エンドポイントはメールが存在することを検証し、期限付きトークンを生成し、リセットリンクを送信すべきだ。」Claude Codeは、まだ実装が存在しない段階で、期待されるHTTPレスポンス、トークン生成、メール送信をアサートするテストを先に書きます。正しい理由(関数がない、構文エラーではない)でテストが失敗することを確認するためにテストを実行します。

G
Green、最小限のコードを実装する

Claude Codeは次に、テストを通す最もシンプルな実装を書きます。過剰にエンジニアリングせず、テストのアサーションを満たすのに十分なコードだけを書きます。この規律こそがTDDの輝く部分です。テストが契約を定義し、実装がそれを満たします。Claude Codeは実装を書いた後にテストスイートを実行し、新しいテストが通り既存のテストが壊れていないことを検証します。

R
Refactor、振る舞いを変えずに改善する

テストが通っているという安全網があるので、Claude Codeに実装のクリーンアップを依頼します。ヘルパー関数の抽出、変数名の改善、重複の削減、パフォーマンスの最適化などです。各リファクタリングステップの後、Claude Codeはテストを再実行します。テストが失敗したら、リファクタリングによって振る舞いが変わってしまったということで、Claude Codeはそれを元に戻すか調整します。このフェーズは、包括的なテストに裏打ちされたクリーンで保守可能なコードを生み出します。

ウォークスルー

最初のテスト駆動型の機能を書く

ステップ1: 実装ではなく振る舞いを説明する

まず、ユーザーの視点から機能が何をすべきかをClaude Codeに伝えます。「価格とパーセンテージを受け取るcalculateDiscountという関数を作れ」ではなく、「プレミアム会員の顧客は注文合計の20%オフを受けられるが、割引は50ドルを超えないようにする」と言いましょう。この振る舞いに基づく説明は、ビジネスルールを検証するテストを生み出すため、より良いテストになります。

ステップ2: 生成されたテストを確認する

Claude Codeは複数のテストケースを含むテストファイルを書きます。ハッピーパス(プレミアムユーザー、有効な割引)、エッジケース(割引が50ドルの上限を超える、価格ゼロの注文)、エラーケース(非プレミアムユーザー、負の価格)です。Claude Codeに機能を実装させる前にこれらのテストを確認しましょう。テストケースがあなたの仕様を定義するので、ケースが欠けていたら今のうちに追加しましょう。本番環境で欠けているエッジケースを発見するより、テストケースを追加するほうがはるかに安上がりです。

ステップ3: Claude Codeに実装と反復を任せる

テストを承認したら、Claude Codeに機能を実装するよう指示します。コードを書き、テストを実行し、結果を表示します。すべてのテストが最初の試みで通れば、リファクタリングに進めます。いくつかのテストが失敗した場合、Claude Codeは失敗の出力を読み取り、実装を調整します。このサイクルは通常1〜2回の反復で完了し、手動の書く-実行する-デバッグするループよりはるかに速いです。

なぜうまくいくのか

Claude CodeがTDDを簡単にする理由

テスト作成の摩擦を取り除く

開発者がTDDを省略する最大の理由は、テストを書くことが遅くて面倒に感じられることです。特にセットアップコード、モック、定型的なアサーションです。Claude Codeはこの摩擦を完全に取り除きます。あなたは一文で何が起こるべきかを説明すれば、Claude Codeが適切なインポート、フィクスチャ、モック、エッジケースのカバレッジを含む完全なテストファイルを生成します。認知的な負荷は「この依存関係をどうモックするか」から「どの振る舞いが重要か」へと移ります。

見逃してしまうエッジケースを捕まえる

Claude Codeが振る舞いの説明からテストを書くとき、開発者がよく忘れるエッジケースを生成します。空の入力、境界値、同時アクセス、null処理、不正な状態遷移などです。Claude Codeは数百万のテストスイートを見てきて、どのエッジケースがよくバグを引き起こすかを知っているため、これができます。自分ですべてのケースを考えなくても、より徹底的なテストカバレッジが得られます。

TDDの規律を維持させてくれる

TDDを維持するのが難しいのは、テストを省略して直接コードを書いてしまう誘惑が常にあるからです。Claude Codeを使うと、テストを先に書くほうが実装を先に書くより実際に速いので、省略する動機がありません。Claude Codeが各ステップを強制するため、Red-Green-Refactorサイクルが自然なものになります。テストを書き、失敗を確認するために実行し、コードを実装し、成功を確認するために再度テストを実行します。

フレームワークサポート

Claude Codeがサポートするテストフレームワーク

Jest & Vitest(JavaScript/TypeScript)

Claude Codeは適切なモック、非同期処理、スナップショットテスト、React Testing Libraryの統合を備えたJestとVitestのテストを書きます。仕様書のように読めるdescribe/itブロックを生成し、クリーンなテスト分離のためにbeforeEach/afterEachを使用します。

pytest(Python)

フィクスチャ、parametrize、マーク、conftest.py、そしてpytest-asyncio、pytest-django、pytest-mockといったプラグインを含む、pytestの完全なサポートです。Claude Codeはフィクスチャを通じた依存性注入を使い、Arrange-Act-Assertパターンに従うテストを書きます。

GoテストとRustテスト

Claude Codeは、適切なエラーラッピングとサブテストを備えたイディオム的なGoのテーブル駆動テスト、そして適切なResult処理、setup/teardown、プロパティベーステストのためのproptest統合を備えたRustの#[test]関数を書きます。

Playwrightによるエンドツーエンド

フルスタックTDDのために、Claude Codeはブラウザからアプリケーション全体を動かすPlaywrightのテストを書きます。ページナビゲーション、フォームの操作、APIのアサーション、ビジュアルリグレッションを処理し、あなたがユーザーストーリーを説明するだけで自動化されたテストスクリプトを生成します。

よくある質問

Claude CodeでのTDD、よくある質問

既存のプロジェクトでClaude CodeのTDDを使えますか?

もちろんです。Claude Codeは既存のテストインフラ、テストフレームワーク、フィクスチャ、モック、ファクトリ、規約を読み取り、既存のテストスイートに自然に収まる新しいテストを書きます。プロジェクトがconftest.pyフィクスチャを使うpytestを使っている場合、Claude Codeはそれらのフィクスチャを使うテストを生成します。Reactプロジェクトがカスタムレンダーユーティリティを持つTesting Libraryを使っている場合、Claude Codeはそのパターンに従います。ゼロから始める必要はありません。

どのようなカバレッジ目標を目指すべきですか?

カバレッジのパーセンテージは、カバレッジの質よりも重要ではありません。Claude Codeは行カバレッジよりも振る舞いのカバレッジに集中するのを助けてくれます。機能を(どのようにではなく)何をすべきかという観点で説明すると、生成されたテストは自然に重要なパスをカバーします。とはいえ、Claude Codeは既存のカバレッジレポートを分析し、テストされていない分岐を特定して、ギャップを埋めるための的を絞ったテストを書くこともできます。100%の行カバレッジではなく、ビジネスロジックとエラー処理の徹底的なカバレッジを目指しましょう。

Claude Codeは統合テストを書けますか?

はい。Claude Codeは複数のコンポーネントを組み合わせて動かす統合テストを書きます。実際のテストデータベースに触れるAPIエンドポイント、モックされたAPIレスポンスとやり取りするReactコンポーネント、複数の依存関係を調整するサービスレイヤーなどです。テストデータベースのセットアップとティアダウン、テストフィクスチャ、モックサーバーの設定を処理します。APIの統合テストについては、認証、検証、エラーレスポンスを含む完全なリクエスト-レスポンスサイクルを検証するテストを生成します。

リファクタリングフェーズはどのように機能しますか?

Green(動作する実装でテストが通る)の後、Refactorフェーズに入ります。Claude Codeに実装の改善、関数の抽出、重複の削減、命名の改善、パフォーマンスの最適化を依頼します。Claude Codeは変更を行い、各リファクタリングステップの後にテストスイートを再実行します。テストが失敗した場合、それはリファクタリングが振る舞いを変えたことを意味し、Claude Codeはリファクタリングを修正するか、レビューのために振る舞いの変化をフラグ付けします。テストはこのプロセス全体で安全網として機能します。

AIを使った最良のTDDワークフローは何ですか?

機能の振る舞いを自然言語で説明し、Claude Codeに失敗するテストを書かせ(Red)、それからテストを通すコードを実装するよう依頼し(Green)、最後にリファクタリングを依頼します(Refactor)。Claude CodeによるこのRed-Green-Refactorサイクルは、Claudeがテストと実装の両方を書く一方で、あなたは要件の定義に集中できるため、手動のTDDより速くなります。

Claude CodeはTDD中にテストを自動実行しますか?

はい。Claude Codeは各テストを書いた後、そして各実装の変更の後にテストスイートを実行します。テストの出力を読み取り、失敗を特定して、テストが通るまで反復します。ファイル編集のたびに自動でリンターや型チェッカーを実行するフックを設定することもでき、完全に自動化された品質ゲートを作ることができます。

TDDを学ぶ、使うのは Claude Code

それについて読むのはやめましょう。何かを作りましょう。

Nightschool AIは独立した学習プラットフォームであり、Anthropicとは提携・承認・後援関係にありません。ClaudeはAnthropic, PBCの商標です。 Anthropic公式のClaude Academyをお探しですか?academy.claude.comをご覧ください。