0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Cursor agent機能でテストコード自動生成する運用例|AI実務ノート 編集部

Last updated at Posted at 2026-01-03

1. 結論(この記事で得られること)

Cursor の agent 機能を使えば、テストコードの土台作りを数分で終わらせられます。ただし「生成して終わり」では危険です。

この記事では、私が実際にチームで運用している以下のポイントをお伝えします。

  • Cursor agent にテストを書かせる具体的なプロンプト設計
  • 生成されたコードをどこまで信用して良いかの判断基準
  • レビューで見るべき観点と、実装者が手直しすべき箇所
  • CI/CD に組み込むまでのチェックリスト

昔、私もテストを「後で書く」と言いながら放置して、本番障害を起こした経験があります。AI でテストの初速を上げられる今だからこそ、正しい使い方を押さえておきましょう。

2. 前提(環境・読者層)

想定する読者

  • Cursor を業務で使い始めたエンジニア
  • テストコード文化を根付かせたいチームリーダー
  • AI 生成コードのレビュー観点を知りたい人

前提環境

  • Cursor Pro 契約済み(agent 機能は Pro 限定)
  • 言語:TypeScript / Python あたりを想定(他言語でも応用可)
  • テストフレームワーク:Jest / pytest など主流のもの

3. Before:よくあるつまずきポイント

3-1. 「とりあえず生成してもらった」で満足してしまう

agent に「このファイルのテスト書いて」と頼むと、確かに一瞬でテストファイルが生まれます。でもカバレッジだけ高くて中身がスカスカなことが多い。

// agent が生成しがちなダメな例
describe('UserService', () => {
  it('should create instance', () => {
    const service = new UserService();
    expect(service).toBeDefined();
  });
});

これ、実質何もテストしてません。昔の私もこれを「テストあるからOK」と言い張って、レビューで指摘された苦い思い出があります。

3-2. モック設定を丸投げして壊れたテストができる

外部 API やデータベースへの依存が絡むと、agent は適当なモックを作りがちです。

# 生成されたが動かない例
@patch('requests.get')
def test_fetch_user(mock_get):
    mock_get.return_value = None  # ← これじゃ AttributeError 起きる
    result = fetch_user(1)
    assert result is not None

3-3. エッジケースを生成しない

正常系だけ書いて、異常系・境界値・タイムアウトなどは指示しないと書かないのが agent の特性です。

4. After:基本的な解決パターン

4-1. agent へのプロンプト設計が全て

単に「テスト書いて」ではなく、テスト設計の観点まで含めた指示を出します。

@agent 以下の UserService.ts に対してテストを作成してください。
 
【要件】
- 正常系、異常系、境界値を網羅
- 外部 API (fetchUserFromAPI) は必ずモック化
- モックの戻り値は型定義に従って正確に
- テストケース名は「〜の場合、〜になる」形式で日本語OK
- setup / teardown で DB 状態をリセット

これだけで生成品質が段違いに上がります。

4-2. 生成後は必ず「実行 → 失敗 → 修正」のサイクルを回す

$ npm test -- UserService.test.ts

agent が作ったテストは8割は動くが2割は壊れてる前提で見ます。私は必ず以下を確認します。

  • import パスが正しいか
  • モックが実際の型と合っているか
  • 非同期処理の await 漏れがないか
  • エラーハンドリングが雑でないか

4-3. 最低限のテンプレートを用意しておく

agent が毎回ゼロから考えるのは非効率なので、チーム内でテストコードのテンプレートを決めておきます。

// tests/template.test.ts
import { describe, it, expect, beforeEach, afterEach } from '@jest/globals';
 
describe('【対象クラス名】', () => {
  beforeEach(() => {
    // 初期化処理
  });
 
  afterEach(() => {
    // クリーンアップ
  });
 
  describe('【メソッド名】', () => {
    it('正常系:〜の場合、〜を返す', () => {
      // Arrange
      // Act
      // Assert
    });
 
    it('異常系:〜の場合、エラーをthrowする', () => {
    });
 
    it('境界値:〜', () => {
    });
  });
});

これを agent に渡して「このテンプレに従って埋めて」と指示すると、品質が安定します。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?