AWSへ出す前に、ローカルでアプリとDBを再現する
クラウド構築の前に、データが入ったDBとHTTPで応答するAPIを手元でつなぐ。壊れたときにどの層を見るかまでがこの章の到達点。
TL;DR
- migrationはスキーマを、restoreは学習・開発に使う初期データを再現する。
- DBクライアントでテーブルとデータを直接確認すると、アプリの応答を裏側から説明できる。
- 最後はlocalhostのAPIがworkspace IDを受け、DBのデータを返すところまで確認する。
01再現する最小構成を分ける
PostgreSQL、移行ツール、APIを一度に曖昧にしない

Docker ComposeでPostgreSQLを起動し、db-migratorがDBの構造を整える。その上でGo APIを起動するため、HTTPの失敗をDB未準備と混同しにくい。
この章の構成はAWSの完成形そのものではない。まず「アプリが必要とするDB状態」を可視化するための実験環境である。
- PostgreSQLコンテナはデータの保存先
- db-migratorはDB作成とスキーマ適用を担当
- Go APIは作られたデータをHTTPで公開する
02スキーマとseedを別の操作として扱う
テーブルがあることと、画面・APIで使えるデータがあることは別

migrationを実行しても、APIが返すべきレコードは自動で現れない。restoreによりseedデータを入れることで、開発用の入力が揃い、APIの成功・失敗を意味のある形で確認できる。
テーブル作成が成功していてもデータが空なら、APIの空レスポンスはアプリ不具合とは限らない。
- migration後にテーブル一覧を確認する
- restore後に代表レコードを確認する
- dumpは共有したいデータ状態のスナップショットになる
03HTTP応答をDBの事実へ戻して検証する
curlだけで終えず、どのデータが返ったかを説明できるようにする

localhostのchannels APIへworkspace IDを付けて呼び、レスポンスを得る。続けてDBクライアントで同じworkspaceに関係するデータを確認すれば、API・DB・seedの関係を一本の流れとして把握できる。
成功条件は「プロセスが起動した」ではなく、「意図したデータをHTTPで取得できた」ことである。
- curlのURL・ヘッダー・HTTP結果を残す
- TablePlus等でデータの存在を確認する
- 不一致ならAPI、DB接続、seedの順に切り分ける
結論
- ローカルではDBの構造、データ、HTTP応答を順に再現する。
- migrationとrestoreを混同しないと、空データの原因を正しく見分けられる。
- AWS構築前にこの最小構成を説明できる状態にする。