github.com/fun-dotto/shared-go は dotto プロジェクトで複数のサービスから共有される Go モジュール。Cloud SQL (PostgreSQL) への接続および GORM モデル定義と、それらを用いてスキーマを反映するマイグレーション CLI を提供する。
db/— Cloud SQL Connector + GORM による接続ヘルパとMigrateAll。db/model/— 共有モデル定義(User,Subject,TimetableItem,Notificationなど)。共通フィールドはmodel.Common(ID uuid.UUID+CreatedAt+UpdatedAt)。cmd/migrate/—db.MigrateAllを実行する CLI。本リポジトリ唯一の実行可能エントリポイント。
- Go 1.25.7(
mise.tomlで固定) - mise(タスクランナー / ツールチェーン管理)
- Cloud SQL インスタンスと、IAM 認証用のサービスアカウント鍵
- DB 側に
dotto_admin/dotto_service/dotto_developerロールおよびuuid-ossp拡張
cmd/migrate を動かすには .env もしくは環境変数で以下を設定する。未設定時は log.Fatalf で終了する。
| 変数 | 用途 |
|---|---|
DB_IAM_USER |
Cloud SQL IAM 認証用のユーザ |
DB_NAME |
接続先 DB 名 |
INSTANCE_CONNECTION_NAME |
Cloud SQL 接続名 (project:region:instance) |
GOOGLE_APPLICATION_CREDENTIALS |
サービスアカウント鍵 JSON へのパス |
mise タスクとして定義済み。
mise run install # go mod tidy
mise run build:migrate # ./bin/migrate を -tags timetzdata 付きでビルド
mise run run:migrate # cmd/migrate を直接実行テストは未整備。追加する場合は go test ./...。
db.MigrateAll は以下の 2 段で動作する。新規モデルを追加する際は両方を意識すること。
-
db.AutoMigrate(...)に全モデルを列挙してスキーマを反映する。新規モデルはここに追加しないと適用されない。 -
applyTablePrivilegesがpg_tablesを走査し、現スキーマの全テーブルに対して- 所有者を
dotto_adminに付け替え dotto_adminにALL PRIVILEGESdotto_service/dotto_developerにSELECT, INSERT, UPDATE, DELETE
をマイグレーション毎に再付与する。
- 所有者を
他サービスから接続ヘルパを利用する例。
import "github.com/fun-dotto/shared-go/db"
gormDB, err := db.ConnectWithConnectorIAMAuthN(ctx)
if err != nil {
return err
}接続は IAM 認証専用で、コネクションプールは MaxOpen=20 / MaxIdle=10 / Lifetime=30m / IdleTime=5m でハードコードされている。
コミットメッセージは日本語の命令形短文(例: 「migrateコマンドを追加」「マイグレーション後にテーブル所有者と各ロール権限を付与する処理を追加」)。