設計書を基にChatGPTがJavaのコードを出力する一連のフローをご紹介します

こんにちは、読者の皆様。本日はOpenAIが開発した人工知能モデル、ChatGPTについて触れると共に、それがどのようにJavaのプログラム生成に役立つかを解説いたします。具体的には、設計書を基にChatGPTがJavaのコードを出力する一連のフローをご紹介します。

我々が日々取り組むプログラミング作業は、多くの場合、設計書をもとにコードを書くという形をとります。今回、私たちは具体的な設計書を用意し、その設計書をChatGPTに提示しました。

設計内容は以下の通りです。


プロンプト

# 指示
次の設計からJavaで値オブジェクトとエンティティのプログラムを出力して。

# 設計

## 値オブジェクト
クラス:  UserID
説明: Userに割り当てる一意の識別子
プロパティ:
  String id:  識別子
コンストラクター:
  UserID(String id) : 制約に従ってチェック処理
制約:
  idは12桁、先頭を a として残りを数字とする。 例)a01234567890

## エンティティ 
クラス: User
説明: Userエンティティ
プロパティ: 
  UserID userId: ユーザー識別子
  String name: ユーザー名
コンストラクター:
  User(String name) :  UserIDはコンストラクターの中で自動生成
メソッド: 
  getUserID()
  getName()
  updateName(String name): ユーザー名を変更する

この設計書を基にChatGPTにJavaのコード生成を依頼したところ、見事な結果が返ってきました。ChatGPTは与えられた設計書を適切に理解し、それに基づいたJavaのコードを生成しました。UserIDクラスでは、コンストラクタでIDの形式を検証し、適切な形式でなければ例外をスローします。一方、Userエンティティでは、インスタンスが作成される際に自動的にIDを生成します。


ChatGPTの回答

import java.util.Random;

// 値オブジェクト
public class UserID {
    private String id;

    public UserID(String id) {
        if (id == null || !id.matches("a\\d{11}")) {
            throw new IllegalArgumentException("ID must be a 12-character string starting with 'a' followed by 11 digits.");
        }
        this.id = id;
    }

    public String getId() {
        return id;
    }
}

// エンティティ
public class User {
    private UserID userId;
    private String name;

    public User(String name) {
        this.userId = generateUserID();
        this.name = name;
    }

    private UserID generateUserID() {
        Random random = new Random();
        String id = "a";
        for (int i = 0; i < 11; i++) {
            id += random.nextInt(10);
        }
        return new UserID(id);
    }

    public UserID getUserID() {
        return userId;
    }

    public String getName() {
        return name;
    }

    public void updateName(String name) {
        this.name = name;
    }
}

この実例から見て取れるように、ChatGPTは開発者の負担を軽減し、生産性を向上させる大きな可能性を秘めています。開発者としては、ChatGPTのような先進的なツールを活用することで、より効率的で質の高いコードを生成することができるでしょう。今後もAIと開発者の協働による新たな可能性について探求して参ります。