【第1回】ChatGPTで大規模システムは作れるか？（全体計画～要件定義編）

# はじめに
この試みは何回かに分けた連載になります。
最終的に大規模システムが作れるのかどうかは今時点では私もわかりません。
出来ないという結果になるかもしれませんが、気の向くままにやっていこうと思います。

追記）
グダグダやっていたら結構長くなってしまっていますので、
お好きなトピックからどうぞ。閲覧が多いのは第6回のようです。（個人的なおすすめは第8回です。）
[第1回 全体計画～要件定義編](https://qiita.com/Programmer-cbl/items/480767f026ae8316b72d)
[第2回 アーキテクチャ設計～データベース設計編](https://qiita.com/Programmer-cbl/items/0fcf5d4b20408de6ef80)
[第3回 API設計～インフラ設計編](https://qiita.com/Programmer-cbl/items/0c5de54a93f8c5e07ba3)
[第4回 設計工程の振り返り編](https://qiita.com/Programmer-cbl/items/353f0e8e650f9a724284)
[第5回 コーディング～疎通編](https://qiita.com/Programmer-cbl/items/bf278fe150293afd3b6b)
[第6回 画面デザイン編](https://qiita.com/Programmer-cbl/items/e2c36920d6d2c548d2b9)
[第6.5回 画面デザイン編おまけ AAでATOMIC](https://qiita.com/Programmer-cbl/items/2343aada819cf9eebe96)
[第7回 GPT API＋Angularで画面作成編](https://qiita.com/Programmer-cbl/items/7980e9c3085a8ce2aaf9)
[第8回 ドメイン駆動設計×クリーンアーキテクチャー編](https://qiita.com/Programmer-cbl/items/f98c37e7961b05f0f432)

第7回でChatGPTの限界は見えたと思います。
「トークン数の上限があるので、それより広い範囲での全体整合性が取れない」
というところが大規模化のボトルネック（限界）になりました。言うまでもなく当然の話でした。

わかりやすい例で言うと、項目数が500個あるテーブルを二つ使うようなサービスがあったとしたら、500項目×2個分の情報だけでトークン上限になるよ、という話です。まぁ、ほんと当たり前すぎてドヤ顔でいう話じゃないですけど。

逆に言うとボトルネックにならないようにプログラム間の整合性を表現する記述をどれだけコンパクト化できるか、というところにエンジニアリング的な要素があるなと思いました。
今のところの成果としては3時間くらいで[このくらい](https://bank-crm-v1-mock.s3.ap-northeast-1.amazonaws.com/index.html)はいけるようになった。という状況です
https://bank-crm-v1-mock.s3.ap-northeast-1.amazonaws.com/index.html
※モックなのでユーザー／パスワードは何入れてもOKです。

自動生成用のプログラムはここに置いてあります。

https://github.com/dev999900001111/auto-gen-for-web-apps




紹介）
あと、スマホアプリ系作りたい方はこちらへどうぞ↓↓↓

https://qiita.com/MLLB/items/f2f6c4d049ec72ad8ce5


# きっかけ
ChatGPTでプログラムが書けるというのはよく聞くし、それどころかプログラムをすっ飛ばして「ChatGPT自体が実行環境の振る舞いをする!!プログラム自体が無意味に!!」とすら紹介されています。
SNSではこのような「もはやプログラマーが不要になる世界が訪れた」的な素晴らしい話が溢れ返っているんですが、何故か私の周りはBullshitJobsで溢れ返っています。
この乖離は一体何なんでしょうね？
ChatGPT様が全部やってくれればいいのに、、と半ば投げやりに「家計管理システム作って」と言ってみたんですが、全然作ってくれませんでしたよ。
しかし代わりになにやら要件定義書のようなものを返してきました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3301527/9150751b-12cc-b444-a12e-b3c84aede19a.png)
なるほど、ChatGPTさんは「StepByStep」という呪文で賢くなると聞いたことがありますが、これは本当にStepByStepでやれってことですかね？
というわけで、地道に指示を出したら最終的にちゃんと動くものが作れるのか、ChatGPTの実力を測ってみることにしました。

# テーマ
いきなり大規模のシステムにはならないので、StepByStep、中規模くらいのものを繋げていって大規模化させてみよう、という試みです。
とりあえずお題目として家計管理アプリを作ってみようと思います。

私の場合は危機感というよりはこのくそみたいな仕事を撃滅してくれるんであればやってほしい、という切なる願いです。

# 全体像
まず全体工程から作ってもらいます。担当者、インプット、アウトプットは明記しろっていろんなPM本に書いてあったので書かせてみました。
（普通はこれにスケジュールをセットにするんですが、今回はスケジュール関係無いから。）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3301527/eadaa858-2ea2-5582-5df1-b45e4a0c335a.png)
途中で切れてますが、表は出来上がってるので良しとします。
私、昭和の人なのでウォーターフォール一択なのですが、ChatGPTさんはその辺の空気読んでくれたみたいで良かったです。
それでは「要件定義」工程を進めていきます。

# 要件定義
## 詳細化
ウォーターフォールプロセスで「工程を進める」とは、だいたい「インプット情報を具体化、精緻化、詳細化、みたいなことをする」だとしておきます。諸説あるでしょうが。
ということで要件定義工程をもう少し詳細化してみます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3301527/20e8a700-7eec-9dea-ba60-f7ee80e620ba.png)
工程が分割されすぎている気がしますが、これに則って進めます。

## ユーザーインタビュー
工程名とアウトプットの名前で作成指示を出します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3301527/c325a134-a74b-d0bc-9d38-b942f74084db.png)
だいぶそれっぽいものが出来上がってきました。ペルソナを色々指定すると別の切り口の機能も挙がってきそうですね。
その他要件が見切れてますが、ログインログアウトとか、一般的なものなので割愛します。

## 要件整理、要件定義書作成
要件整理と要件定義書作成は、工程は分かれていますがアウトプットが同じなので一緒に実施してもらいます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3301527/2b44905a-ab6a-d0aa-ac5c-d5a3a3a63bb3.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3301527/78027a9e-6df4-1dec-f628-532dccc2351b.png)
ユーザーインタビューの記録、要件整理表を引き継いで書けているようなので問題なさそうですね。
開発環境が気に入らないので少し直します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3301527/19d42d67-aa8d-8b65-a6e8-6585aba055c0.png)
～～中略～～
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3301527/f6ade9d9-52d1-0fa1-a7e6-35c1d8749193.png)
ちゃんと修正されました。


## レビュー
成果物をレビューしてもらいます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3301527/54ade26c-8f28-fc2d-b2a9-214f94637db4.png)
～～中略～～
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3301527/a6869d00-8128-68ae-734b-9115ae4a1179.png)
まぁ細かいところは色々後工程でやればいいよねってことですが、
「UI/UXデザインに関する情報が無い」との指摘はごもっとも、、ここは実際の仕事でもよく揉めるところなのでリアリティがありますね。
あとは、私だったら「銀行口座連携」は初期構築の要件からは外して別スケジュールに回しますが、、まぁいいでしょう。


# まとめ
今回は全体計画から要件定義までをやってみました。
といってもほとんどChatGPTが喋るに任せただけで、大して何もしてないです。
「まず全体像を作って、その後各項目を詳細化」という流れが有効そうで、人力でStepByStepに指示を出すことで精度が保てているような気はしました。この辺は人間と同じですね。
とはいえ、上流工程は言いたい放題言うだけなので、この時点では何も出来上がっていません。
果たしてこのまま実装まで行けるのか。次回は設計工程に入っていきたいと思います。

# おまけ

* 工程をフローチャートにしたい
全体計画表を作った際に、見難いから図にできないものかと「dot言語でチャート化して」と言ってみたところ。。
dotの構文は合っていたものの、ご覧の通り内容は全然ダメ。
一応GPT-4でもやってみたけど同じような結果でした。StepByStepのおまじないも大して効果なかったです。
フローチャートは苦手なのかな・・？ 
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3301527/919237e1-f2a3-fce9-d5e9-d7e32403dd4d.png)

* ペルソナ
今回詳細は載せませんが、ペルソナを色々指定することで多少異なる意見が出てくることもありました。
複数の意見をまとめてサマる、とかもChatGPTの得意分野みたいで楽にできました。

# リンク
第2回はこちらです

https://qiita.com/Programmer-cbl/items/0fcf5d4b20408de6ef80