Skip to content

セクション E: Atlas / マイグレーション整備#5

Merged
kantacky merged 2 commits into
mainfrom
feat/e-atlas
May 10, 2026
Merged

セクション E: Atlas / マイグレーション整備#5
kantacky merged 2 commits into
mainfrom
feat/e-atlas

Conversation

@kantacky

@kantacky kantacky commented May 9, 2026

Copy link
Copy Markdown
Member

やったこと

Notion 計画 §7-E の Atlas / マイグレーション整備分。Atlas プロジェクト設定そのものは §A の atlas.hcl と Taskfile (migrate:diff / migrate:lint / migrate:apply:local) で雛形済みのため、本 PR では desired state を読み取る provider 依存と運用ドキュメントを整備する。

  • atlas-provider-gorm を直接依存として追加
    • ariga.io/atlas-provider-gormgo get で追加し、atlas.hcldata "external_schema" "gorm" から go run で呼び出せる形にする
    • internal/shared/model/--path 指定で scan する手順をローカル動作確認 (Postgres 方言で全テーブル DDL が出力されることを確認)
  • migrations 運用ドキュメント
    • migrations/README.md に開発フロー (task migrate:diffmigrate:lintmigrate:apply:local) を整理
    • 本番適用フロー (Actions → terraform applymigrate-job 実行) を文書化
    • Phase 1 cutover 用の baseline 生成手順 (atlas migrate diff baselineuuid-ossp 拡張と ALTER DEFAULT PRIVILEGES 補完 → atlas schema diff で本番突き合わせ → atlas migrate set で「適用済み」マーク) を明記
    • ロールバック方針 (常に前進のみ、image tag 巻き戻し) を明記
  • 受け皿の整理
    • 運用ドキュメントが入ったため migrations/.gitkeep を削除

確認したこと

  • mise exec -- go run ariga.io/atlas-provider-gorm load --path ./internal/shared/model --dialect postgres が GORM モデルから Postgres DDL を出力することを確認 (78 行)
  • mise exec -- go build ./... が成功

メモ

  • atlas migrate diff baseline 自体は dev DB (Docker postgres) を必要とするため本 PR の CI 環境では生成しない。Cloud SQL / dev DB 接続が可能になり次第、migrations/README.md の手順に沿って migrations/<ts>_baseline.sql を別 PR で起こす
  • atlas-provider-gorm の auto-discovery は internal/shared/model/Common 埋め込み構造体を独立テーブル (commons) として誤認識する既知の癖がある。baseline 生成時に手動除外する旨は README に明記してある
  • atlas migrate lint を PR 必須化する .github/workflows/migrate-lint.yml は §G で追加する
  • cmd/migrate-job のリビジョン管理テーブル選定 (atlas_schema_revisions) は §A の TODO のまま残置 (本 PR のスコープ外)
  • ベースブランチは §D スタックの feat/d-batch-jobs

kantacky added 2 commits May 9, 2026 13:08
Atlas の GORM provider を `task migrate:diff` から `go run ariga.io/atlas-provider-gorm`
で呼び出せるよう、`ariga.io/atlas-provider-gorm` を go.mod の依存として追加した。
本対応により atlas.hcl の `data "external_schema" "gorm"` が
internal/shared/model/ をスキャンして desired state を生成できるようになる。
go mod tidy で間接依存も整理した。
Atlas + versioned SQL に統一した DB マイグレーション運用 (Notion 計画 §3 / §7-E)
を migrations/README.md にまとめた。
- 開発フロー (task migrate:diff → migrate:lint → migrate:apply:local)
- 本番適用フロー (Actions → terraform apply → migrate-job 実行)
- baseline 生成手順 (uuid-ossp 拡張と ALTER DEFAULT PRIVILEGES の補完、
  atlas schema diff での本番突き合わせ、atlas migrate set による
  「適用済み」マーク)
- ロールバック方針 (常に前進のみ、image tag 巻き戻し)
README に内容ができたため migrations/.gitkeep は削除する。
@kantacky kantacky self-assigned this May 9, 2026
@kantacky kantacky marked this pull request as ready for review May 9, 2026 13:23
Copilot AI review requested due to automatic review settings May 9, 2026 13:23

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Atlas + GORM モデルを source of truth としたマイグレーション運用を成立させるために、desired state 生成のための provider 依存追加と、運用手順ドキュメントを整備するPRです。

Changes:

  • migrations/README.md に、開発フロー・本番適用フロー・Phase 1 cutover 用 baseline 手順・ロールバック方針を整理
  • ariga.io/atlas-provider-gorm を追加し、GORM モデルから desired state を生成できるように依存関係を更新
  • migrations/.gitkeep を削除して、マイグレーションディレクトリをドキュメント/成果物の置き場として整理

Reviewed changes

Copilot reviewed 2 out of 4 changed files in this pull request and generated 4 comments.

File Description
migrations/README.md Atlas/GORM ベースのマイグレーション運用手順を文書化
migrations/.gitkeep 運用ドキュメント整備に伴い不要になったため削除
go.mod atlas-provider-gorm 追加に伴う依存関係更新
go.sum 依存追加に伴うサム更新

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment thread migrations/README.md
task migrate:lint
```

PR では `migrate-lint.yml` ワークフローが同等の `atlas migrate lint --env local --latest 1` を必須実行する (詳細は `.github/workflows/migrate-lint.yml`)。
Comment thread migrations/README.md
Comment on lines +64 to +70
GitHub Actions `deploy.yml` が次の順で動く。

1. `terraform apply` で Cloud Run Service / Job (migrate-job 含む) のイメージ tag を更新
2. `gcloud run jobs execute migrate-job<env-suffix> --wait` を実行
3. Cloud Run Job 内で `cmd/migrate-job` が起動し、`cloudsqlconn` 経由で IAM 認証付き接続を確立後、`migrations/` を適用する

`migrate-job` のタイムアウトは `MIGRATE_TIMEOUT` (デフォルト `10m`) で外側から強制終了される。失敗時は non-zero exit でワークフローも失敗扱い。
Comment thread migrations/README.md
atlas migrate diff <name> --env local
```

- 使い捨て docker postgres (`docker://postgres/16/dev`) が dev DB として起動する
Comment thread go.mod
Comment on lines 21 to 23
require (
ariga.io/atlas-provider-gorm v0.6.0 // indirect
cel.dev/expr v0.25.1 // indirect
Base automatically changed from feat/d-batch-jobs to main May 10, 2026 04:25
@kantacky kantacky merged commit 6416ee1 into main May 10, 2026
4 checks passed
@kantacky kantacky deleted the feat/e-atlas branch May 10, 2026 04:25
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants