Taste of Tech Topics

Acroquest Technology株式会社のエンジニアが書く技術ブログ

bolt.new はシーケンス図からどこまで自動生成できるか?

こんにちは、バックエンドエンジニアの前田です。
前回はbolt.newを用いて、画面イメージからどこまで画面を生成できるかを試してみました。
acro-engineer.hatenablog.com


画像を読み込み、ほぼイメージ通りに生成してくれることが分かったので、今回はシーケンス図を画像にしてbolt.newに渡し、どこまで生成してくれるかを試してみます。

1. 今回作成するアプリ

今回作成するアプリは、砂時計アプリです。
以下の画像のようなシーケンス図をdraw.ioやMermaid Graphical Editorなどを用いて作成し、作成した画像をbolt.newに渡して、砂時計アプリを生成してもらいます。
砂時計アプリの仕様としては、時間を1、3、5分から選択して設定し、スタート、一時停止、リセットボタンで操作できるようにします。
今回は、Mermaid Graphical Editorで、以下のようなシーケンス図を作成しました。

bolt.newに渡したシーケンス図

達成したいことは以下です。

  • シーケンス図に記載している機能を満たし、動くアプリを作成すること
  • メソッド名もシーケンス図に準拠すること

砂時計アプリは、言語はTypeScript、フレームワークはReactを用いて生成しています。
また、今回はフロントエンドのみで動作するWebアプリとしました。

2. アプリ作成

2.1. シーケンス図を指定してアプリを生成させる

シーケンス図の画像と以下のプロンプトを指定して生成させました。

砂時計アプリを作成してください。
以下の要件に従うこと。

# 要件
・画像のシーケンス図に準拠すること。
・メソッド名もシーケンス図に準拠すること。

以下のような画面が生成されました。

生成された砂時計アプリ

シーケンス図の指定のみで、画面の指定はしていませんが、使いやすい画面を生成してくれました。
シーケンス図で指定した設定時間の選択や、スタート、一時停止、リセットボタンの生成はできていました。

2.2. 生成結果の詳細

シーケンス図を指定して生成させた結果、ロジック部分は以下のようなコードが出力されていました。

import { TimerOptions } from '../types';

export class TimerLogic {
  private remaining_time: number = 0;
  private timer_id: number | null = null;
  private options: TimerOptions | null = null;

  getTimerOptions(): TimerOptions | null {
    return this.options;
  }

  getRemainingTime(): number {
    return this.remaining_time;
  }

  setTimer(time: number): void {
    this.remaining_time = time;
    this.saveToStorage();
  }

  start(): void {
    if (!this.timer_id) {
      this.timer_id = window.setInterval(() => {
        if (this.remaining_time > 0) {
          this.remaining_time--;
        } else {
          this.reset();
        }
      }, 1000);
    }
  }

  pause(): void {
    if (this.timer_id) {
      window.clearInterval(this.timer_id);
      this.timer_id = null;
    }
  }

  reset(): void {
    this.pause();
    this.remaining_time = 0;
    this.saveToStorage();
  }

  private saveToStorage(): void {
    localStorage.setItem('timer_options', JSON.stringify({
      remaining_time: this.remaining_time,
    }));
  }

  loadFromStorage(): void {
    const stored = localStorage.getItem('timer_options');
    if (stored) {
      const options = JSON.parse(stored);
      this.remaining_time = options.remaining_time;
    }
  }
}
シーケンス図で指定した内容 生成結果
クラス 想定通り出力されていた
メソッド名 3語以上のメソッド名は少し指定したものと異なっていた。getTimeOptionsとしていたメソッドがgetTimerOptionsとなっていた。シーケンス図で指定したものとは違っていたが、より適切な名称になっていた。
メソッドの内容 一部異なっていた。countTimeメソッドでカウントを更新するようにしたかったが、startメソッドに組み込まれていて、countTimeメソッドが存在しなかった
処理の流れ 基本的には想定通りだが、設定時間の保存がresetメソッド実行時のみに指定していたが、setTimerメソッド実行時にも設定時間を保存していた。処理自体は問題なかった

3. まとめ

今回は、bolt.newにシーケンス図を渡して、どこまで生成してくれるかを試してみました。
結果としては基本的な機能は実装してくれていて、動くことを確認できました。
メソッド名やコメントなど、長い文章を指定している場合、指定した内容とは、多少異なる内容が生成されることもあるようです
また、処理が一部想定と異なっている部分がありましたが、今回は、とても簡単なプロンプトを指定しただけだったので、実際には、より具体的な内容をプロンプトで指定すると良いと思われます。

Acroquest Technologyでは、キャリア採用を行っています。

  • Azure OpenAI/Amazon Bedrock等を使った生成AIソリューションの開発
  • ディープラーニング等を使った自然言語/画像/音声/動画解析の研究開発
  • マイクロサービス、DevOps、最新のOSSクラウドサービスを利用する開発プロジェクト
  • 書籍・雑誌等の執筆や、社内外での技術の発信・共有によるエンジニアとしての成長

少しでも上記に興味を持たれた方は、是非以下のページをご覧ください。

www.wantedly.com