Good Morning API は「指定した日時にテキストでモーニングコールを届ける」体験を支えるバックエンドです。ユーザー登録と認証、モーニングコールの作成・参照・削除を REST API 経由で提供し、同梱のシンプル UI や任意のクライアントから利用できます。クラウド(Cloud Run)でもローカルでも同じ構成で動作するよう設計されています。
- エントリポイント:
cmd/api/main.goが設定読込・依存注入・HTTP サーバ起動を担当します。設定は.env→internal/configのローダを介して環境変数に集約されます。 - レイヤ構造:
internal/adapter/http:net/httpを用いたデリバリ層。ハンドラごとにRegisterを公開し、ミドルウェアは関数として注入します。internal/usecase: ユースケース層。ドメイン抽象 (UserRepositoryなど) を介してアプリケーションロジックを実装し、JWT 管理やパスワード検証を統括します。internal/entity: ドメインモデルとバリデーションを担い、ユースケース層からのみ参照されます。internal/infrastructure/mysql: MySQL 8.4 互換を前提とした永続化実装。ユースケース層のインターフェースを満たす形でクエリを提供します。internal/infrastructure/jwt:github.com/golang-jwt/jwt/v5に基づくトークン署名・検証の実装です。
- データストア: MySQL を単一データベースとし、
internal/infrastructure/mysql/schema.sqlでスキーマを管理します。接続プール設定(最大接続数など)はinternal/config/database.goを通じて環境変数から注入されます。 - 認証・認可: 電子メール+パスワードでログインし、JWT アクセストークンを発行します。HTTP ハンドラでは
Authorization: Bearerヘッダーを検証し、必要に応じてユーザー情報をリポジトリから再取得します。
| エンドポイント | メソッド | 説明 | 認証 |
|---|---|---|---|
/users |
POST | 新規ユーザー登録。メール重複時は 409 を返却 | 不要 |
/auth/login |
POST | ログインと JWT アクセストークン発行 | 不要 |
/morning-calls |
GET / POST | モーニングコールの一覧取得・新規作成 | 必須 |
/morning-calls/{id} |
GET / DELETE | 特定モーニングコールの取得・削除 | 必須 |
/readyz |
GET | DB 疎通を含むレディネスチェック | 不要 |
認証が必要なエンドポイントでは Authorization: Bearer <access_token> ヘッダーを添付します。トークンの TTL や Bcrypt コストは環境変数で調整できます。
- Cloud Run 上の API サービスは https://good-morning-api-c33muwsu3q-an.a.run.app で稼働しています。
- UI サービスは https://good-morning-ui-c33muwsu3q-an.a.run.app で稼働しており、
/api/*へのアクセスは上記 API サービスにプロキシされます。
- ローカル開発: Docker Compose と Makefile により、API・MySQL・UI を一括起動できます。環境変数テンプレートは
make env-demo/make env-localで生成されます。 - テスト:
go test ./...でユニットテスト・ハンドラテストを実行。主要コンポーネントは interface 抽象によりテストダブルを利用可能です。 - ビルド/デプロイ: マルチステージ
DockerfileとMakefileのgcp-build/gcp-deployタスクで Cloud Run へデプロイできます。UI 用ui/Dockerfileも同一 Makefile からビルド/デプロイ可能です。