【第3回】ChatGPTで大規模システムは作れるか？（API設計～インフラ設計編）

# 経緯
この記事は以下の記事の続き。第3回です。
[第1回 全体計画～要件定義編](https://qiita.com/Programmer-cbl/items/480767f026ae8316b72d)
[第2回 アーキテクチャ設計～データベース設計編](https://qiita.com/Programmer-cbl/items/0fcf5d4b20408de6ef80)

前回は設計工程の途中で終了となりましたので、その続きからやっていきます。
API設計からですね。
|詳細工程|担当者|説明|インプット|アウトプット|
|-|-|-|-|-|
|アーキテクチャ設計|システムエンジニア|システム全体の構成や仕組みを設計する|要件定義書、技術仕様書、利用環境の把握|アーキテクチャ設計書、インフラ設計書|
|画面設計|UI/UXデザイナー|画面のレイアウトやデザインを設計する|要件定義書、技術仕様書、ユーザーインタビュー|画面設計書、画面プロトタイプ|
|データベース設計|データベースエンジニア|データベースの構造やテーブル設計を行う|要件定義書、技術仕様書、データベース仕様書|データベース設計書、ER図|
|API設計|システムエンジニア|APIの仕様を定義する|要件定義書、技術仕様書、利用環境の把握|API仕様書|
|インフラ設計|システムエンジニア|システムを稼働するためのサーバー構成やネットワーク設計を行う|要件定義書、技術仕様書、利用環境の把握|インフラ設計書、ネットワーク図|

# API設計
前回同様に、要件定義等のドキュメントを諸々インプットしてアウトプット（API仕様書）を作ってもらいます。

ここで前回のことを思い出します。
前回[画面設計書を作成したとき、大量の設計書が出力されてうざかった、](https://qiita.com/Programmer-cbl/items/0fcf5d4b20408de6ef80#%E7%94%BB%E9%9D%A2%E8%A8%AD%E8%A8%88)ということがありました。
結果的に一覧表にまとめてすっきりした、ということがあったので、今回は詳細は後回しにしてまず一覧で全量を把握していこうと思います。

## API一覧
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3301527/90aab6be-2883-0b44-9256-4b8f8da6028d.png)
↑一覧化されていると抜け漏れチェックがしやすいですね。
例によって、また銀行口座連携機能が考慮されてないような気がしますので指摘します。
（DBからもAPIからも漏れるとか、画面だけでAPI連携するつもりなんだろか？ やっぱり銀行口座連携はスコープ外にした方がよかったかなぁ。。）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3301527/2932107b-5468-0f38-6ad7-86669f54894f.png)
画面一覧書き直させたらAPI-IDが変わったのとAPIの並び順が変わった。。現場だと大事件だけど今回は大目に見ます。

## API詳細設計
全量が確認できたので一個一個見ていきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3301527/d36a26ff-e8d0-ebfc-9a66-4da3055ea0a1.png)
続き
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3301527/b349046d-edc6-3493-d9b4-66de503acf4e.png)
ユーザーアカウント周りの機能は世界中で死ぬほど作られている機能だと思うので、さすがにそれっぽいものが出来てきますね。
他の機能も見ていきます。。。と思ったら、最初に作ったAPI一覧と銀行口座連携の指摘反映版のAPI一覧で転記漏れがありました。
これは良くないですね、指摘します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3301527/b64f4af8-d84d-283e-959c-cabb2779690c.png)
なんか色々増えました。テーブルについてのCRUDを揃えました、という感じですね。
というか、当初テーブル一覧になかったテーブルが増えてるし（notificationとか）、利用するテーブルもだいぶ変わってる。。
これはちょっといただけないなぁ。。
まぁ、直すの面倒なので、後でテーブル一覧の方を直してもらうことにしよう。

### 全量ループ
というわけで、先ほどのAPI一覧に基づいて全量ループをかけました。こんな感じで↓。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3301527/0b39dc0e-a970-ea01-cbcf-d7480d7e27c7.png)
何も考えずに全量やったんですが、後半戦は頭が悪くなってきてすっとぼけ始めました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3301527/1d70f83e-6936-69ca-a3dd-84bf9b8687c7.png)
仕方がないので、毎回指令の中にAPI一覧全量を含めるようにしたらすっとぼけは収まりました。
また、結果を全量載せるのは辛いので載せませんが、フォーマットは結構ズレてました。
毎回フォーマットの指示をきつめに出せば多少改善はしますが、完全一致はしなかったです。
この辺りはファインチューニングで対応できるような気はするので時間があるときにやってみたいなと思います。
何はともあれ、退屈なドキュメンテーションがループぐるぐるで作成されていく様は、なかなか可能性を感じさせるものがありました。
動画、重いのでYouTubeに上げました。

https://youtu.be/tjY9FRMIaa8

API設計は以上とします。次、インフラ設計。

# インフラ設計
ネットワーク図をdotで書いてもらおうと思ったんですが駄目みたいですね。
以前もフローチャート正しく書けなかったし、この辺りは苦手なんですね。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3301527/f56186da-abe1-13b3-1085-23657093e522.png)
インフラ設計書の内容はまぁ普通といえば普通。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3301527/8b6cb45f-9012-6ccc-db69-218fc32c9ceb.png)
EC2立てるほどでもないかなと思ってlambda+Cloudfrontの構成に変えてもらいました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3301527/d11de336-ad4d-7645-f6d5-b23b5257c78b.png)
インフラはあっさりですけど以上にします。

# まとめ
今回はAPI設計書大量作成がメインどころでしたが、何とか作ってはくれました。
ただ、一覧作成時点で内容が崩れ始めたりと、複数の情報の整合性を取って物事に対応していくところは苦手みたいで、色々と限界も露呈しつつあります。
ちなみに、GPT-4でもやってみましたが、あまり大きな差異は認められませんでした。
（そもそもGPT-4は3時間で25回しか呼べないのでぐるぐるループに向かない。。早くwaitlist進んでほしい。。）

今回で一応設計工程は終わったことになりますが、設計書間の整合性が取れていなかったり、他にも色々気になるところがあるので、
次回は開発に行く前にその辺を深堀する回にしていこうかと思います。


# おまけ
* ぐるぐるループスクリプト
一覧の通りにループさせるのはchromeのプラグインでやりました。
他にもChatGPTの出力をマークダウンでダウンロードする機能とか、も付けてgithubにアップしようと思ったんですが、
何故か私のgithuアカウントが村八分状態？にされていて公開できてないです。。
一応解除申請は出してあるのでそのうち公開します。