【第6回】ChatGPTで大規模システムは作れるか？（画面デザイン編）

# 経緯
この記事は以下の記事の続き。第6回です。
[第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)

昨日画面～API～DBまで疎通出来たはいいものの、あまりにも画面がチープすぎて流石にこのままでは終われないので、画面デザインを見直すことにします。
とはいえ、元々Chat-GPTで一括大量生産をやりたくて始めた企画なので、画面一つ一つのデザインを見ていくというのはあり得ません。
では一体どうしたらよかったのか？
第2回で作った工程表を見返していて気づいたんですが、、
画面設計のところ、画面プロトタイプを作ることになっています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3301527/c70cbd5a-1344-023b-4ef4-d4d75b265504.png)

画面プロトタイプというと、私の感覚だとreactでAPI繋がずに作る、的な解釈をしていたので飛ばしてしまいましたが、
よくよく考えるとこの工程をもう少し厚めに考える必要があったように思います。
ということで再度よく聞いてみました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3301527/9a0ec36e-baa7-1bb4-52e0-1fab823868d7.png)
「1.画面設計の概要を決める」は要件定義で済んでいるからいいとして、2.以降が問題です。
Chat-GPTとのインターフェースは今のところ文字しかないのでこの辺りで引っ掛かります。
通常の現場では2、3の工程はFigmaとかPhotshopとかが使われると思います。

一方、前回のデザインの失敗は、画面作成において動作(js)とデザイン(HTML)を一緒くたにしてしまったので、Chat-GPTさんがうまく動けなかったのかな、と思います。
というわけで今回はまず動作は取っ払って、単純に画面デザインだけ作ってもらうことにしました。


# UI部品集作り
デザインだけ作る前に、一括大量生産のお作法としてルール策定を先にやることにしました。
実際の現場でも画面デザインを丸投げすると大変なことになるので、UI部品サンプル集を渡して、それに則って作ってもらう、というのはセオリーだと思います。
というわけで早速作ってもらいます。
今回は「家計管理システム」という情報は全く必要ないので、一般的な業務システム、という前提で指示しています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3301527/6cd736f2-b92b-6824-2857-01f42dc86cf1.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3301527/4cce9811-f5d9-a0cb-71f8-f2c3f2a6b51f.png)
↓
おお!! シンプルだけど引き締まったいいデザイン。フラットデザインですね。ちゃんとマウスホバーも効いています！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3301527/0d9ed2c2-1370-16f0-4309-0c6d4f76f9a8.png)

よし、この調子でどんどん部品を作ってもらおう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3301527/fb05df03-1795-601a-c7b1-76b18e19c218.png)
～～

で、とりあえず入力フォーム周りは全部用意してもらって最終形がこれ↓
これ作るまで3分かそこらでできた。淡泊ではあるものの主張控えめで嫌いじゃないデザイン。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3301527/b86d2c16-d36d-393f-c3f8-4471f750e297.png)


ちなみに、ボタンの上にある謎の棒はrangeです。
また、チェックボックスとラジオボタンは最初は普通のinputタグだったんですが、こんな指示をしたらちゃんと理解してくれました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3301527/7ea49ead-3ca1-41f9-83ae-5c7cdd3a2ba9.png)

よし、画面がまともになってくると俄然やる気が出てきますね。
調子に乗ってもう一度やってみました。今度は青くなりましたが、これはこれでいい。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3301527/b9de60e6-a95b-3653-943c-76e2a8e7058c.png)

まぁ、好み的に最初に作ったやつの方が好みなので、そっちを採用します。

でさらに、ここで忘れてはいけないのがレスポンシブ対応。
レスポンシブ用のCSSくださいって言ったらくれます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3301527/1f8af68e-5825-a14d-c111-045e56dee584.png)

なんか画像貼ったらでかくなってしまった、、
レスポンシブならボタンは横幅いっぱいに広げてほしかったけど、、まぁいいです。細かいところを指摘しだすときりがないので。
![_C__Users_blkd1_workspace_chromeplugin_chatgpt-dl_repo-react-3_mock_000-styleguid-dark.html(iPhone SE).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3301527/760b0d7f-6b45-d8da-e637-dde0c41c9d17.png)

ではここまででUI部品集が出来たので、これを基に個別の画面作成に移ります。

# モック画面作成
今回は機能性を排除してデザインに集中してもらいたいので、あえてAPI一覧は読み込ませていません。
要件定義書とUI部品集のみを読み込ませます。いつものやり方で読み込ませていきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3301527/509da15f-94fd-b269-8fed-3f92022fc33f.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3301527/fef6f45d-bd8a-5dfd-57c3-b5e53072a26a.png)

