3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Go】golang-migrate × sqlboiler で migrateしたmysqlのtableを自動でmodel化する

Last updated at Posted at 2023-12-15

はじめに

本記事ではgolang-migrateとsqlboilerを使ってmysqlのtableを自動でmodel化する方法についてまとめます。

dockerの扱い方については解説しません

環境

  • go 1.21.5
  • golang-migrate v4.16.2
  • sqlboiler v4.15.0

最終的なディレクトリ構成

.
├── app
│   └── domain
│       └── models // この中にmodelが生成されています
│           ├── boil_queries.go
│           ├── boil_table_names.go
│           ├── boil_types.go
│           ├── boil_view_names.go
│           ├── mysql_upsert.go
│           ├── schema_migrations.go
│           └── users.go
├── config.toml
├── data
├── database
│   └── migrations
│       ├── 000001_create_user_table.down.sql
│       └── 000001_create_user_table.up.sql
├── db
│   └── my.cnf
├── docker-compose.yml
├── go.mod
├── go.sum

dockerコンテナの立ち上げ

mysqlのコンテナを立ち上げます。

migration

まず、golang-migrateのインストールを行います。

brew install golang-migrate

次に、以下のコマンドをプロジェクトディレクトリで実行します。

migrate create -ext sql -dir database/migrations -seq create_user_table

database/migrationsはmigrationファイルを管理したいディレクトリ名、create_user_tableは生成されるsqlファイルの名称になります。

上記コマンドを実行すると、指定のディレクトリにsqlファイルが2つ生成されます。
upがついているsqlファイルには以下を記述します

CREATE TABLE `users` (
  `id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
  `username` varchar(255) NOT NULL,
  `password` varchar(255) NULL DEFAULT NULL
);

downがついているファイルには以下を記述します。

DROP TABLE IF EXISTS users;

以上の操作を行った後、

migrate --path ./database/migrations --database 'mysqlのアドレス' -verbose up 

を実行するとusersテーブルが作成されます。

migrate --path ./database/migrations --database 'mysqlのアドレス' -verbose down

を実行するとusersテーブルが削除されます。

他のテーブルを追加したい際も同様の手順でmigrateする事ができます。
以上がmigrateの手順です。

modelの生成

続いて、migrateしたtable情報を元にmodelをsqlboilerで自動生成します。

sqlboilerのインストール

go install github.com/volatiletech/sqlboiler/v4@latest 

まず、プロジェクトファイル直下にdb設定を記述したtomlファイルを用意します。

あくまで例なので環境に応じて変更してください

[mysql]
dbname = "golang_test"
user = "test"
pass = "test"
host = "test"
port = 3307
sslmode = "false"

その後、以下のコマンドを実行します。
-o optionには生成するディレクトリを指定します。

sqlboiler mysql -c config.toml -o app/domain/models --no-tests 

すると、指定ディレクトリにmodelが自動で生成されます。

しかし、このままだとpackage errorが出ているかと思うので

go mod init 'プロジェクトディレクトリ名'
go mod tidy

を実行します。

これでエラーが解消されます。

以上でmodelの自動生成が完了です。

終わりに

今回はmodelを自動生成する方法についてまとめてみました。
sqlboilerはgormと比べて、migrate機能がないため、他のツールと併用する必要がありますが、modelに優秀なメソッドが生えるのに加えてこちらのベンチマーク結果にあるように、あらゆる面でパフォーマンスで優れていそうです。

まだまだ使いこなせていないので、使い方について模索していこうと思います。

3
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
3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?