AIエージェントによる単体テスト生成を試してみる 

アイキャッチ画像

はじめに

IT業界の最新の動向について話すとしたら、その中でも大きなものの一つは、やはりAI開発ではないでしょうか? 毎日のようにAIについて耳にしますし、大手企業がAIを最大限に活用するための仕組みを整えていることもご存じでしょう。

エンジニアとして、自分でもAIをどのように活用できるか考え始めた方もいるかもしれません。例えば、コードについて分からないことがあれば、ChatGPTやClaudeに相談することもあるでしょう。しかし、本当の意味でのAgentic Developmentは、それだけにとどまりません。

AIを使った開発と聞くと難しく感じるかもしれませんが、このような小さな作業から始めることで、AIに実際の開発作業を任せる感覚を体験できます。

AIエージェントとは?

AIエージェントとは、簡単に言えば、AIにある程度の判断や作業を任せることができる仕組みです。 

AIエージェントを使った開発では、AIにコードを生成してもらうだけではなく、「何を作るのか」「どのような条件を満たす必要があるのか」といった情報を与え、その内容をもとに作業を進めてもらうことができます。

例えば、単体テストを作成する場合、「このクラスのテストを書いて」とAIに直接指示することもできます。しかし、テストしてほしいクラスや関数、確認したいケースなどをMarkdownファイルにまとめておけば、そのファイルをAIに読み込ませることで、より具体的な指示を与えることができます。

もう手動で単体テストを作成したくない!

単体テストを書くことは、開発において重要な作業の一つです。システムが正しく動作することを確認できるだけでなく、お客にも安心してもらうことができます。また、コードを変更した際に、既存の機能に影響が出ていないことを確認するためにも役立ちます。

一方で、機能の実装に一生懸命取り組んだ後に、ユニットテストまで書かなければならないのは、なかなか大変な作業です。後回しにしてしまうと、テストを書くこと自体を忘れてしまい、結局作成されないままになったり、納品直前になって慌てて作成したりするリスクもあります。

では、どうすればよいでしょうか?

AIに任せてみましょう!

このような、簡単ではあるものの手間のかかる作業は、AIに任せるのにぴったりです。また、失敗した場合の影響も比較的小さいため、AIを使った開発を始めるきっかけとしても最適です。

対象クラスを作成

まずは、練習のため、小さなクラスを作成しましょう。

// example.cs

// メール確認クラス
public class EmailValidator
{
 // 有効かチェックメソッド
    public bool IsValid(string email)
    {
        // nullや空白の場合
        if (string.IsNullOrEmpty(email))
        {
            return false;
        }

        return email.Contains("@");
    }
}

文字列がnullまたは空文字の場合、あるいは「@」が含まれていない場合にfalseを返す、シンプルなメールバリデーターです。

Markdownファイル作成方法

次は、Markdownファイルに作成し、作成したいテストの内容を記載します。

Markdownファイルの内容は自由なんですが、基本的に、次の流れをお勧めします。

  • クラス名
  • クラスのディレクトリ
  • 対象メソッド名
  • テストケース一覧

例:

// example.md

# EmailValidator のテスト仕様 
test/example.cs
## 対象 
- メソッド: IsValid
### Test-Case 001 nullの場合、falseを返す
入力
- null
期待
- false
### Test-Case 002 “@”が含まれていない場合、falseを返す
入力
- @がないの文字列
期待
- false

単体テスト作成

コードベースを直接読み込めるAIエージェントを使用することをおすすめします。今回の例では、VS CodeにすでにインストールされているGitHub Copilotの無料版を使用できます。

AIにファイルに書かれている内容をもとにテストを生成するよう指示するだけで、新しいテストファイルが生成されます。使用するテストフレームワークや、新しいファイルの命名規則も指定しておくと、よりスムーズです。

今回使用したプロンプトは以下のとおりです:

このファイルに記載されているテストを、xUnitを使って作成してください。ファイル名はこのファイルと同じ名前にし、「Tests」という単語を追加してください。

以下のスクリーンショットでは、AIがテストを生成しているを確認できます:

結果はこちらです:

毎回AIにテストを生成してもらうのは、少し手間に感じるかもしれません。この作業はCIパイプラインの一部として自動化することもできますが、今回の記事ではそこまでは扱いません。

まずは今回の例を通して、AIエージェントにコードベースを読み込ませ、新しいファイルを生成してもらうという、AIを使った開発の第一歩を体験していただければと思います。