👻

言葉からシステムを生成する Text to System への挑戦

に公開

言葉からシステムを作りたい

生成 AI を使って、自分が使うアプリくらいは作れるようになったけど、部内の便利システムとなるとそうはいかないんかなー。どうなんかなー、と思ってやってみた記事です。良い子は真似しないでね、な内容となっておりますのでご注意ください。

とにかく実装し続けてほしい

まず、禁断のコマンドを覚えましょう

q chat ${指示} --no-interactive --trust-all-tools

このコマンドはユーザとのインタラクションなしに全てのツールを使用して実行するためのコマンドです。あとは、このコマンドをプロセスとして次々に実行するプログラムを書けば、ずっと動いてくれる開発エージェントができあがります。

結果は?

まずはこちらの動画をご覧ください。Q dev に 12 時間稼動してもらい、その後 3 時間私から修正の指示を出し続けました。ソースコードの手修正はしていません。

https://youtu.be/SvGXfckHsls

実装されたファイル数はテストも含めて 300 になりました。

AWS アーキテクチャは鉄板のサーバレス構成です。

  • 認証: Cognito
  • Web hosting: CloudFront + S3
  • API: API GW + Lambda + DDB

フロントエンドアプリアーキは Hooks Base で React で。

バックエンドアプリアーキはビジネスロジック、データ、基盤系アクセスくらいに分けています。

この辺りは Q dev にガイドラインとして作り方を与えました。

どうやって作ったのか?

まず、仕様を決めるための仕組みを作りました。TextToSystem アプリです。GenU をベースに画面の構成だけ変更することでシステム化しました。そこも Q dev で。

https://youtu.be/KRRYteMr1rs

https://youtu.be/LuYw_-8SXTA
モックはこんな感じ。

裏側では TextToSystem で決めた仕様やモックを Q dev cli を多段階に呼び出す python アプリに渡して実行!後は放置です。開発のガイドラインらしきものは事前に作りました。そこも Q dev です。

タスクは 60 ほどになり 12 時間動き続けました。そして、3 時間ほど Q dev cli に修正指示を出し続けたのでした。基本エラーが出ているものに対して修正をお願いする形です。

所感

12 時間後上がってきた成果物は、システムとしては全く動かない代物でした。でも、パーツはできていました。バックエンドの API や画面コンポーネントなどです。ウォーターフォールで結合テストした時に全然動かないってなる悲しいプロジェクトを思い出しました。。。これは上記のようにタスクに分割して、タスクごとに Q dev cli にタスク実行指示を出した結果、そのタスクとしては正しく動くが、タスク間の整合が取れていないことが原因だと考えられます。連結の観点で整合性違反に気づくためのタスクがなかった。まさに、実際のプロジェクトでもあると思いますが、隙間に落ちた、というやつです。また、IF の仕様書も作成されていましたが、それを読んだ形跡はあるものの細かいところが間違って連結できない、などがわんさか出ました。それを一つ一つ修正指示を出しわけです。

ただ、この規模のシステムでも AWS 基盤から作れば 2week - 1 month はかかると思います。Q dev cli による爆速さがお分かりいただけると思います。

まだまだ、タスクの切らせ方やガイドラインの整備など精度を向上させることはできそうです。

一つ面白かったのは、DDB のアクセスパターンが設計され、それに近い形でデータも入っていたにも関わらず、アプリがほとんど Scan + Filter で済ませていたことでした。Query でのエラーやバグが大量に出ており、テストを通そうと Scan + Filter に切り替えた形跡がありました。こわいこわい。ただ、部内利用するこの程度の仕組みならコスト・性能ともに問題になりにくいかもしれませんね。

どこまで作っておいて、どこまでを修正させるのか?が肝

それなりの規模のシステムを作らせてみて思ったのは、これって 「AWS アーキとかは作っておいて、アプリだけ作らせればもっと上手くいくんじゃ?」ということでした。Database も NoSQL ではなく RDB にすればミスが減るのではとか。さらに、ソフトウェアアーキも固定のシンプルなものにすればいいのでは、、、と。なので今度は Cognito + ALB + Streamlit on ECS Fargate + Aurora Serverless v2 の構成を作っておいて、それを使って DDL とアプリだけ作らせる戦法でどのくらいできるか試したいと思います。結局業務ごとに違うのはデータとアプリの部分だけだと思うのです、という発想です。

アマゾン ウェブ サービス ジャパン (有志)

Discussion