読み込みが終わったら今回は明示的に「モック」を作るように指示します。また、HTMLのみを作るように指示します（CSSはUI部品集のものがあるので）。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3301527/5ccf1041-d566-53d0-ef0c-05a8019f373f.png)


で、できた画面がこれ↓
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3301527/633aa9d3-1230-1bb7-a2c3-3a229f2add7f.png)
良い!!
（まぁ、入力ボックスがそろってなかったり、マージンが足りてないとか、デザイナーさんに依頼したものに比べると全然だけど。。）
でも全然十分。最初の古生代デザインに比べたら全然見れる。
なんか勝手にフッターに色々リンク付けてるけど、、これは後でカットだな。。

というわけで例によってここからは同じ指示でループさせて全画面作りました。
全部載せるの大変なので特徴的なものだけ載せます。
まずこれ、だいぶそれっぽい。合格。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3301527/b25398ef-e148-0f98-f4d9-8614db88b6f0.png)

入力系の画面。前回カテゴリ入力ボックスが無かったけど今回はちゃんとある!!
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3301527/5c02801f-7cf8-b653-a07f-612751f58b2d.png)

これは残念な感じの画面。編集／削除がリンクとか、、だっさいなぁ。。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3301527/3793fe75-6fa1-5641-b64b-d4a865214045.png)

レスポンシブはちょっと気になるところはあるけど、まぁ許容。。
横幅が揃ってないのと、縦マージンが足りてないところが圧倒的に気になるけど、やりだすときりないので一旦スルーします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3301527/454f9584-3ad5-47a5-7165-b2262ae558c7.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3301527/4ee0861d-3cbb-544e-d184-7d2da51bbb96.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3301527/58e05096-92e7-980f-49bc-7e7da93cd063.png)


目を見張るほどよくなったものもあれば、イマイチのものもあり、、まぁとりあえず気にせず先に進みます。

# 前回作ったReactへの適用
ここまでで生まれ変わった画面デザインが出来上がりました。
これに合わせてreactも全部最初からやり直すことも考えたんですが、
一応細かいバグ対応とかもしたやつなのでそのまま捨てるのは忍びなく、
Chat-GPTにいい感じにマージしてもらえないかやってみました。

この指示は縦に長くなりすぎるのでキャプチャは貼りませんが、
以下の手順で指示を出しました。
1. 要件定義書読込
2. API一覧読込
3. 旧実装：
   ～～～～～ reactのコードを貼る ～～～～～
 新デザイン：
   ～～～～～ htmlモックのコードを貼る ～～～～～
　 旧実装を新デザインに変更してください。
　 API呼び出しの部分はそのままにしておいてください。

この指示をすると大体それっぽくやってくれるんですが、
時折APIの部分をモックのデータに差し替えてしまうことがあるので、
その場合は指摘を入れます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3301527/89a63286-7d15-d5ce-d995-b4639549a0bb.png)
また、途中でヘッダーフッターを分離した方がコード量が短くなるなということで分離しました。（Chat-GPTの出力途切れはマジで面倒。。）
分離したら何故かメニューリストが整理されて常時標示とハンバーガーメニューに分かれた。素晴らしい。前回のつぶやき見てたんだろうか。。

これの繰り返しで一応全画面出来ました。

前回疎通取れている画面のデザイン変更だけだったので、大きなデグレは無く新デザインでもわりとあっさり動きました。
ユーザー登録→カテゴリ登録→支出登録まではとりあえず疎通済み。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3301527/2b33e62d-7af5-0a82-9b34-061ebc5248a5.png)
なんか、モックでは棒グラフだった気がしますが、、まぁいいでしょう。

スマホも一応載せます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3301527/920064dc-1dcc-3a18-5e4f-c665a3299857.png)

というわけで今回は以上です。


# まとめ
やってる途中で思ったんですが、これ、最初からこの順番で作るべきだったと思います。
いきなりReactだとビルドエラー解消ばかりでつまらないし、コード読まずに進めてるから合ってるかどうか全然わからないまま進めることになる。
モックができていれば、少なくとも視覚的に動くところと動かないところのイメージがつきやすくなるはず。
あと、この段階で画面に対する指摘とか入れたらreactの精度ももっと良くなるはずだし。
ウォーターフォーラーとしては痛恨の工程組み立てミスだったと思います。

個人的にはUI部品集を作ったのは良かったかなと。
ブレを減らすために部品集、ルール集で縛る、というのは相手がChat-GPTだろうと同じだなと感じました。

やはり、取りあえず動く、しかもまぁまぁそれっぽい画面で動くと気分がいいですね。
次回は、、テスト工程やろうかな、、どうしようかな、、不明です。

追記）
迷った結果、画面開発ジョーク編的なものをやりました。

https://qiita.com/Programmer-cbl/items/2343aada819cf9eebe96