【第2回】ChatGPTで大規模システムは作れるか？（アーキテクチャ設計～データベース設計編）

# 経緯
この記事は以下の記事の続き。第2回です。
https://qiita.com/Programmer-cbl/items/480767f026ae8316b72d

以下は前回ChatGPTで作成した全体工程です。今回は「設計」に取り掛かります。
|工程|詳細工程|担当者|説明|インプット|アウトプット|
|-|-|-|-|-|-|
|要件定義|ユーザーインタビュー、要件整理|システムエンジニア|ユーザーが求める機能や要件を明確化する|ユーザーの要件や提案書|要件定義書、プロジェクト計画書|
|設計|アーキテクチャ設計、画面設計、データベース設計|システムエンジニア|システムのアーキテクチャや画面、データベースを設計する|要件定義書、技術仕様書|詳細設計書、画面設計書、データベース設計書|
|実装|プログラム作成、単体テスト|プログラマー|設計書に基づいてプログラムを作成し、単体テストを行う|詳細設計書、プログラム仕様書|プログラム、テスト仕様書|
|結合テスト|モジュールの結合テスト、システムテスト|テストエンジニア|実装されたモジュールの結合テストを行い、システムテストを行う|プログラム、テスト仕様書|結合テストレポート、システムテストレポート|
|ユーザーテスト|ユーザーによるテスト|ユーザー|実際のユーザーによるテストを行い、不具合を洗い出す|結合テストレポート、システムテストレポート|不具合報告書、テスト結果報告書|
|保守・運用|システムの保守・運用|システムエンジニア|システムの保守や運用を行う|システム仕様書、ユーザーマニュアル|システム保守報告書、運用マニュアル|

# 詳細化
前回の要件定義工程と同様に、設計工程を詳細化します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3301527/38cb4efc-ed7e-e68e-8d56-4d8a3f4d27ef.png)
前回同様になんか増えたましたが、まぁきちんと詳細化できているということで良しとします。

# アーキテクチャ設計
というわけでアーキテクチャ設計からやってみます。
とりあえず前回作成した「要件定義書」「全体工程表」と先ほど作成した「設計工程」の詳細化版を全て読み込ませます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3301527/3a9b0fbc-9a9e-22ce-a8df-152e5a9a3e41.png)
～～中略～～
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3301527/83ec5e08-5589-2a99-07c6-60fc9c65e7ba.png)
そしてようやく設計書作成を指示!!
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3301527/30cba58b-c2f2-65cb-f5b9-652bee6bc82b.png)
↑うーん。。この設計書要るか？なんか、わざわざ作る必要なかった気がする。
↓インフラ設計書も、、まぁスペックとかは本来必要だけど、今回はそこまでは検証しなくていいかなぁ。
　というか微妙にインフラ構成図間違ってるし。。nginxとPostgreSQL直通はできんだろ。。uWSGI通せよ。。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3301527/08b9d7a2-85a6-670f-f46b-17c38667636a.png)
というわけで、この二本の設計書は書いてはもらったものの、、あんまり意味ないので破棄します。

# 画面設計
なんかそれっぽいものが出てきた!! 合ってんのか知らんけど。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3301527/9f353d55-cb36-7f05-30b3-292fcc3b8a87.png)
～～中略～～
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3301527/a596115f-0d79-b89e-7bf2-254c1ac8b6a5.png)

要件定義書に書いてあった画面一覧は以下の7画面。
- ログイン画面
- ホーム画面（収支一覧、グラフ表示）
- 収支入力画面
- カテゴリ管理画面
- 予算設定画面
- 銀行口座連携画面
- アカウント設定画面

これ対して、画面設計書は明らかに過剰に生成されていました。
垂れ流しにしたので全体像がつかみにくくなったので、画面一覧を作成してもらいます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3301527/4b91c4b1-25d2-68cb-ff29-5dc8364ae766.png)
すっきり全体像が分かりました。アカウント設定画面までは良かったんですが、収支一覧画面以降は勝手に増えたものですね。
ホーム画面の説明が「収支一覧やグラフ表示などの機能へのリンクを提供する」とありますので、むしろきちんと詳細化できている、と言えそうです。
この要件でいいのかどうか知りませんが、一旦これで良しとします。

また、画面プロトタイプは省略されてしまいました。まぁ仕方ないですね。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3301527/9bec6375-5f5a-2567-ab80-981ed92a5f1a.png)


# データベース設計
データベース設計を指示しましたが、これはDB名、テーブル一覧とテーブル定義書は分けて出力した方がよかったかもですね。
相変わらず合ってるかどうかは知りませんがそれっぽいものが出てきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3301527/67b52221-7b95-b388-046d-529ea19dac6c.png)
なんとなく、要件に挙がっていた「銀行口座連携」と「家族単位での情報管理」をどうやるかが怪しいので指摘します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3301527/387f2dbc-76b2-4625-0455-7c9c3135c522.png)
なんと！ 複数のユーザーが共有できるカテゴリや予算が実現可能？ちょっと、、意味は分かるけど、
それでどうやって家族管理するのかイメージできませんが、まぁいいでしょう。
できるといってるなら信じましょう（本来こういう対応は絶対ダメですね）。

銀行口座連携の方はミスを認めているようなので、抜け漏れは普通にあるようですね。
前回のレビュースレッドのように、抜け漏れチェック用の別スレッドを用意するとこの辺りは防げるのかもしれません。

長くなってきたので今回はここで切ります。

# まとめ
今回は概要→詳細の作業の繰り返しでした。
詳細化すると概要の時に書かれていなかった内容が出てくる、という当たり前のことではありますが、
ウォーターフォールプロセスでのシステム設計工程そのもの、という感じで可能性を感じさせるものがありました。
次回はAPI設計から、の予定です。

# おまけ
* 文書の読み込ませ方
ChatGPTは長めの文書を読み込ませると、要約するかそのままオウム返ししてくることが多いです。
これは今回のように前工程で作ったドキュメントを大量に読み込ませた時には、出力が終わるまで結構待たされることになって時間の無駄です。
なので、指示の最後に「OKかNGで」と書いて返事のパターンを限定することで回答にかかる時間を節約しています。
こういう感じで↓
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3301527/1322f7e7-26f8-bbf2-5866-9ed5bfcc7cc9.png)
ChatGPTは「会話としてありそうなもの」を再現するらしいのですが、このやり方でもちゃんと文書の文脈を踏まえて次の回答をしてくれます。


# リンク

第3回はこちら

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