Migrationの使い方
この記事の内容
- BeegoのCLIツールでのMigrationファイルの作成
- Migrationファイルの記載
- BeeのコマンドからMigrateを実行する
- BeeのコマンドからMigrateのrollbackやreset、reflesh
0.準備
Beego等のバージョンはこんな感じ
______
| ___ \
| |_/ / ___ ___
| ___ \ / _ \ / _ \
| |_/ /| __/| __/
\____/ \___| \___| v1.10.0
├── Beego : 1.11.2
├── GoVersion : go1.12.2
├── GOOS : linux
├── GOARCH : amd64
├── NumCPU : 2
├── GOPATH : /go
├── GOROOT : /usr/local/go
├── Compiler : gc
└── Date : Friday, 3 May 2019
Beegoにはファイルを生成してくれるbee
コマンドを提供してくれているので使います。
使えない人は下記をインストールしておきます。
go get -u github.com/beego/bee
※gomoduleを使ってる人は下記かな?
GO111MODULE=off get -u github.com/beego/bee
1.migrationファイルの生成
bee generate migration テーブル名
を実行するとdatabase/migrations
フォルダがプロジェクト直下に作成され、中にmigrationファイルが生成される
$bee generate migration shikaku_mst
2019/05/03 07:21:47 INFO ▶ 0001 Using 'shikaku_mst' as migration name
create /go/src/プロジェクト/database/migrations/20190503_072147_shikaku_mst.go
2019/05/03 07:21:47 SUCCESS ▶ 0002 Migration successfully generated!
2.Migrationファイルの記載
作成されたファイルの内容を編集する
package main
import (
"github.com/astaxie/beego/migration"
)
// DO NOT MODIFY
type ShikakuMst_20190503_072147 struct {
migration.Migration
}
// DO NOT MODIFY
func init() {
m := &ShikakuMst_20190503_072147{}
m.Created = "20190503_072147"
migration.Register("ShikakuMst_20190503_072147", m)
}
// Run the migrations
func (m *ShikakuMst_20190503_072147) Up() {
// use m.SQL("CREATE TABLE ...") to make schema update
// ここにmigrate実行時の内容を記載
`CREATE TABLE user(id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(255))`)
}
// Reverse the migrations
func (m *ShikakuMst_20190503_072147) Down() {
// use m.SQL("DROP TABLE ...") to reverse schema update
// ここにrollback実行時の内容を記載
m.SQL("DROP TABLE shikaku_mst")
}
3.BeeのコマンドからMigrateを実行する
下記のコマンドでmigrationファイルに記載されている内容からMigrateを実行する
`$bee migrate -conn="user:password@tcp(接続先IP:ポート)/DB名"
DefaultのドライバーはMySQLになる
$bee migrate -conn="user:password@tcp(接続先IP:ポート)/DB名"
______
| ___ \
| |_/ / ___ ___
| ___ \ / _ \ / _ \
| |_/ /| __/| __/
\____/ \___| \___| v1.10.0
2019/05/03 08:21:23 INFO ▶ 0001 Using 'mysql' as 'driver'
2019/05/03 08:21:23 INFO ▶ 0002 Using '/go/src/XXXX/database/migrations' as 'dir'
2019/05/03 08:21:23 INFO ▶ 0003 Running all outstanding migrations
2019/05/03 08:21:28 INFO ▶ 0004 |> 2019/05/03 08:21:26.192 [I] start upgrade ShikakuMst_20190503_072147
2019/05/03 08:21:28 INFO ▶ 0005 |> 2019/05/03 08:21:26.192 [I] exec sql: CREATE TABLE user(id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(255))
2019/05/03 08:21:28 INFO ▶ 0006 |> 2019/05/03 08:21:26.224 [I] end upgrade: ShikakuMst_20190503_072147
2019/05/03 08:21:28 INFO ▶ 0007 |> 2019/05/03 08:21:26.224 [I] total success upgrade: 1 migration
2019/05/03 08:21:28 SUCCESS ▶ 0008 Migration successful!
これでDBの構築は完了する。
4.BeeのコマンドからMigrateのrollbackやreset、reflesh
BeegoのMigrateでは、DBにMigrationsテーブルを作成しそれぞれのMigrationファイルの実行状況ステータスを記録している。なにかあれば、Migrationsテーブルのレコードを削除すればステータスは初期化出来る。
・ロールバック
下記コマンドで最後に実行したmigrateをロールバックすることが出来る。
bee migrate rollback -conn="user:password@tcp(接続先IP:ポート)/DB名"
・リセット
下記コマンドですべての実行したmigrateをロールバックすることが出来る。
bee migrate reset -conn="user:password@tcp(接続先IP:ポート)/DB名"
・リフレッシュ
下記コマンドですべての実行したmigrateをロールバックし、再びMigrateすることが出来る。
bee migrate refresh -conn="user:password@tcp(接続先IP:ポート)/DB名"
おまけ
いちいち接続情報を記載するのがめんどくさい場合、beeコマンド用の設定情報は下記に記載可能
プロジェクト直下/bee.json
{
"database": {
"conn": "user:password@tcp(接続先IP:ポート)/DB名"
}
}