0
0

Goのマイグレーションツールであるgooseでdockerのmysqlのマイグレーションをする方法

Posted at

はじめに

今回はGo言語の学習で、github版のgooseでのマイグレーションをどうすればいいのか調べてもイマイチいい情報がなかったのでメモ感覚で書きます

使っている環境

  • golang 1.23
    • これはmacに直接ダウンロードしました。
  • docker
    • mysql 8.0.34
  • goose

やりたい事

マイグレーションファイルを作ってgooseでdocker上にあるmysqlに対してマイグレーションを実行させたい

やったこと

※golangのインストールやdockerでmysqlのコンテナを立ち上げる方法は割愛します(mysqlはmacに直接インストールしても問題ないです)

gooseのインストール

下記コマンドでgooseをインストールする

go install github.com/pressly/goose/v3/cmd/goose@latest

その後whichコマンドで確認する

この時パスが通ってない場合はパスを通す必要あり

which goose

## 何も表示されなかった場合は
 echo 'export GOPATH=$HOME/go' >> ~/.zshrc 
 echo 'export PATH=$PATH:$GOPATH/bin' >> ~/.zshrc 
 source ~/.zshrc  

マイグレーションファイルの作成

まずは「myproject/db/migrations」ディレクトリを作成する(myprojectは自分の好きな名称にしてください)

mkdir -p myproject/db/migrations

その後gooseのコマンドを使ってマイグレーションファイルを作ります(今回はcustomersというテーブルをマイグレーションでつくります)

cd myproject
goose -dir db/migrations create create_customers_table sql

実行が成功するとタイムスタンプ付きの「xxxxxxxxxxxxxxx_create_customers_table.sql」というファイルが「db/migrations」に作成されます
その作成されたファイルを下記のように書き換えます

作成されたファイルに
SELECT 'up SQL query';
SELECT 'down SQL query';
がデフォルトで入っていますが、これ消さないとマイグレーションがうまくいかないので消しましょう!

-- +goose Up
-- +goose StatementBegin
CREATE TABLE `customers` (
    `customer_id` INT AUTO_INCREMENT PRIMARY KEY,
    `name` VARCHAR(255) NOT NULL,
    `password` VARCHAR(255) NOT NULL,
    `created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    `updated_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);
-- +goose StatementEnd

-- +goose Down
-- +goose StatementBegin
DROP TABLE IF EXISTS `customers`;
-- +goose StatementEnd

マイグレーションの実行

gooseを使ってマイグレーションを走らせます

コマンド実行は「myproject」で実行するのでカレントディレクトリは「myproject」にしといてください!

今回マイグレーションを走らせたいDB(mysql)の情報は下記のようになります

  • ユーザー名: root
  • パスワード: root
  • ホスト: localhost
  • ポート: 3333
  • DB名: test_dev
 GOOSE_DRIVER=mysql GOOSE_DBSTRING="root:root@tcp(localhost:3333)/test_dev" goose -dir db/migrations up

実行が成功したらDBに「customers」というテーブルが新たに作成されます
スクリーンショット 2024-08-24 3.24.35.png

マイグレーション実行後切り戻したい場合は下記のコマンドを実行します

GOOSE_DBSTRING="root:root@tcp(localhost:3333)/test_dev" goose -dir db/migrations down

最後に

今回github版のgooseを使ったマイグレーションをしてみました
コマンド実行する際に接続先の指定と使うファイルの指定をどのようにすればいいのかイマイチ分からず苦労しました

ネットだとbibucket版のgooseを使った方法が多数ありますが2015年頃から更新が止まっており個人的にはあまりオススメしません(最新のPCで動かない場合もあるみたいです)
まだGo言語初心者なのでこれから少しずつ学習していきたいです。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0