Skip to content

matthewTechCom/20260317todo-app

Repository files navigation

DevOps 検証用 Todo アプリ

Next.js + NestJS + PostgreSQL のシンプルな Todo アプリです。
将来的に AWS / CloudWatch Logs などで監視する前提で、JSON 形式の構造化ログを出力します。


CI/CD(企業導入想定)

このリポジトリは GitHub Actions + AWS IAM OIDC(長期アクセスキー不要) の構成を採用します。

事前にやること(AWS 側)

  1. infra をデプロイ(CDK)
  2. 出力の GitHubActionsRoleArn を控える
  3. GitHub のリポジトリ設定で Secrets を追加

GitHub 側に設定する Secret

  • AWS_ROLE_TO_ASSUME: CDK 出力の GitHubActionsRoleArn

ワークフロー

  • deploy-backend.yml: backend/ 変更で Docker build → ECR push → ECS force new deployment
  • deploy-frontend.yml: frontend/ 変更で Next build(static export)→ S3 sync → CloudFront invalidation
  • cdk.yml:
    • PR で cdk synth
    • 手動実行で cdk deployenvironment: production による承認ゲートを想定)

セキュリティ/運用のポイント

  • 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 失敗時など)

ローカル開発手順

1. 事前準備

  • Node.js 20 系
  • Docker / Docker Compose

2. 依存関係インストール

ルート (この README がある場所) で:

npm install
cd frontend && npm install
cd ../backend && npm install

3. Docker で一括起動

docker-compose up --build
  • フロントエンド: http://localhost:3000
  • バックエンド API: http://localhost:4000
  • PostgreSQL: localhost:5432 (todo_db / todo_user / todo_pass)

4. ログ確認方法

  • Docker 利用時:
docker-compose logs -f backend
  • ローカル実行時 (NestJS):
cd backend
npm run start:dev

標準出力に JSON ログが流れます。将来的に CloudWatch Logs に送信する場合は、この標準出力をそのまま取り込む構成を想定しています。


フロントエンド (Next.js)

  • ディレクトリ: frontend
  • スタック: Next.js 14, React 18, TypeScript, Tailwind CSS, App Router

開発サーバー起動

cd frontend
npm run dev

ブラウザで http://localhost:3000 を開きます。

API エンドポイント設定

  • .env.local でバックエンド URL を変更可能:
NEXT_PUBLIC_API_BASE=http://localhost:4000

バックエンド (NestJS)

  • ディレクトリ: 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_db

Docker 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 を想定しています。

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors