Go製のmigrationツール、gooseを試してみる
Go製のmigrationツール、gooseを試してみる。
https://bitbucket.org/liamstask/goose/src/master/
なお、github版とbitbucket版があるようだが、他の方の使用例を見た感じ bitbucket
を利用している方がほとんどのように思えたので、そちらを利用する。
github版はbitbucketをcloneしているようだ。特色については下記に記載があった。
https://github.com/pressly/goose#goals-of-this-fork
作ってみるデータベース構成は下記の通り。 とてもシンプルな構成
Team ↓Teamは複数のUserに紐付いている関係 User
ちなみに実際にデータを取得する処理も書こうと思うが、ORMについてはgormを使う。
GORM - The fantastic ORM library for Golang, aims to be developer friendly.
gooseのセットアップ
まずは goose
のインストールを行う
go get bitbucket.org/liamstask/goose/cmd/goose
DB接続のための設定ファイルを用意する
(defaultは db
ディレクトリをみるようだ)
mkdir db vim db/cdbconf.yml
dbconf.yml
を作成し、こちらにDB接続に関する設定を記述する
development: driver: mymysql open: tcp:localhost:3306*[db_name]/[user_name]/[password]
書き方のサンプルはこちら
https://bitbucket.org/liamstask/goose/src/master/db-sample/dbconf.yml
ちなみにgoose
実行時のコマンドオプションは下記で見れる
goose help # もしくは $GOPATH/bin/goose help
optionはこんな感じ
Options: -env string which DB environment to use (default "development") -path string folder containing db info (default "db") -pgschema string which postgres-schema to migrate (default = none)
実際に下記のようなコマンドを打って疎通確認をした。 なお、自身はローカルのmacで動くdocker上でmysqlを動かして、そこにアクセスしている。
goose status
gooseを使ってmigrationファイルを作成する
migrationファイルの作成は下記のコマンドで行うよう
goose create AddSomeColumns
実際にteamsテーブルとusersテーブルを作成するmigrationファイルを作成する。
最後に付けたsql
で、migration用のsqlファイルを生成する。
これをつけない場合、.go
でmigrationファイルが作られるがこちらはまだ試していない。
goをまだあまり理解していないので、とりあえずsqlで試す。
(そういえば、公式だとmigrationファイルがPascal caseだったが、実際そうなのだろうか?Go書き慣れていないのでここらへんも詳しくない)
goose create CreateTeamsTable sql goose create CreateUsersTable sql
すると、下記のような感じにmigrationファイルが生成される
db/migrations/20191221231458_CreateTeamsTable.sql
あとはこちらにテーブル定義を書いていけば良い
teams
テーブル
-- +goose Up -- SQL in section 'Up' is executed when this migration is applied CREATE TABLE teams ( id int NOT NULL, name varchar(255) NOT NULL, PRIMARY KEY(id) ); -- +goose Down -- SQL section 'Down' is executed when this migration is rolled back DROP TABLE teams;
users
テーブル
-- +goose Up -- SQL in section 'Up' is executed when this migration is applied CREATE TABLE users ( id int NOT NULL, teamId int NOT NULL, name varchar(255) NOT NULL, PRIMARY KEY(id) ); -- +goose Down -- SQL section 'Down' is executed when this migration is rolled back DROP TABLE users;
DBのmigrationを行う
goose up # 以下ログ goose: migrating db environment 'development', current version: 0, target: 20191221231510 OK 20191221231458_CreateTeamsTable.sql OK 20191221231510_CreateUsersTable.sql
なお、戻す場合はdownで良い
goose down
migration
に関する履歴はgoose_db_version
というところで管理されているようだ。
status
で現在の状態も確認できるので、わからなくなったときは打てば良さそう。
goose status goose: status for environment 'development' Applied At Migration ======================================= Sat Dec 21 14:19:23 2019 -- 20191221231458_CreateTeamsTable.sql Sat Dec 21 14:20:28 2019 -- 20191221231510_CreateUsersTable.sql
ちょっと長くなってしまったので、gorm使ってデータを実際に取得するところは後日やる。