ChatGPT と 6 ラウンドの設計レビュー — 設計書を v1 から v5 まで磨いた話

構築を始める前に、まず 設計書を作ってからコードを書く 方針を取りました。AWS サーバレスは最初の構成判断が運用コストにそのまま跳ね返るので、雑に始めると後悔します。

ただし設計書を 1 人で書くと自己満で終わりがちです。そこで ChatGPT (gpt-4o) を相互レビュアーに使い、6 ラウンドの設計レビュー を回しました。本記事はその記録です。

レビューに使ったツール

ChatGPT との往復は、自前の CLI ツール consult_chatgpt.py を使いました。会話履歴を JSON で保存できて、複数ラウンドの設計議論を引き継げます。

# 単発相談
chatgpt --prompt "AWS サーバレスポートフォリオの設計書をレビューして"

# ファイル渡し + 履歴引き継ぎ
chatgpt --file design-v1.md --conversation iigtn_design --save-to round1.md
chatgpt --prompt "1 番目の指摘を具体化して" --conversation iigtn_design --save-to round2.md

これで「設計書 v1 を渡す → R1 レビュー → 反映 → v2 → R2 レビュー → …」のループが回ります。

R1 (v1 → v2) — 運用視点の追加

v1 は「9 つの章で AWS サービスごとの採用理由を書いた仕様書」でした。技術的には正確ですが、ChatGPT の最初の指摘はこうでした:

「これは設計書というより仕様書。実運用を意識した Runbook / Postmortem / コスト試算 が無い。採用評価では『運用できるか』が見られる」

これを受けて v2 で追加したのは:

R2 (v2 → v3) — 個人ストーリーと現場感

v2 は分量が増えて読み応えが出ましたが、次のレビューで違う角度から指摘されました:

「優秀なテンプレをなぞった人で止まっている。あなたの意思・ストーリー・実際のトラブル経験 が見えない」

そこで v3 では:

R3 (v3 → v4) — 文書役割の分離と事実訂正

v3 は内容が分厚くなりすぎて、1 つのファイルで「技術ドキュメント / 営業資料 / 面接対策 / キャリア戦略」が混在する状態に。R3 で次の指摘:

v4 では 1 つの大きなファイルを 7 ファイルに分割 しました:

ファイル役割
README.md技術概要・構成・採用理由
motivation.md動機・思想・ストーリー
cost.mdコスト試算(事実訂正版)
runbook.md障害対応 + 実障害ログ
lessons.md失敗・反省・悩み
business.mdクライアント展開構想
interview.md面接 Q&A

R4 (v4 → v5) — 実運用データと泥臭さ

v4 はファイル分離で読みやすくなりましたが、もう一段、レビューで突っ込まれました:

v5 では:

R5 (v5 で合意)

R5 のレビューで、ChatGPT は 「合意」 と判定しました:

「ドキュメント全体が非常に詳細で、フリーランス・インフラエンジニアのポートフォリオとして求められる要件を満たしている。採用や案件獲得に向けた様々な視点(技術、コスト、ビジネス、面接対策)がカバーされている。過去のフィードバックを適切に反映し、細部にわたる改善が行われている」

5 ラウンドのレビューで、設計書は 「優秀なテンプレ」から「この人だから作れた設計書」 へと変わったと言えるレベルになりました。

R6 (実装後の確認)

実装が一段落した時点で、もう 1 ラウンド、ChatGPT に「これで本当に十分か」を確認しました。これも合意。設計フェーズはここで終了し、実装フェーズに入りました。

レビューで一番効いた指摘

6 ラウンドを通じて、一番効いたフィードバックは:

「正解だけを並べた設計書より、迷い続けている記録のほうが信頼性が出る」

つまり、「全部の判断が合理的」よりも「ここで悩んだ/妥協した/失敗した」を残すほうが、設計書としての説得力が増す。これは技術ブログの書き方にも共通する気づきでした。

このレビューを 1 人でやろうとしていたら

もし ChatGPT を使わずに 1 人で書いていたら、おそらく v2 か v3 で止まっていたと思います。「もう完成」と思った瞬間に外部から客観的に突っ込まれることで、初めて気付ける欠落がある。これは 技術ブログ・ポートフォリオを作るすべての人にお勧めできる方法 です。

次の記事

設計書ができたところで、いよいよ実装に入ります。次の記事では AWS のマルチアカウント運用 (dev / prod) と、Terraform を回す前提となる IAM の初期設定について書きます。

📚 用語集

設計書 (Design Doc)
システム構築前に「何を・どう作るか」を文書化したもの。AWS 構築の場合は採用サービス・配置・通信経路・コスト・運用までカバーする。
Runbook
障害時にどう対処するかを事前に文書化した手順書。「症状 → 原因の典型 → 対応」のテーブル形式が多い。
Postmortem (ポストモーテム)
障害が起きた後に、「何が起きたか / なぜ起きたか / どう対応したか / 再発防止」を記録する文書。実運用してる会社の証拠。
Core Web Vitals
Google が定義したサイトのユーザー体験メトリクス。LCP(読込)/ INP(操作応答)/ CLS(レイアウト安定)の 3 指標。
p95 / p99
パーセンタイル統計。p95 = 全リクエストの 95% 以下のレイテンシ、p99 = 99% 以下。「最悪値ではなく、ほぼ全員の体感値」を示す。
WAF (Web Application Firewall)
Web アプリへの攻撃(SQLi / XSS / Bot 等)を遮断するファイアウォール。AWS WAF は CloudFront にアタッチして使う。
Amplify
AWS の Web アプリ向けマネージドホスティング。内部で CloudFront + S3 + Lambda を使うが、抽象化が強くインフラ層がブラックボックス化する。本シリーズでは「不採用」の選択肢として位置付け。
Vercel
Next.js を最適に動かす PaaS。本シリーズでは「AWS 設計力を可視化する目的と矛盾」のため不採用。
ECS / Fargate
AWS のコンテナ実行サービス。常駐型ワークロード向けで、フォーム程度の用途には過剰のため本シリーズでは不採用。
テンプレ感
「教科書的に書かれていて個人の意思や経験が見えない」状態。設計書では避けたい印象。
OSS の脆弱性
Open Source Software に発見される脆弱性。Lambda ランタイム・Node.js・npm パッケージ・利用 OSS は定期的にセキュリティパッチ管理が必要。
SCA / SAST
SCA = Software Composition Analysis(依存ライブラリの脆弱性スキャン)。SAST = Static Application Security Testing(コード静的解析)。