Skip to content

infra(app): application.yml 単一化 + env vars 注入の枠組み #216

Description

@win2cot

Phase 1 Setup 1-4: application.yml 単一化 + env vars 注入の枠組み

概要

webapi/src/main/resources/application.yml を単一ファイル化(Spring プロファイル不使用、Native Image 対応の伏線)し、環境差は env vars で吸収する枠組みを整備する。

詳細仕様: docs/architecture/infrastructure-plan.md v5 §2 #5(Spring プロファイル不使用)、§3.4(env vars 注入)。

背景

infrastructure-plan v5 の確定前提(#5):

  • Spring プロファイル不使用: application-local.yml / application-prod.yml 等のプロファイル分割をしない
  • 環境差は ECS Task Definition / Docker Compose の environment / secrets で env vars 注入

現状の webapi/src/main/resources/application.yml は scaffold 段階の最小構成。Sprint 0 で DataSource / Flyway / OAuth2 を実装するため、env vars 経由の枠組みを準備する。

実装内容

A. application.yml 単一化

spring:
  application:
    name: tasks-webapi
  datasource:
    url: ${DATASOURCE_URL}
    username: ${DATASOURCE_USERNAME}
    password: ${DATASOURCE_PASSWORD:}  # IAM 認証の場合は空可
    driver-class-name: com.mysql.cj.jdbc.Driver
  jpa:
    hibernate:
      ddl-auto: validate
    properties:
      hibernate:
        dialect: org.hibernate.dialect.MySQLDialect
  flyway:
    enabled: true
    url: ${DATASOURCE_URL}
    user: ${DATASOURCE_USERNAME}
    password: ${DATASOURCE_PASSWORD:}
    locations: classpath:db/migration
  security:
    oauth2:
      resourceserver:
        jwt:
          issuer-uri: ${OIDC_ISSUER_URI}

server:
  port: 8080

management:
  endpoints:
    web:
      exposure:
        include: health,info

logging:
  level:
    root: INFO
    xyz.dgz48: DEBUG

(項目は scaffold 段階の最小から拡張。詳細は基本設計書 §3 と整合)

B. env vars 一覧をドキュメント化

webapi/src/main/resources/application.yml のコメントまたは docs/dev/local-setup.md(Setup 1-6 で作成)に env vars 一覧を記載:

env var 用途 local 例 dev 例
DATASOURCE_URL JDBC URL jdbc:mysql://localhost:3306/tasks?useSSL=false&allowPublicKeyRetrieval=true jdbc:mysql://db.tasks.internal:3306/tasks?useSSL=true
DATASOURCE_USERNAME DB user tasks_webapi tasks_webapi
DATASOURCE_PASSWORD DB password tasks_webapi_pw (IAM 認証で空)
OIDC_ISSUER_URI Keycloak Realm issuer http://localhost:8080/realms/tasks https://auth-dev.tasks.dgz48.xyz/realms/tasks

C. ローカル起動スクリプト(任意)

.env.local(.gitignore 入り)を repo root に作成:

# .env.local(commit しない)
export DATASOURCE_URL=jdbc:mysql://localhost:3306/tasks?useSSL=false&allowPublicKeyRetrieval=true
export DATASOURCE_USERNAME=tasks_webapi
export DATASOURCE_PASSWORD=tasks_webapi_pw
export OIDC_ISSUER_URI=http://localhost:8080/realms/tasks

.gitignore.env.local を追加。

開発者: source .env.local && ./gradlew :webapi:bootRun

受入条件

  • webapi/src/main/resources/application.yml が単一ファイル(application-*.yml のプロファイル分割なし)
  • application.yml に DataSource / Flyway / OAuth2 issuer / server.port / management endpoints / logging の設定が記載済
  • 全環境差項目が ${ENV_VAR} 形式で参照されている
  • env vars 一覧が application.yml コメント or docs/dev/local-setup.md に記載
  • .env.local テンプレートまたは類似の方式が用意され、.gitignore に追加されている
  • env vars を渡して ./gradlew :webapi:bootRun 起動成功(Setup 1-3 で MySQL / Flyway、Setup 1-2 で Keycloak が動いている前提)

想定影響範囲

  • Sprint 0 / 1 / 2 の全 アプリ実装で利用される基盤
  • Native Image 化(ADR-0008 by Setup 2-4)時も同枠組みを維持
  • ECS Task Definition は同じ env vars を注入する(infrastructure-plan v5 §3.4)

関連

備考

  • task-type: task-type:impl
  • 優先度: priority/p0(Sprint 0 アプリ実装のクリティカルパス)
  • area: area/backend + area/infra

Metadata

Metadata

Assignees

No one assigned

    Labels

    area/backendJava / Spring バックエンド実装変更area/infraAWS インフラ(ECS Fargate / RDS / Keycloak / IAM)変更claude:ready実装着手 OK のサイン。人が付与すると実装 Claude が起動priority/p0Critical / Blocker。本番影響あり、または他作業がブロックされるtask-type:implコード実装が主体のタスク

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions