post Image
Golang製DBマイグレーションツールgoose + MySQLを試してみた

gooseとは

Golang製のDBマイグレーションツール
https://bitbucket.org/liamstask/goose/

なんでgoose?

プロジェクトのプログラムとは離した状態でマイグレーションを導入したかった。プロジェクトごとにマイグレーション手段が変わるのが嫌だったから。
SQLをそのまま書けるので学習コストが高くなさそう。
Golang製のツールを使ってみたかった。

導入まで

参考: http://enomotodev.github.io/post/use-goose/

goは導入済みとして

$ go get bitbucket.org/liamstask/goose/cmd/goose
$ goose

goose is a database migration management system for Go projects.

Usage:
    goose [options] <subcommand> [subcommand options]

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)

Commands:
    up         Migrate the DB to the most recent version available
    down       Roll back the version by 1
    redo       Re-run the latest migration
    status     dump the migration status for the current DB
    create     Create the scaffolding for a new migration
    dbversion  Print the current version of the database

疎通確認する

設定ファイルを作って疎通確認まで
設定ファイルはサンプルをコピーしてくる

$ mkdir db
$ cd db/
$ cp $GOPATH/src/bitbucket.org/liamstask/goose/db-sample/dbconf.yml ./

とりあえずdevelopmentだけ書き換えてみる
MySQLを使うのでdriverを変える
接続設定を書き換える。 [db_name], [user_name], [password] を適宜書き換えてください。

dbconf.yml
development:
    driver: mymysql
    open: tcp:localhost:3306*[db_name]/[user_name]/[password]

下記のように返ってくればとりあえず疎通はOK。

$ goose status
goose: status for environment 'development'
    Applied At                  Migration
    =======================================

使ってみる

上記で作ったconf入りのdbディレクトリの一階層上で実行します。(./db/dbconf.ymlを読むため)

Usersテーブルを試しに作ってみます。

$ goose create createUsers sql
goose: created /srv/qiitarank/db/migrations/20161104023332_createUsers.sql

goose create [マイグレーション名] sql でマイグレーション用SQLファイルを作ってくれます。
sqlを外すとgoファイルを作ります(SQLで書きたいので今回は省略)。


-- +goose Up
-- SQL in section 'Up' is executed when this migration is applied


-- +goose Down
-- SQL section 'Down' is executed when this migration is rolled back

上記のようなファイルができますので、あとはSQLを書くだけです。
+goose Up 以下にUp時に実行するSQL
+goose Down 以下にDown時に実行するSQL
を記述します。


-- +goose Up
-- SQL in section 'Up' is executed when this migration is applied
CREATE TABLE users (
    id varchar(255) 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;

テーブルを作成する処理をUpに、削除する処理をDownに記述しました。
goose upを叩いて、Upの処理を実行します。

$ goose up
goose: migrating db environment 'development', current version: 20161027112322, target: 20161104023332
OK    20161104023332_createUsers.sql

これで +goose Up に記述されたSQLが実行されてテーブルが作成されます。

goose down を叩くと、Downの処理が実行されます。

$ goose down
goose: migrating db environment 'development', current version: 20161104023332, target: 20161027112322
OK    20161104023332_createTable.sql

まとめ

  • gooseの利用は簡単
  • SQLを書けばいいので想定通り学習コストは低い
  • 今回試してないが環境ごとの設定記述も可能なので十分使えそう。

『 Go 』Article List
Category List

Eye Catch Image
Read More

Androidに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

AWSに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Bitcoinに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

CentOSに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

dockerに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

GitHubに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Goに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Javaに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

JavaScriptに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Laravelに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Pythonに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Rubyに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Scalaに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Swiftに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Unityに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Vue.jsに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Wordpressに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

機械学習に関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。