Next.js + NestJS + PostgreSQL のシンプルな Todo アプリです。
将来的に AWS / CloudWatch Logs などで監視する前提で、JSON 形式の構造化ログを出力します。
このリポジトリは GitHub Actions + AWS IAM OIDC(長期アクセスキー不要) の構成を採用します。
infraをデプロイ(CDK)- 出力の
GitHubActionsRoleArnを控える - GitHub のリポジトリ設定で Secrets を追加
AWS_ROLE_TO_ASSUME: CDK 出力のGitHubActionsRoleArn
deploy-backend.yml:backend/変更で Docker build → ECR push → ECS force new deploymentdeploy-frontend.yml:frontend/変更で Next build(static export)→ S3 sync → CloudFront invalidationcdk.yml:- PR で
cdk synth - 手動実行で
cdk deploy(environment: productionによる承認ゲートを想定)
- PR で
- OIDC: GitHub から AWS へは短命トークンで接続(アクセスキー固定を避ける)
- 最小権限: ECR/ECS/S3/CloudFront/CloudFormation:DescribeStacks に限定
- デプロイ単位: Backend(ECS)と Frontend(S3/CloudFront)を分離
- Todo 一覧表示:
GET /todos - Todo 追加:
POST /todos - 完了切替:
PUT /todos/:id - 削除:
DELETE /todos/:id - エラーシミュレーション:
GET /simulate-error- DB エラー (存在しないテーブルへのクエリ)
- ランダム例外 (
500エラー)
- すべて JSON 形式 で標準出力に出力
- 例:
{
"level": "error",
"service": "todo-api",
"message": "database connection failed",
"timestamp": "2026-03-16T00:00:00.000Z"
}- API request logs: メソッド / パス / 所要時間など
- error logs: 例外・DB エラーなど
- DB connection logs: 接続失敗時のエラー (bootstrap 失敗時など)
- Node.js 20 系
- Docker / Docker Compose
ルート (この README がある場所) で:
npm install
cd frontend && npm install
cd ../backend && npm installdocker-compose up --build- フロントエンド:
http://localhost:3000 - バックエンド API:
http://localhost:4000 - PostgreSQL:
localhost:5432(todo_db/todo_user/todo_pass)
- Docker 利用時:
docker-compose logs -f backend- ローカル実行時 (NestJS):
cd backend
npm run start:dev標準出力に JSON ログが流れます。将来的に CloudWatch Logs に送信する場合は、この標準出力をそのまま取り込む構成を想定しています。
- ディレクトリ:
frontend - スタック: Next.js 14, React 18, TypeScript, Tailwind CSS, App Router
cd frontend
npm run devブラウザで http://localhost:3000 を開きます。
.env.localでバックエンド URL を変更可能:
NEXT_PUBLIC_API_BASE=http://localhost:4000- ディレクトリ:
backend - スタック: NestJS 10, TypeORM, PostgreSQL
cd backend
npm run start:devデフォルトで http://localhost:4000 で起動します。
.env (任意) 例:
PORT=4000
DB_HOST=localhost
DB_PORT=5432
DB_USER=todo_user
DB_PASSWORD=todo_pass
DB_NAME=todo_dbDocker Compose 利用時は docker-compose.yml 内で設定済みです。
- エンドポイント:
GET /simulate-error - 挙動:
- 50% の確率で DB エラー (存在しないテーブルへのクエリ)
- 50% の確率で ランダム例外 (
500 Internal Server Error)
- これにより、監視・アラート設定 (CloudWatch Logs, Datadog 等) の検証が容易になります。
フロントエンド画面にも「エラーシミュレーション」ボタンがあり、UI から容易に /simulate-error を叩けます。
repo
├ frontend # Next.js + Tailwind フロントエンド
├ backend # NestJS API サーバー
├ database # 初期化用 SQL (schema.sql)
└ docker # フロント/バックエンド用 Dockerfile
将来的な AWS デプロイ時は、ECS/Fargate + RDS/PostgreSQL + CloudWatch Logs を想定しています。