背景
webapi/src/main/resources/application.yml を本番運用に必要な設定で整備する。ただし規約上、Spring プロファイル(@Profile / application-{env}.yml / --spring.profiles.active=...)は不使用 (コーディング規約 §20.2 / infrastructure-plan §3.4)。環境差は ECS Task Definition の environment / Parameter Store の secrets で注入する。
本 Issue は 2026-05-24 N1〜N8 見直し(関連 Issue: #248 設計規約 §3.1 例外運用、#250 secrets 方針整合)を受け、起票時(2026-05-10 gap analysis §G-6)の旧方針記述(application-{local,staging,prod}.yml 分割 / DB password を Secrets Manager 参照)を全面撤回し、規約整合の最新方針へ書き換えたもの。
規約準拠の前提
規約 / doc
内容
コーディング規約 §20.2
@Profile 禁止(ADR-0008 Native Image AOT 制約による)
infrastructure-plan §3.4
単一 application.yml + ${ENV_VAR} 注入。application-{env}.yml は作らない
infrastructure-plan §3.5
tasks-webapi の RDS 接続は K-A 案 IAM 認証 。DB パスワードは Secrets Manager / Parameter Store のいずれにも保存しない(動的取得)
OIDC Issuer URI
機密ではない。環境変数 OIDC_ISSUER_URI で注入
(派生) #250
Secrets Manager は不採用、Parameter Store SecureString のみ使用(Keycloak SMTP password 等の IAM で代替不可な機密に限定)
やること
1. application.yml の最終形を確認(既に実装済の項目)
以下は 2026-05-24 時点で既に実装済。本 Issue では内容を確認のうえ追加変更不要であることを明記:
✅ spring.datasource.url: ${DATASOURCE_URL} 注入
✅ spring.datasource.username: ${DATASOURCE_USERNAME} 注入
✅ spring.datasource.password: ${DATASOURCE_PASSWORD:}(IAM 認証時は空文字)
✅ spring.jpa.hibernate.ddl-auto: validate
✅ spring.flyway.enabled: true / locations: classpath:db/migration
✅ spring.security.oauth2.resourceserver.jwt.issuer-uri: ${OIDC_ISSUER_URI} 注入
2. JSON ロギング(Logback)を追加 — 残実装
webapi/src/main/resources/logback-spring.xml を新規作成し、CloudWatch Logs に投入しやすい JSON 出力を有効化する。
ConsoleAppender + LogstashEncoder(net.logstash.logback:logstash-logback-encoder)
既存 application.yml の logging.level 設定は維持(root INFO / xyz.dgz48 DEBUG)
依存追加: webapi/build.gradle に runtimeOnly 'net.logstash.logback:logstash-logback-encoder:<latest>'
3. management.endpoints.web.exposure.include に prometheus 追加 — 残実装
ECS health check + メトリクス用に /actuator/prometheus を公開する。
application.yml の management.endpoints.web.exposure.include を health,info → health,info,prometheus に変更
依存追加: webapi/build.gradle に implementation 'io.micrometer:micrometer-registry-prometheus'
4. .env.local テンプレート整備 — 残実装
.env.local.example(コミット可能な雛形)を repo root に作成。値はダミー / プレースホルダ:
# .env.local.example — copy to .env.local and fill in real values (DO NOT commit .env.local)
DATASOURCE_URL=jdbc:mysql://localhost:3306/tasks? useSSL=false& allowPublicKeyRetrieval=true
DATASOURCE_USERNAME=tasks_webapi
DATASOURCE_PASSWORD=
OIDC_ISSUER_URI=http://localhost:8080/realms/tasks
.gitignore に .env.local を追加(.env.local.example は除外しない)。docs/dev/local-setup.md(Setup 1-6 で整備済)から本ファイルへの参照リンクを追記。
やらないこと(明示)
application-local.yml / application-staging.yml / application-prod.yml の作成 — コーディング規約 §20.2 違反
@Profile アノテーション利用 — 同上
--spring.profiles.active=... 起動オプション前提の手順記述 — 同上
DB パスワードの Secrets Manager / Parameter Store 保存 — infrastructure-plan §3.5 K-A 案 IAM 認証で password 不要
OIDC Issuer URI の Secrets Manager 保存 — 機密でない、environment で十分
AWS Secrets Manager の採用 — docs(spec): 設計規約 §5.4 と infrastructure-plan §3.5 の secrets 方針整合(RDS IAM 認証 / Parameter Store) #250 secrets 方針整合により Parameter Store SecureString のみ使用
受け入れ条件
参照
背景
webapi/src/main/resources/application.ymlを本番運用に必要な設定で整備する。ただし規約上、Spring プロファイル(@Profile/application-{env}.yml/--spring.profiles.active=...)は不使用(コーディング規約 §20.2 / infrastructure-plan §3.4)。環境差は ECS Task Definition のenvironment/ Parameter Store のsecretsで注入する。本 Issue は 2026-05-24 N1〜N8 見直し(関連 Issue: #248 設計規約 §3.1 例外運用、#250 secrets 方針整合)を受け、起票時(2026-05-10 gap analysis §G-6)の旧方針記述(
application-{local,staging,prod}.yml分割 / DB password を Secrets Manager 参照)を全面撤回し、規約整合の最新方針へ書き換えたもの。規約準拠の前提
@Profile禁止(ADR-0008 Native Image AOT 制約による)application.yml+${ENV_VAR}注入。application-{env}.ymlは作らないOIDC_ISSUER_URIで注入やること
1.
application.ymlの最終形を確認(既に実装済の項目)以下は 2026-05-24 時点で既に実装済。本 Issue では内容を確認のうえ追加変更不要であることを明記:
spring.datasource.url:${DATASOURCE_URL}注入spring.datasource.username:${DATASOURCE_USERNAME}注入spring.datasource.password:${DATASOURCE_PASSWORD:}(IAM 認証時は空文字)spring.jpa.hibernate.ddl-auto: validatespring.flyway.enabled: true/locations: classpath:db/migrationspring.security.oauth2.resourceserver.jwt.issuer-uri:${OIDC_ISSUER_URI}注入2. JSON ロギング(Logback)を追加 — 残実装
webapi/src/main/resources/logback-spring.xmlを新規作成し、CloudWatch Logs に投入しやすい JSON 出力を有効化する。LogstashEncoder(net.logstash.logback:logstash-logback-encoder)application.ymlのlogging.level設定は維持(root INFO /xyz.dgz48DEBUG)webapi/build.gradleにruntimeOnly 'net.logstash.logback:logstash-logback-encoder:<latest>'3.
management.endpoints.web.exposure.includeにprometheus追加 — 残実装ECS health check + メトリクス用に
/actuator/prometheusを公開する。application.ymlのmanagement.endpoints.web.exposure.includeをhealth,info→health,info,prometheusに変更webapi/build.gradleにimplementation 'io.micrometer:micrometer-registry-prometheus'4.
.env.localテンプレート整備 — 残実装.env.local.example(コミット可能な雛形)を repo root に作成。値はダミー / プレースホルダ:.gitignoreに.env.localを追加(.env.local.exampleは除外しない)。docs/dev/local-setup.md(Setup 1-6 で整備済)から本ファイルへの参照リンクを追記。やらないこと(明示)
application-local.yml/application-staging.yml/application-prod.ymlの作成 — コーディング規約 §20.2 違反@Profileアノテーション利用 — 同上--spring.profiles.active=...起動オプション前提の手順記述 — 同上environmentで十分受け入れ条件
./gradlew :webapi:bootRunで起動(プロファイル指定なし、環境変数のみで動作)GET /actuator/health200GET /actuator/prometheusが 200 + Prometheus エクスポート形式で応答application-*.ymlが存在しない /@Profileを使わない /--spring.profiles.active=...を Docker Compose 起動コマンドに含まない.env.local.exampleが repo root に存在、.env.localは.gitignore対象参照
docs/reviews/2026-05-10-scaffold-vs-design-gap-analysis.md§G-6 — ただし「環境別 yml 分割」と「Secrets Manager 経由」の記述は 2026-05-24 撤回済(docs(reviews): 2026-05-10 gap analysis に規約成立後の方針更新ディスクレーマ追記 #249 で gap analysis 自体にディスクレーマ追記予定)docs/specs/コーディング規約.md§20.2 Spring プロファイル不使用docs/architecture/infrastructure-plan.md§3.4 環境変数注入 / §3.5 RDS IAM 認証docs/specs/開発計画書.md(コンテナイメージ全環境共通の方針)