【プロンプト解説】シーケンス図を表すPlantUMLコードからプログラムを出力する方法

ChatGPTを使用すれば、シーケンス図を表すPlantUMLコードからすぐにプログラムを生成することができます。
要件定義や説明のために作成したシーケンス図からプログラムを作成することができれば、制作工数を減らすことも可能でしょう。

プロンプト

以下のプロンプトの赤字部分を修正して使用してください。

GPT-4にて検証済みです。

# 命令書:
あなたはプロのエンジニアです。
以下の制約条件とPlantUMLのコードをもとにプログラムを出力してください。

# 制約条件:
・言語は[プログラミング言語]で書いてください。
・わかりやすく書いてください。(コメントアウトを書いたりしてください。)

# PlantUMLのコード:
[PlantUMLのコード]

# 出力文:

実行例

今回はツイッターのクローンアプリのシーケンス図から、Pythonコードを生成しました。

シーケンス図はこちらの記事でごく簡単な要件定義から生成したものです。

プロンプト

# 命令書:
あなたはプロのエンジニアです。
以下の制約条件とPlantUMLのコードをもとにプログラムを出力してください。

# 制約条件:
・言語はPythonで書いてください。
・わかりやすく書いてください。(コメントアウトを書いたりしてください。)

# PlantUMLのコード:
@startuml

actor ユーザー as user

box "クローンアプリ" #LightBlue
  participant "ログインコントローラ" as login
  participant "ツイートコントローラ" as tweet
  participant "フォローコントローラ" as follow
  participant "検索コントローラ" as search
end box

database "データベース" as db

user -> login: ログイン情報
login -> db: ユーザー情報を確認
db --> login: ユーザー情報を返す
login --> user: ログイン成功

user -> tweet: ツイートする
tweet -> db: ツイートを保存
db --> tweet: 保存成功
tweet --> user: ツイート成功

user -> follow: フォローする
follow -> db: フォロー情報を更新
db --> follow: 更新成功
follow --> user: フォロー成功

user -> search: 検索キーワード入力
search -> db: 検索結果を取得
db --> search: 検索結果を返す
search --> user: 検索結果を表示

@enduml

# 出力文:

ChatGPTからの出力されたコード(最後のテスト4行は筆者追記)

class Database:
    # データベースのクラス
    def __init__(self):
        self.users = {}
        self.tweets = []

    def confirm_user_info(self, login_info):
        # ユーザー情報を確認するメソッド
        return self.users.get(login_info["username"]) == login_info["password"]

    def save_tweet(self, tweet):
        # ツイートを保存するメソッド
        self.tweets.append(tweet)
        return True

    def update_follow_info(self, user, follow_target):
        # フォロー情報を更新するメソッド
        if user in self.users:
            if follow_target in self.users:
                return True
        return False

    def get_search_results(self, keyword):
        # 検索結果を取得するメソッド
        return [tweet for tweet in self.tweets if keyword in tweet]

class LoginController:
    # ログインコントローラのクラス
    def __init__(self, db):
        self.db = db

    def login(self, login_info):
        # ログインメソッド
        if self.db.confirm_user_info(login_info):
            return "ログイン成功"
        else:
            return "ログイン失敗"

class TweetController:
    # ツイートコントローラのクラス
    def __init__(self, db):
        self.db = db

    def tweet(self, content):
        # ツイートするメソッド
        if self.db.save_tweet(content):
            return "ツイート成功"
        else:
            return "ツイート失敗"

class FollowController:
    # フォローコントローラのクラス
    def __init__(self, db):
        self.db = db

    def follow(self, user, follow_target):
        # フォローするメソッド
        if self.db.update_follow_info(user, follow_target):
            return "フォロー成功"
        else:
            return "フォロー失敗"

class SearchController:
    # 検索コントローラのクラス
    def __init__(self, db):
        self.db = db

    def search(self, keyword):
        # 検索キーワード入力メソッド
        results = self.db.get_search_results(keyword)
        return "検索結果: " + ", ".join(results)

# デモ
db = Database()
db.users = {"user1": "password1", "user2": "password2"}

login_controller = LoginController(db)
tweet_controller = TweetController(db)
follow_controller = FollowController(db)
search_controller = SearchController(db)

print(login_controller.login({"username": "user1", "password": "password1"}))
print(tweet_controller.tweet("Hello, world!"))
print(follow_controller.follow("user1", "user2"))
print(search_controller.search("Hello"))

# 筆者が追加したテスト
print(login_controller.login({"username": "user2", "password": "password1"}))
print(search_controller.search("chatgpt"))
print(tweet_controller.tweet("Hello, chatgpt!"))
print(search_controller.search("chatgpt"))

Pythonでの実行結果

python test.py
ログイン成功
ツイート成功
フォロー成功
検索結果: Hello, world!
ログイン失敗
検索結果: 
ツイート成功
検索結果: Hello, chatgpt!

このように、簡単にコードを生成することができました。また、正常に動いていることが確認できました。