Skip to content

fun-dotto/shared-go

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

12 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

shared-go

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.CommonID 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 段で動作する。新規モデルを追加する際は両方を意識すること。

  1. db.AutoMigrate(...) に全モデルを列挙してスキーマを反映する。新規モデルはここに追加しないと適用されない。

  2. applyTablePrivilegespg_tables を走査し、現スキーマの全テーブルに対して

    • 所有者を dotto_admin に付け替え
    • dotto_adminALL PRIVILEGES
    • dotto_service / dotto_developerSELECT, 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コマンドを追加」「マイグレーション後にテーブル所有者と各ロール権限を付与する処理を追加」)。

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages