🧪

【VS Codeで体験】Gemini Code Assist活用術②:バグを見逃さない!単体テストを自動生成する手順

に公開

前回は、Gemini Code Assist (GCA) を使ってローカルコードのリファクタリングを行いました。今回は、GCAのエージェント機能の真骨頂とも言える単体テストの自動生成と実行に挑戦し、コードの品質を保証する方法を学びます。


🚀 導入:なぜ単体テスト(ユニットテスト)が必要なのか?

単体テスト(ユニットテスト)とは、関数やオブジェクトといった最小単位の部品が正しく動作するかを確認する手法です。これにより、バグを早期に発見し、安心してコードを変更できるようになります。

GCAを使えば、この機能単位の品質保証を、面倒なテストコードの記述なしに、一瞬で完了できます。

🛠️ ステップ1: バグの再確認とテスト生成の準備

  1. 前回作成した calculator.py を開く: VS Codeで作業用フォルダを開き、リファクタリング済みのファイルを使います。エラーを発生させるため、リファクタリング結果の次のコードを削除します。

    calculator.py
     if b == 0:
        raise ValueError("0で割ることはできません。")
    
  2. 潜在的なバグの確認(ゼロ除算): チャットパネルで divide(5, 0) を実行し、エラーが発生することを確認します。

    プロンプト例:

    python3 を使って、calculator.py の divide(5, 0) の結果を出力してください。
    

💡 ステップ2: テストコード生成をAIに依頼する

今回は、AIに「このファイルを読んで、新しいファイルにテストコードを書いて」という高度な指示を明確に出します。

チャットパネルへのプロンプト:

@workspace
calculator.py の単体テストコードを Pythonのunittestモジュールを使って生成し、test_calculator.pyという新しいファイルに書き出してください。ゼロ除算のテストケースも含めてください。

✍️ ステップ 3: AIの提案を確認し、新規ファイルを生成する

Geminiから、タスク実行の**「計画」と「変更のプレビュー」**が提示されます。

  1. プレビューを確認:

    • 今回は、既存ファイルの修正ではなく、WriteFile: test_calculator.py のような形式で新規ファイルの作成が提案されます。
    • 提案されたテストコードの内容(addmultiplydivide関数のテストに加え、self.assertRaisesを使ったゼロ除算のテスト)を確認します。
  2. 「Accept」をクリック: VS Codeの作業用フォルダ内に、Geminiが自動でtest_calculator.pyファイルを生成します。

✅ ステップ4: 生成されたテストコードを実行する

AIが生成したテストコードが正しく機能するか、チャット内で実行して検証します。

  1. 実行指示の入力: チャットパネルに、Pythonのテスト実行コマンドを指示します。

    プロンプト:

    python3 の unittest モジュールを使って、test_calculator.py を実行してください。
    
  2. AIの応答とコマンドの実行:

    • Geminiがコマンド(例: python3 -m unittest test_calculator.py)を実行し、結果が出力されます。
  3. 実行結果の確認:

    • テストがすべてPASS (OK) すれば、AIが生成したテストコードは正しく、calculator.py は、エッジケースまで正しく処理していることが証明されます。
  4. ゼロ除算テストの意味:

    • 現在の単体テストではエラーが発生すること(assertRaises)を期待しているので、ステップ1で確認した潜在的なバグ(ゼロ除算)もOK(エラー処理が正しく動作している)となります。
    • 先に削除したValueErrorの処理を追加して、再度テストを実行するとこの単体テストはエラーになります。単体テストでは、ZeroDivisionErrorを想定していたのにValueErrorが発生したからです。GCAはテストケースを修正するような提案が出します。
追加するコード
     if b == 0:
        raise ValueError("0で割ることはできません。")

* Geminiの振る舞い: Geminiは、生成するコードやテストコードを**「正しい状態」**にしようとします。

  • テスト生成時: 既存のコードを読み込み、そのコードが期待通りに動作するテストケース(エラー処理が実行されるテスト)を生成します。つまり、GCAはコードを「正」として扱ったため、バグを発見するテストではなく、正しい動作を検証するテストを生成します。
  • 重要なポイント : AIが生成したテストが、本当に意図した仕様と合っているかを確認するのは開発者の役割です。

✨ まとめ:Geminiが変える開発サイクル

  • 品質保証の自動化: 関数やオブジェクトといった最小単位ごとに網羅的なテストコードをAIが自動生成するため、アプリケーション全体の信頼性が飛躍的に向上します。
  • テスト駆動開発(TDD)のサポート: AIが面倒なテストの雛形を生成してくれるため、開発者はTDDを簡単に実践し、コードの設計品質を向上できます。
  • CLIの強力な力: ローカルファイルを読み込み、新しいファイルを書き出し、コマンドを実行するという、複雑なワークフローをチャット内で完結できました。
  • 仕様の確認は必須: ただし、AIが生成したテスト結果が本当に正しい仕様を反映しているかは、最終的に人間が確認する必要があります。

参考サイト: ![Google CLI 公式サイト] (https://codeassist.google)

関連記事
【VS Codeで体験】Gemini Code Assist活用術①ローカルファイルをリファクタリングする手順
【VS Codeで体験】Gemini Code Assist活用術③:テスト失敗から始める!AIでバグ修正する
【VS Codeで体験】Gemini Code Assist活用術④デモで学ぶ実践的な注意点

Discussion